1
0
Fork 0

Compare commits

...

10 Commits

Author SHA1 Message Date
radex cd4aa9ba09
playlist support 2024-05-25 13:46:04 +02:00
radex 480068fabb
convert video 2024-05-25 12:45:54 +02:00
radex 1fc98118de
audio AND video? no way! 2024-05-25 12:06:50 +02:00
radex 43849b1a98
diagnostics 2024-05-25 00:04:18 +02:00
radex cffe7eefbf
more bits 2024-05-25 00:04:14 +02:00
radex fe46fc625d
fixes 2024-05-24 21:01:34 +02:00
radex 9307c59b3e
pio faster 2024-05-24 20:35:56 +02:00
radex f2a2b931f8
pio poc 2024-05-24 18:01:23 +02:00
radex 76eef53dd0
some pcb review 2024-05-24 17:46:36 +02:00
radex 9182e57b95
MainBoard: fixes, simplify, BOM optimize, DRC fixes, ERC fixes 2024-05-23 11:56:08 +02:00
28 changed files with 11218 additions and 8853 deletions

2
.gitignore vendored
View File

@ -1 +1 @@
badapple.webm video/

2
firmware/.gitignore vendored
View File

@ -6,5 +6,5 @@
src/gfx_png.h src/gfx_png.h
src/audio_sample.h src/audio_sample.h
gfx/ gfx/
gfx_output/ video_output/
audio/ audio/

View File

@ -1,4 +1,10 @@
convert video ## convert video
```sh
scripts/convert.sh ../badapple.webm
```
or manually:
``` ```
ffmpeg -i ../badapple.webm -vf "fps=30,scale=40:40:force_original_aspect_ratio=increase,crop=40:40,format=gray" gfx/frame_%04d.png ffmpeg -i ../badapple.webm -vf "fps=30,scale=40:40:force_original_aspect_ratio=increase,crop=40:40,format=gray" gfx/frame_%04d.png

View File

@ -16,7 +16,7 @@ if len(data_in.shape)>1:
print("resampling...") print("resampling...")
converter = 'sinc_best' # or 'sinc_fastest', ... converter = 'sinc_best' # or 'sinc_fastest', ...
desired_sample_rate = 44000.0 desired_sample_rate = 22000.0
ratio = desired_sample_rate/datasamplerate ratio = desired_sample_rate/datasamplerate
data_out = samplerate.resample(data_in, ratio, converter) data_out = samplerate.resample(data_in, ratio, converter)
@ -58,7 +58,9 @@ normalized = [int((v-minValue)/vrange*255) for v in data_out]
print("writing blob...") print("writing blob...")
with open("audio/audio.bin", "wb") as f: os.makedirs("video_output", exist_ok=True)
with open("video_output/audio.bin", "wb") as f:
f.write(bytes(normalized)) f.write(bytes(normalized))
print("done!") print("done!")

15
firmware/scripts/convert.sh Executable file
View File

@ -0,0 +1,15 @@
#!/usr/bin/env bash
set -e
set -x
echo "converting $1"
rm -fr gfx
rm -fr video_output
rm -fr audio
mkdir gfx
ffmpeg -i "$1" -vf "fps=30,scale=40:40:force_original_aspect_ratio=increase,crop=40:40,format=gray" gfx/frame_%04d.png
python3 scripts/gfx_to_blob.py
mkdir audio
ffmpeg -i "$1" -ar 44000 audio/output.wav
python3 scripts/audio_convert.py
open video_output

View File

@ -26,10 +26,10 @@ for (name, path) in gfx_files:
lengths += size.to_bytes(2, byteorder="little") lengths += size.to_bytes(2, byteorder="little")
# create the output directory if it doesn't exist # create the output directory if it doesn't exist
os.makedirs("gfx_output", exist_ok=True) os.makedirs("video_output", exist_ok=True)
with open("gfx_output/gfx.bin", "wb") as f: with open("video_output/gfx.bin", "wb") as f:
f.write(blob) f.write(blob)
with open("gfx_output/gfx_len.bin", "wb") as f: with open("video_output/gfx_len.bin", "wb") as f:
f.write(lengths) f.write(lengths)

View File

@ -5,8 +5,8 @@
#define AUDIO_PIN 2 #define AUDIO_PIN 2
#define AUDIO_RATE 44000.0f #define AUDIO_RATE 22000.0f
#define BUFFER_LEN 512*32 #define BUFFER_LEN 512*2
#define BUFFER_LEN_MS (BUFFER_LEN / AUDIO_RATE) * 1000.0f #define BUFFER_LEN_MS (BUFFER_LEN / AUDIO_RATE) * 1000.0f
extern uint8_t wav_buffer_0[BUFFER_LEN]; extern uint8_t wav_buffer_0[BUFFER_LEN];

View File

@ -3,10 +3,10 @@
#include "lodepng.h" #include "lodepng.h"
#include "leds.h" #include "leds.h"
uint16_t gfxFrameLengthsBuffer[12000] = {0}; uint16_t gfxFrameLengthsBuffer[24000] = {0};
uint16_t frameCount = 0; uint16_t frameCount = 0;
uint8_t gfxFrameBuffer[2048] = {0}; uint8_t gfxFrameBuffer[6400] = {0};
bool gfx_decoder_loadNextFrame() { bool gfx_decoder_loadNextFrame() {
// load frame from SD card // load frame from SD card

View File

@ -4,9 +4,9 @@
#include <Arduino.h> #include <Arduino.h>
extern uint16_t gfxFrameLengthsBuffer[12000]; extern uint16_t gfxFrameLengthsBuffer[24000];
extern uint16_t frameCount; extern uint16_t frameCount;
extern uint8_t gfxFrameBuffer[2048]; extern uint8_t gfxFrameBuffer[6400];
bool gfx_decoder_loadNextFrame(); bool gfx_decoder_loadNextFrame();
bool gfx_decoder_handleLoop(); bool gfx_decoder_handleLoop();

View File

@ -2,11 +2,22 @@
#include "hardware/gpio.h" #include "hardware/gpio.h"
#include "mbed_wait_api.h" #include "mbed_wait_api.h"
#include "pico/multicore.h" #include "pico/multicore.h"
#include "hardware/pio.h"
#include "leds.h" #include "leds.h"
#include "leds.pio.h"
PIO pusher_pio = pio0;
uint pusher_sm = 255; // invalid
// NOTE: RCLK, SRCLK capture on *rising* edge
inline void pulsePin(uint8_t pin) { inline void pulsePin(uint8_t pin) {
gpio_put(pin, HIGH); gpio_put(pin, HIGH);
// there are glitches without this (maybe just due to breadboard...)
_NOP();
_NOP();
_NOP();
// busy_wait_us_32(50);
gpio_put(pin, LOW); gpio_put(pin, LOW);
} }
@ -20,12 +31,13 @@ inline void outputEnable(uint8_t pin, bool enable) {
gpio_put(pin, !enable); gpio_put(pin, !enable);
} }
// we have 4-bit color depth, so 16 levels of brightness // we have COLOR_BITS-bit color depth, so 2^COLOR_BITS levels of brightness
// we go from phase 0 to phase 3 // we go from phase 0 to phase (COLOR_BITS-1)
uint8_t brightnessPhase = 0; uint8_t brightnessPhase = 0;
uint8_t brightnessPhaseDelays[] = {1, 10, 30, 100}; uint8_t brightnessPhaseDelays[COLOR_BITS] = {0, 1, 6, 20, 60};
uint8_t framebuffer[ROW_COUNT * COL_COUNT] = {0}; // NOTE: Alignment required to allow 4-byte reads
uint8_t framebuffer[ROW_COUNT * COL_COUNT] __attribute__((aligned(32))) = {0};
void leds_init() { void leds_init() {
memset(framebuffer, 0, sizeof(framebuffer)); memset(framebuffer, 0, sizeof(framebuffer));
@ -37,6 +49,7 @@ void leds_init() {
// set up col pins // set up col pins
pinMode(COL_SER, OUTPUT); pinMode(COL_SER, OUTPUT);
pinMode(COL_OE, OUTPUT); pinMode(COL_OE, OUTPUT);
outputEnable(ROW_OE, false);
pinMode(COL_RCLK, OUTPUT); pinMode(COL_RCLK, OUTPUT);
pinMode(COL_SRCLK, OUTPUT); pinMode(COL_SRCLK, OUTPUT);
pinMode(COL_SRCLR, OUTPUT); pinMode(COL_SRCLR, OUTPUT);
@ -44,6 +57,7 @@ void leds_init() {
// set up row pins // set up row pins
pinMode(ROW_SER, OUTPUT); pinMode(ROW_SER, OUTPUT);
pinMode(ROW_OE, OUTPUT); pinMode(ROW_OE, OUTPUT);
outputEnable(ROW_OE, false);
pinMode(ROW_RCLK, OUTPUT); pinMode(ROW_RCLK, OUTPUT);
pinMode(ROW_SRCLK, OUTPUT); pinMode(ROW_SRCLK, OUTPUT);
pinMode(ROW_SRCLR, OUTPUT); pinMode(ROW_SRCLR, OUTPUT);
@ -70,10 +84,10 @@ void main2() {
} }
} }
void leds_initPusher();
void leds_initRenderer() { void leds_initRenderer() {
// launch core1 leds_initPusher();
// NOTE: For some reason, without delay, core1 doesn't start?
// delay(500);
multicore_reset_core1(); multicore_reset_core1();
multicore_launch_core1(main2); multicore_launch_core1(main2);
} }
@ -86,7 +100,7 @@ void leds_render() {
clearShiftReg(ROW_SRCLK, ROW_SRCLR); clearShiftReg(ROW_SRCLK, ROW_SRCLR);
// start selecting rows // start selecting rows
digitalWrite(ROW_SER, HIGH); gpio_put(ROW_SER, HIGH);
for (int yCount = 0; yCount < ROW_COUNT; yCount++) { for (int yCount = 0; yCount < ROW_COUNT; yCount++) {
int y = ROW_COUNT - 1 - yCount; int y = ROW_COUNT - 1 - yCount;
@ -94,12 +108,12 @@ void leds_render() {
// we want to keep the matrix on during update (except during latch). At low brightness phases, // we want to keep the matrix on during update (except during latch). At low brightness phases,
// we want it off to actually be dim // we want it off to actually be dim
bool brightPhase = brightnessPhase >= 2; bool brightPhase = brightnessPhase >= 2;
// digitalWrite(ROW_OE, !brightPhase); outputEnable(ROW_OE, brightPhase);
// next row // next row
pulsePin(ROW_SRCLK); pulsePin(ROW_SRCLK);
// only one row // only one row
digitalWrite(ROW_SER, LOW); gpio_put(ROW_SER, LOW);
// we use 7/8 stages on shift registers + 1 is unused // we use 7/8 stages on shift registers + 1 is unused
int moduleY = yCount % 20; int moduleY = yCount % 20;
@ -111,31 +125,54 @@ void leds_render() {
pulsePin(ROW_SRCLK); pulsePin(ROW_SRCLK);
} }
// clear columns
clearShiftReg(COL_SRCLK, COL_SRCLR);
// set row data // set row data
for (int x = 0; x < COL_COUNT; x++) { // NOTE: values are loaded right-left
// get value // Optimized implementation: use PIO, avoid division, modulo, etc...
// NOTE: values are loaded right-left // we use 7/8 stages of each shift register + 1 is unused so we need to do
uint8_t pxValue = framebuffer[y * ROW_COUNT + x]; // silly shit
// apply brightness // TODO: Some ideas for future optimization:
bool gotLight = (pxValue >> (4 + brightnessPhase)) & 1; // - see if we can disable px pusher delays on improved electric interface
// set value (note: inverted logic) // - use a profiler to see how the inner loop can be improved
gpio_put(COL_SER, !gotLight); // - do the shift register bullshit once per frame, so that data can be loaded into
// push value // registers with aligned access, DMA, etc.
pulsePin(COL_SRCLK); // - improve outer loop which adds 2us of processing on each loop
// - change busy wait into some kind of interrupt-based thing so that processing can continue
// - latch row and clock simultaneously, avoid disabling output
uint8_t *buffer = framebuffer + (y * COL_COUNT);
for (int xModule = 0; xModule < COL_MODULES; xModule++) {
uint32_t pxValues;
// we use 7/8 stages on shift registers + 1 is unused // placeholder at 0; pixels 0, 1, 2
int moduleX = x % 20; pxValues = *(reinterpret_cast<uint32_t *>(buffer));
if (moduleX == 0) { pxValues = pxValues << 8;
pulsePin(COL_SRCLK); pio_sm_put_blocking(pusher_pio, pusher_sm, pxValues >> brightnessPhase);
}
if (moduleX == 6 || moduleX == 13 || moduleX == 19) { // pixels 3, 4, 5, placeholder at 6
pulsePin(COL_SRCLK); pxValues = *(reinterpret_cast<uint32_t *>(buffer + 3));
} pio_sm_put_blocking(pusher_pio, pusher_sm, pxValues >> brightnessPhase);
// pixels 6, 7, 8, 9
pxValues = *(reinterpret_cast<uint32_t *>(buffer + 6));
pio_sm_put_blocking(pusher_pio, pusher_sm, pxValues >> brightnessPhase);
// pixels 10, 11, 12, placeholder at 13
pxValues = *(reinterpret_cast<uint32_t *>(buffer + 10));
pio_sm_put_blocking(pusher_pio, pusher_sm, pxValues >> brightnessPhase);
// pixels 13, 14, 15, 16
pxValues = *(reinterpret_cast<uint32_t *>(buffer + 13));
pio_sm_put_blocking(pusher_pio, pusher_sm, pxValues >> brightnessPhase);
// pixels 17, 18, 19, placeholder
pxValues = *(reinterpret_cast<uint32_t *>(buffer + 17));
pio_sm_put_blocking(pusher_pio, pusher_sm, pxValues >> brightnessPhase);
buffer += 20;
} }
// wait for all data to be shifted out
pio_sm_drain_tx_fifo(pusher_pio, pusher_sm);
// disable columns before latch // disable columns before latch
outputEnable(ROW_OE, false); outputEnable(ROW_OE, false);
@ -150,5 +187,39 @@ void leds_render() {
} }
// next brightness phase // next brightness phase
brightnessPhase = (brightnessPhase + 1) % 4; brightnessPhase = (brightnessPhase + 1) % COLOR_BITS;
}
void leds_initPusher() {
PIO pio = pusher_pio;
uint sm = pio_claim_unused_sm(pio, true);
pusher_sm = sm;
uint offset = pio_add_program(pio, &leds_px_pusher_program);
uint dataPin = COL_SER;
uint latchPin = COL_SRCLK;
pio_sm_config config = leds_px_pusher_program_get_default_config(offset);
sm_config_set_clkdiv_int_frac(&config, 2, 0);
// Shift OSR to the right, autopull
sm_config_set_out_shift(&config, true, true, 32);
// Set OUT (data) pin, connect to pad, set as output
sm_config_set_out_pins(&config, dataPin, 1);
pio_gpio_init(pio, dataPin);
pio_sm_set_consecutive_pindirs(pio, sm, dataPin, 1, true);
// data is inverted
gpio_set_outover(dataPin, GPIO_OVERRIDE_INVERT);
// Set SET (latch) pin, connect to pad, set as output
sm_config_set_sideset_pins(&config, latchPin);
pio_gpio_init(pio, latchPin);
pio_sm_set_consecutive_pindirs(pio, sm, latchPin, 1, true);
// Load our configuration, and jump to the start of the program
pio_sm_init(pio, sm, offset, &config);
pio_sm_set_enabled(pio, sm, true);
} }

View File

@ -17,8 +17,10 @@
#define ROW_SRCLR 10 #define ROW_SRCLR 10
#define ROW_COUNT 40 #define ROW_COUNT 40
#define COL_COUNT 40 #define COL_MODULES 2
#define COL_COUNT COL_MODULES * 20
#define COLOR_BITS 5
#define FPS 30 #define FPS 30
#define MS_PER_FRAME 1000 / FPS #define MS_PER_FRAME 1000 / FPS

9
firmware/src/leds.pio Normal file
View File

@ -0,0 +1,9 @@
.program leds_px_pusher
.side_set 1 opt
.wrap_target
public entry_point:
out null, 3 side 0 [0] ; ignore least significant digits
out pins, 1 ; set bit (shifted for brightness phase by C code)
out null, 4 side 1 [1] ; ignore remaining bits, latch data, allow time for latching
nop side 0 ; return to 0 (weird glitches happen otherwise)
.wrap

43
firmware/src/leds.pio.h Normal file
View File

@ -0,0 +1,43 @@
// -------------------------------------------------- //
// This file is autogenerated by pioasm; do not edit! //
// -------------------------------------------------- //
#pragma once
#if !PICO_NO_HARDWARE
#include "hardware/pio.h"
#endif
// -------------- //
// leds_px_pusher //
// -------------- //
#define leds_px_pusher_wrap_target 0
#define leds_px_pusher_wrap 3
#define leds_px_pusher_offset_entry_point 0u
static const uint16_t leds_px_pusher_program_instructions[] = {
// .wrap_target
0x7063, // 0: out null, 3 side 0
0x6001, // 1: out pins, 1
0x7964, // 2: out null, 4 side 1 [1]
0xb042, // 3: nop side 0
// .wrap
};
#if !PICO_NO_HARDWARE
static const struct pio_program leds_px_pusher_program = {
.instructions = leds_px_pusher_program_instructions,
.length = 4,
.origin = -1,
};
static inline pio_sm_config leds_px_pusher_program_get_default_config(uint offset) {
pio_sm_config c = pio_get_default_sm_config();
sm_config_set_wrap(&c, offset + leds_px_pusher_wrap_target, offset + leds_px_pusher_wrap);
sm_config_set_sideset(&c, 2, true, false);
return c;
}
#endif

View File

@ -5,16 +5,19 @@
#include "leds.h" #include "leds.h"
#include "gfx_decoder.h" #include "gfx_decoder.h"
void loadVideo(size_t index);
void setup() { void setup() {
leds_init(); leds_init();
setupSDPins(); setupSDPins();
pinMode(6, INPUT_PULLUP); pinMode(4, INPUT_PULLUP);
delay(2000); delay(2000);
Serial.begin(115200); Serial.begin(115200);
Serial.println("Hello worldd!"); Serial.println("Hello worldd!");
init_audio(); init_audio();
leds_initRenderer();
// while (!isSDCardInserted()) { // while (!isSDCardInserted()) {
// Serial.println("SD card not connected, waiting..."); // Serial.println("SD card not connected, waiting...");
@ -23,25 +26,37 @@ void setup() {
// delay(100); // delay(100);
setupSD(); setupSD();
sd_loadPlaylist();
sd_loadAudio(); loadVideo(0);
}
if (!sd_loadGfxFrameLengths()) { size_t currentVideoIndex = 0;
bool isLoaded = false;
void loadVideo(size_t index) {
audio_stop();
sd_loadAudio(index);
if (!sd_loadGfxFrameLengths(index)) {
Serial.println("Failed to load gfx frame lengths"); Serial.println("Failed to load gfx frame lengths");
while (true) {} while (true) {}
} }
if (!sd_loadGfxBlob()) { if (!sd_loadGfxBlob(index)) {
Serial.println("Failed to load gfx blob"); Serial.println("Failed to load gfx blob");
while (true) {} while (true) {}
} }
leds_initRenderer(); isLoaded = true;
} }
void loop() { void loop() {
if (digitalRead(6) == LOW) { if (digitalRead(4) == LOW) {
sd_loadNextAudio(); Serial.println("Next song!");
currentVideoIndex = (currentVideoIndex + 1) % playlistSize;
loadVideo(currentVideoIndex);
} }
// if (Serial.available() > 0) { // if (Serial.available() > 0) {
@ -57,7 +72,11 @@ void loop() {
// } // }
// } // }
if (!gfx_decoder_handleLoop()) { if (isLoaded) {
Serial.println("Failed to load frame..."); sd_loadNextAudio();
if (!gfx_decoder_handleLoop()) {
Serial.println("Failed to load frame...");
}
} }
} }

View File

@ -44,7 +44,7 @@ void setupSD() {
// printSDConfig(); // printSDConfig();
if (!SD.begin(5000000, PIN_SPI_SS)) { if (!SD.begin(20000000, PIN_SPI_SS)) {
Serial.println("SD Initialization failed!"); Serial.println("SD Initialization failed!");
// Serial.print("Error code: "); // Serial.print("Error code: ");
// Serial.println(SD.card.errorCode(), HEX); // Serial.println(SD.card.errorCode(), HEX);
@ -156,10 +156,83 @@ void printSDStats(RP2040_SdVolume volume) {
Serial.println((float)volumesize / 1024.0); Serial.println((float)volumesize / 1024.0);
} }
String playlist[128] = {};
size_t playlistSize = 0;
void sd_loadPlaylist() {
auto path = "video/playlist.txt";
if (!SD.exists(path)) {
Serial.println("Could not find playlist for videos :(");
return;
}
auto playlistFile = SD.open(path, FILE_READ);
Serial.println("Playlist file opened");
char playlist_buffer[512];
auto fileSize = playlistFile.size();
if (fileSize > sizeof(playlist_buffer)) {
Serial.print("Playlist file too large, max: ");
Serial.println(sizeof(playlist_buffer));
return;
}
if (playlistFile.read(&playlist_buffer, sizeof(playlist_buffer)) != fileSize) {
Serial.println("Could not read playlist file");
return;
}
playlistFile.close();
Serial.println("Parsing playlist...");
// parse playlist
auto playlistStr = String(playlist_buffer, fileSize);
Serial.println(playlistStr);
auto idx = 0;
while (true) {
auto nextIdx = playlistStr.indexOf('\n', idx);
if (nextIdx == -1) {
break;
}
auto line = playlistStr.substring(idx, nextIdx);
if (line.length() == 0) {
break;
}
if (line.length() > 8) {
Serial.print("Video name too long, size: ");
Serial.print(line.length());
Serial.println(", max 8");
break;
}
playlist[playlistSize++] = line;
idx = nextIdx + 1;
}
Serial.println("Playlist loaded");
for (size_t i = 0; i < playlistSize; i++) {
Serial.print(i);
Serial.print(": ");
Serial.println(playlist[i]);
}
}
File audioFile; File audioFile;
void sd_loadAudio() { void sd_loadAudio(size_t index) {
if (!SD.exists("/badapple/audio.bin")) { if (index >= playlistSize) {
Serial.println("Index out of range");
return;
}
auto path = "video/" + playlist[index] + "/audio.bin";
if (!SD.exists(path)) {
Serial.println("Audio not found :("); Serial.println("Audio not found :(");
return; return;
} }
@ -168,7 +241,7 @@ void sd_loadAudio() {
audioFile.close(); audioFile.close();
} }
audioFile = SD.open("/badapple/audio.bin", FILE_READ); audioFile = SD.open(path, FILE_READ);
Serial.println("Audio file opened"); Serial.println("Audio file opened");
audio_stop(); audio_stop();
@ -201,16 +274,23 @@ void sd_loadNextAudio() {
Serial.println("End of audio file, rewinding..."); Serial.println("End of audio file, rewinding...");
audioFile.seek(0); audioFile.seek(0);
} else { } else {
/*
Serial.print("Read "); Serial.print("Read ");
Serial.print(bytesRead); Serial.print(bytesRead);
Serial.print(" bytes from audio file in "); Serial.print(" bytes from audio file in ");
Serial.print(millis() - b4); Serial.print(millis() - b4);
Serial.println("ms"); Serial.println("ms");
*/
} }
} }
bool sd_loadGfxFrameLengths() { bool sd_loadGfxFrameLengths(size_t index) {
auto path = "badapple/gfx_len.bin"; if (index >= playlistSize) {
Serial.println("Index out of range");
return false;
}
auto path = "video/" + playlist[index] + "/gfx_len.bin";
if (!SD.exists(path)) { if (!SD.exists(path)) {
Serial.println("Frame lengths file not found :("); Serial.println("Frame lengths file not found :(");
@ -241,8 +321,13 @@ File gfxFile;
uint16_t frameIdx = 0; uint16_t frameIdx = 0;
bool sd_loadGfxBlob() { bool sd_loadGfxBlob(size_t index) {
auto path = "badapple/gfx.bin"; if (index >= playlistSize) {
Serial.println("Index out of range");
return false;
}
auto path = "video/" + playlist[index] + "/gfx.bin";
if (!SD.exists(path)) { if (!SD.exists(path)) {
Serial.println("Gfx blob file not found :("); Serial.println("Gfx blob file not found :(");
@ -252,11 +337,16 @@ bool sd_loadGfxBlob() {
gfxFile = SD.open(path, FILE_READ); gfxFile = SD.open(path, FILE_READ);
Serial.println("Opened video frames"); Serial.println("Opened video frames");
frameIdx = 0;
return true; return true;
} }
// Returns size of frame read or -1 if error // Returns size of frame read or -1 if error
int32_t sd_loadNextFrame() { int32_t sd_loadNextFrame() {
if (frameIdx > 0) {
// return -1;
}
if (!gfxFile || !gfxFile.available()) { if (!gfxFile || !gfxFile.available()) {
Serial.println("Gfx file not available"); Serial.println("Gfx file not available");
return -1; return -1;
@ -270,7 +360,8 @@ int32_t sd_loadNextFrame() {
// get size of frame png // get size of frame png
auto frameSize = gfxFrameLengthsBuffer[frameIdx]; auto frameSize = gfxFrameLengthsBuffer[frameIdx];
if (frameSize > sizeof(gfxFrameBuffer)) { if (frameSize > sizeof(gfxFrameBuffer)) {
Serial.println("Frame too large"); Serial.print("Frame too large: ");
Serial.println(frameSize);
return -1; return -1;
} }

View File

@ -5,8 +5,11 @@ void setupSD();
bool isSDCardInserted(); bool isSDCardInserted();
void sd_loadAudio(); extern size_t playlistSize;
void sd_loadPlaylist();
void sd_loadAudio(size_t index);
void sd_loadNextAudio(); void sd_loadNextAudio();
bool sd_loadGfxFrameLengths(); bool sd_loadGfxFrameLengths(size_t index);
bool sd_loadGfxBlob(); bool sd_loadGfxBlob(size_t index);
int32_t sd_loadNextFrame(); int32_t sd_loadNextFrame();

View File

@ -8,3 +8,5 @@ DET MISO CLK MOSI DAT2
D2 D3/CS CMD/MOSI VSS1 VDD CLK VSS2 D0/MISO D1
x 17 19 x x 18 x 16 x

File diff suppressed because it is too large Load Diff

View File

@ -38,8 +38,8 @@
"other_text_upright": false, "other_text_upright": false,
"pads": { "pads": {
"drill": 0.0, "drill": 0.0,
"height": 1.0, "height": 2.5,
"width": 1.525 "width": 4.4
}, },
"silk_line_width": 0.09999999999999999, "silk_line_width": 0.09999999999999999,
"silk_text_italic": false, "silk_text_italic": false,
@ -48,7 +48,7 @@
"silk_text_thickness": 0.09999999999999999, "silk_text_thickness": 0.09999999999999999,
"silk_text_upright": false, "silk_text_upright": false,
"zones": { "zones": {
"min_clearance": 0.25 "min_clearance": 0.3
} }
}, },
"diff_pair_dimensions": [ "diff_pair_dimensions": [
@ -130,7 +130,7 @@
"min_track_width": 0.125, "min_track_width": 0.125,
"min_via_annular_width": 0.049999999999999996, "min_via_annular_width": 0.049999999999999996,
"min_via_diameter": 0.6, "min_via_diameter": 0.6,
"solder_mask_to_copper_clearance": 0.0, "solder_mask_to_copper_clearance": 0.005,
"use_height_for_length_calcs": true "use_height_for_length_calcs": true
}, },
"teardrop_options": [ "teardrop_options": [
@ -702,23 +702,29 @@
"show": false "show": false
}, },
{ {
"group_by": false, "group_by": true,
"label": "LCSC", "label": "LCSC",
"name": "LCSC", "name": "LCSC",
"show": false "show": true
}, },
{ {
"group_by": false, "group_by": false,
"label": "Description", "label": "Description",
"name": "Description", "name": "Description",
"show": false "show": false
},
{
"group_by": false,
"label": "EXCLUDE_FROM_BOM",
"name": "${EXCLUDE_FROM_BOM}",
"show": true
} }
], ],
"filter_string": "", "filter_string": "",
"group_symbols": true, "group_symbols": true,
"name": "", "name": "",
"sort_asc": true, "sort_asc": true,
"sort_field": "Reference" "sort_field": "Value"
}, },
"connection_grid_size": 50.0, "connection_grid_size": 50.0,
"drawing": { "drawing": {
@ -749,7 +755,7 @@
}, },
"net_format_name": "", "net_format_name": "",
"page_layout_descr_file": "", "page_layout_descr_file": "",
"plot_directory": "", "plot_directory": "/Users/radex/Downloads/",
"spice_current_sheet_as_root": false, "spice_current_sheet_as_root": false,
"spice_external_command": "spice \"%I\"", "spice_external_command": "spice \"%I\"",
"spice_model_current_sheet_as_root": true, "spice_model_current_sheet_as_root": true,

File diff suppressed because it is too large Load Diff

View File

@ -923,7 +923,7 @@
(at 140.97 49.53 180) (at 140.97 49.53 180)
(unit 1) (unit 1)
(exclude_from_sim no) (exclude_from_sim no)
(in_bom yes) (in_bom no)
(on_board yes) (on_board yes)
(dnp no) (dnp no)
(uuid "21ebb72f-9bad-4d6e-b046-8bb788495541") (uuid "21ebb72f-9bad-4d6e-b046-8bb788495541")
@ -1267,7 +1267,7 @@
(hide yes) (hide yes)
) )
) )
(property "LCSC" "C307331" (property "LCSC" "C1525"
(at 69.85 54.61 0) (at 69.85 54.61 0)
(effects (effects
(font (font

View File

@ -1922,7 +1922,7 @@
(hide yes) (hide yes)
) )
) )
(property "LCSC" "C307331" (property "LCSC" "C1525"
(at 148.59 58.42 0) (at 148.59 58.42 0)
(effects (effects
(font (font

View File

@ -1129,13 +1129,13 @@
) )
(wire (wire
(pts (pts
(xy 52.07 62.23) (xy 101.6 62.23) (xy 52.07 69.85) (xy 82.55 69.85)
) )
(stroke (stroke
(width 0) (width 0)
(type default) (type default)
) )
(uuid "437eac0c-7510-4dbd-bc44-8d54a0f87458") (uuid "47768312-1e06-444e-a205-60ca70975c44")
) )
(wire (wire
(pts (pts
@ -1167,6 +1167,16 @@
) )
(uuid "56b27960-7c4c-4441-8725-b46d5b62efd2") (uuid "56b27960-7c4c-4441-8725-b46d5b62efd2")
) )
(wire
(pts
(xy 52.07 64.77) (xy 91.44 64.77)
)
(stroke
(width 0)
(type default)
)
(uuid "58d4c71f-4f85-4b21-972d-17afca94db00")
)
(wire (wire
(pts (pts
(xy 152.4 92.71) (xy 153.67 92.71) (xy 152.4 92.71) (xy 153.67 92.71)
@ -1189,13 +1199,13 @@
) )
(wire (wire
(pts (pts
(xy 52.07 64.77) (xy 91.44 64.77) (xy 52.07 62.23) (xy 101.6 62.23)
) )
(stroke (stroke
(width 0) (width 0)
(type default) (type default)
) )
(uuid "5f401f97-217c-4ae4-b27a-271dcdd4ea21") (uuid "60f14a36-0c94-4bb4-83b2-59f788ff8525")
) )
(wire (wire
(pts (pts
@ -1277,16 +1287,6 @@
) )
(uuid "857df60f-a77e-4248-87a5-094a84616c50") (uuid "857df60f-a77e-4248-87a5-094a84616c50")
) )
(wire
(pts
(xy 52.07 69.85) (xy 82.55 69.85)
)
(stroke
(width 0)
(type default)
)
(uuid "87dc611b-d857-4b03-a783-71eac35ab9f9")
)
(wire (wire
(pts (pts
(xy 44.45 74.93) (xy 43.18 74.93) (xy 44.45 74.93) (xy 43.18 74.93)
@ -1655,7 +1655,7 @@
(uuid "1887344f-ff5e-43a1-9a9d-f5e24e43518b") (uuid "1887344f-ff5e-43a1-9a9d-f5e24e43518b")
) )
(label "SD_CLK" (label "SD_CLK"
(at 59.69 69.85 0) (at 60.96 69.85 0)
(fields_autoplaced yes) (fields_autoplaced yes)
(effects (effects
(font (font
@ -1666,7 +1666,7 @@
(uuid "25487422-3555-45ec-b5ef-336143b4a444") (uuid "25487422-3555-45ec-b5ef-336143b4a444")
) )
(label "SD_CS_DAT3" (label "SD_CS_DAT3"
(at 59.69 62.23 0) (at 60.96 62.23 0)
(fields_autoplaced yes) (fields_autoplaced yes)
(effects (effects
(font (font
@ -1688,7 +1688,7 @@
(uuid "88d4e665-6450-45d8-b61e-ee0ef714a380") (uuid "88d4e665-6450-45d8-b61e-ee0ef714a380")
) )
(label "SD_MOSI_CMD" (label "SD_MOSI_CMD"
(at 59.69 64.77 0) (at 60.96 64.77 0)
(fields_autoplaced yes) (fields_autoplaced yes)
(effects (effects
(font (font
@ -1699,7 +1699,7 @@
(uuid "bb4d3927-b49a-42cb-b88c-8342c70f3acb") (uuid "bb4d3927-b49a-42cb-b88c-8342c70f3acb")
) )
(label "SD_MISO_DAT0" (label "SD_MISO_DAT0"
(at 59.69 74.93 0) (at 60.96 74.93 0)
(fields_autoplaced yes) (fields_autoplaced yes)
(effects (effects
(font (font
@ -1956,7 +1956,7 @@
(hide yes) (hide yes)
) )
) )
(property "LCSC" "" (property "LCSC" "C25819"
(at 91.44 101.6 0) (at 91.44 101.6 0)
(effects (effects
(font (font
@ -2114,7 +2114,7 @@
(hide yes) (hide yes)
) )
) )
(property "LCSC" "" (property "LCSC" "C25819"
(at 110.49 54.61 0) (at 110.49 54.61 0)
(effects (effects
(font (font
@ -2325,7 +2325,7 @@
(hide yes) (hide yes)
) )
) )
(property "LCSC" "" (property "LCSC" "C25819"
(at 73.66 54.61 0) (at 73.66 54.61 0)
(effects (effects
(font (font
@ -2404,7 +2404,7 @@
(hide yes) (hide yes)
) )
) )
(property "LCSC" "" (property "LCSC" "C25819"
(at 73.66 101.6 0) (at 73.66 101.6 0)
(effects (effects
(font (font
@ -2549,7 +2549,7 @@
(hide yes) (hide yes)
) )
) )
(property "LCSC" "" (property "LCSC" "C25819"
(at 110.49 101.6 0) (at 110.49 101.6 0)
(effects (effects
(font (font
@ -2628,7 +2628,7 @@
(hide yes) (hide yes)
) )
) )
(property "LCSC" "" (property "LCSC" "C25819"
(at 64.77 54.61 0) (at 64.77 54.61 0)
(effects (effects
(font (font
@ -2915,7 +2915,7 @@
(hide yes) (hide yes)
) )
) )
(property "LCSC" "" (property "LCSC" "C25819"
(at 91.44 54.61 0) (at 91.44 54.61 0)
(effects (effects
(font (font
@ -3086,7 +3086,7 @@
(at 140.97 50.8 0) (at 140.97 50.8 0)
(unit 1) (unit 1)
(exclude_from_sim no) (exclude_from_sim no)
(in_bom yes) (in_bom no)
(on_board yes) (on_board yes)
(dnp no) (dnp no)
(fields_autoplaced yes) (fields_autoplaced yes)
@ -3248,7 +3248,7 @@
(hide yes) (hide yes)
) )
) )
(property "LCSC" "" (property "LCSC" "C25819"
(at 101.6 54.61 0) (at 101.6 54.61 0)
(effects (effects
(font (font
@ -3393,7 +3393,7 @@
(hide yes) (hide yes)
) )
) )
(property "LCSC" "" (property "LCSC" "C25819"
(at 82.55 101.6 0) (at 82.55 101.6 0)
(effects (effects
(font (font
@ -3472,7 +3472,7 @@
(hide yes) (hide yes)
) )
) )
(property "LCSC" "C307331" (property "LCSC" "C1525"
(at 124.46 40.64 0) (at 124.46 40.64 0)
(effects (effects
(font (font
@ -3627,7 +3627,7 @@
(hide yes) (hide yes)
) )
) )
(property "LCSC" "" (property "LCSC" "C25819"
(at 64.77 101.6 0) (at 64.77 101.6 0)
(effects (effects
(font (font
@ -3772,7 +3772,7 @@
(hide yes) (hide yes)
) )
) )
(property "LCSC" "" (property "LCSC" "C25819"
(at 101.6 101.6 0) (at 101.6 101.6 0)
(effects (effects
(font (font
@ -4115,7 +4115,7 @@
(hide yes) (hide yes)
) )
) )
(property "LCSC" "" (property "LCSC" "C25819"
(at 82.55 54.61 0) (at 82.55 54.61 0)
(effects (effects
(font (font

View File

@ -4540,7 +4540,7 @@
(at 199.39 109.22 90) (at 199.39 109.22 90)
(unit 1) (unit 1)
(exclude_from_sim no) (exclude_from_sim no)
(in_bom yes) (in_bom no)
(on_board yes) (on_board yes)
(dnp no) (dnp no)
(uuid "0f83fadf-1e51-432c-a89b-ce291955ebd0") (uuid "0f83fadf-1e51-432c-a89b-ce291955ebd0")
@ -4807,7 +4807,7 @@
(justify left) (justify left)
) )
) )
(property "Value" "4k7" (property "Value" "5k1"
(at 91.44 96.5199 0) (at 91.44 96.5199 0)
(effects (effects
(font (font
@ -4843,7 +4843,7 @@
(hide yes) (hide yes)
) )
) )
(property "LCSC" "C25900" (property "LCSC" "C25905"
(at 93.98 95.25 0) (at 93.98 95.25 0)
(effects (effects
(font (font
@ -4872,7 +4872,7 @@
(at 194.31 26.67 0) (at 194.31 26.67 0)
(unit 1) (unit 1)
(exclude_from_sim no) (exclude_from_sim no)
(in_bom yes) (in_bom no)
(on_board yes) (on_board yes)
(dnp no) (dnp no)
(uuid "151afb0f-6dfe-4eaf-b194-7185e00b56e0") (uuid "151afb0f-6dfe-4eaf-b194-7185e00b56e0")
@ -5022,7 +5022,7 @@
(mirror y) (mirror y)
(unit 1) (unit 1)
(exclude_from_sim no) (exclude_from_sim no)
(in_bom yes) (in_bom no)
(on_board yes) (on_board yes)
(dnp no) (dnp no)
(uuid "1ad26535-4c52-4c91-a735-6617cbeb855e") (uuid "1ad26535-4c52-4c91-a735-6617cbeb855e")
@ -5166,7 +5166,7 @@
(mirror x) (mirror x)
(unit 1) (unit 1)
(exclude_from_sim no) (exclude_from_sim no)
(in_bom yes) (in_bom no)
(on_board yes) (on_board yes)
(dnp no) (dnp no)
(uuid "1b7ea449-5e4e-44a5-bc59-da7c6c6e6adc") (uuid "1b7ea449-5e4e-44a5-bc59-da7c6c6e6adc")
@ -5374,7 +5374,7 @@
(mirror y) (mirror y)
(unit 1) (unit 1)
(exclude_from_sim no) (exclude_from_sim no)
(in_bom yes) (in_bom no)
(on_board yes) (on_board yes)
(dnp no) (dnp no)
(uuid "2620afc3-0c77-4853-8a77-28935611e02d") (uuid "2620afc3-0c77-4853-8a77-28935611e02d")
@ -5453,7 +5453,7 @@
(justify left) (justify left)
) )
) )
(property "Value" "4k7" (property "Value" "5k1"
(at 161.29 88.8999 0) (at 161.29 88.8999 0)
(effects (effects
(font (font
@ -5489,7 +5489,7 @@
(hide yes) (hide yes)
) )
) )
(property "LCSC" "C25900" (property "LCSC" "C25905"
(at 163.83 87.63 0) (at 163.83 87.63 0)
(effects (effects
(font (font
@ -5963,7 +5963,7 @@
(mirror y) (mirror y)
(unit 1) (unit 1)
(exclude_from_sim no) (exclude_from_sim no)
(in_bom yes) (in_bom no)
(on_board yes) (on_board yes)
(dnp no) (dnp no)
(uuid "3cd7d842-911c-4ebf-828e-8f8336e0d79e") (uuid "3cd7d842-911c-4ebf-828e-8f8336e0d79e")
@ -6029,7 +6029,7 @@
(mirror y) (mirror y)
(unit 1) (unit 1)
(exclude_from_sim no) (exclude_from_sim no)
(in_bom yes) (in_bom no)
(on_board yes) (on_board yes)
(dnp no) (dnp no)
(uuid "3e4542d1-2402-4a8e-ae13-06c9f2a7381f") (uuid "3e4542d1-2402-4a8e-ae13-06c9f2a7381f")
@ -6617,7 +6617,7 @@
(at 102.87 107.95 90) (at 102.87 107.95 90)
(unit 1) (unit 1)
(exclude_from_sim no) (exclude_from_sim no)
(in_bom yes) (in_bom no)
(on_board yes) (on_board yes)
(dnp no) (dnp no)
(uuid "4309b47b-37c9-48cc-9038-fb71ef7c9750") (uuid "4309b47b-37c9-48cc-9038-fb71ef7c9750")
@ -6925,7 +6925,7 @@
(mirror y) (mirror y)
(unit 1) (unit 1)
(exclude_from_sim no) (exclude_from_sim no)
(in_bom yes) (in_bom no)
(on_board yes) (on_board yes)
(dnp no) (dnp no)
(uuid "4ce6fc1e-dcdd-401e-8980-6b45ba729b80") (uuid "4ce6fc1e-dcdd-401e-8980-6b45ba729b80")
@ -7436,7 +7436,7 @@
(mirror x) (mirror x)
(unit 1) (unit 1)
(exclude_from_sim no) (exclude_from_sim no)
(in_bom yes) (in_bom no)
(on_board yes) (on_board yes)
(dnp no) (dnp no)
(uuid "61ee6ce8-de51-4d18-ad41-4ceb81f80cd6") (uuid "61ee6ce8-de51-4d18-ad41-4ceb81f80cd6")
@ -7515,7 +7515,7 @@
(justify left) (justify left)
) )
) )
(property "Value" "4k7" (property "Value" "5k1"
(at 161.29 132.0799 0) (at 161.29 132.0799 0)
(effects (effects
(font (font
@ -7551,7 +7551,7 @@
(hide yes) (hide yes)
) )
) )
(property "LCSC" "C25900" (property "LCSC" "C25905"
(at 163.83 130.81 0) (at 163.83 130.81 0)
(effects (effects
(font (font
@ -7660,7 +7660,7 @@
(mirror x) (mirror x)
(unit 1) (unit 1)
(exclude_from_sim no) (exclude_from_sim no)
(in_bom yes) (in_bom no)
(on_board yes) (on_board yes)
(dnp no) (dnp no)
(uuid "65b9f56a-6cb1-4895-b6fe-5da284540dad") (uuid "65b9f56a-6cb1-4895-b6fe-5da284540dad")
@ -7791,7 +7791,7 @@
(at 102.87 182.88 90) (at 102.87 182.88 90)
(unit 1) (unit 1)
(exclude_from_sim no) (exclude_from_sim no)
(in_bom yes) (in_bom no)
(on_board yes) (on_board yes)
(dnp no) (dnp no)
(uuid "68ec9784-9f89-4f2f-977f-ad694de9f355") (uuid "68ec9784-9f89-4f2f-977f-ad694de9f355")
@ -7995,7 +7995,7 @@
(mirror x) (mirror x)
(unit 1) (unit 1)
(exclude_from_sim no) (exclude_from_sim no)
(in_bom yes) (in_bom no)
(on_board yes) (on_board yes)
(dnp no) (dnp no)
(uuid "72279322-259c-4d78-99e5-35a8475cab70") (uuid "72279322-259c-4d78-99e5-35a8475cab70")
@ -8061,7 +8061,7 @@
(mirror y) (mirror y)
(unit 1) (unit 1)
(exclude_from_sim no) (exclude_from_sim no)
(in_bom yes) (in_bom no)
(on_board yes) (on_board yes)
(dnp no) (dnp no)
(uuid "740c4531-a711-4de7-957e-10229cc7283b") (uuid "740c4531-a711-4de7-957e-10229cc7283b")
@ -8259,7 +8259,7 @@
(mirror y) (mirror y)
(unit 1) (unit 1)
(exclude_from_sim no) (exclude_from_sim no)
(in_bom yes) (in_bom no)
(on_board yes) (on_board yes)
(dnp no) (dnp no)
(uuid "798258a5-3873-4feb-82a7-dbfa9088b285") (uuid "798258a5-3873-4feb-82a7-dbfa9088b285")
@ -8403,7 +8403,7 @@
(mirror x) (mirror x)
(unit 1) (unit 1)
(exclude_from_sim no) (exclude_from_sim no)
(in_bom yes) (in_bom no)
(on_board yes) (on_board yes)
(dnp no) (dnp no)
(uuid "7f9bb2fa-9c55-4fb7-a430-4543cac3181f") (uuid "7f9bb2fa-9c55-4fb7-a430-4543cac3181f")
@ -8468,7 +8468,7 @@
(at 199.39 152.4 90) (at 199.39 152.4 90)
(unit 1) (unit 1)
(exclude_from_sim no) (exclude_from_sim no)
(in_bom yes) (in_bom no)
(on_board yes) (on_board yes)
(dnp no) (dnp no)
(uuid "80362fd0-55e4-4895-b629-df6bc6564595") (uuid "80362fd0-55e4-4895-b629-df6bc6564595")
@ -8777,7 +8777,7 @@
(justify left) (justify left)
) )
) )
(property "Value" "4k7" (property "Value" "5k1"
(at 180.34 109.2199 0) (at 180.34 109.2199 0)
(effects (effects
(font (font
@ -8813,7 +8813,7 @@
(hide yes) (hide yes)
) )
) )
(property "LCSC" "C25900" (property "LCSC" "C25905"
(at 182.88 107.95 0) (at 182.88 107.95 0)
(effects (effects
(font (font
@ -8843,7 +8843,7 @@
(mirror x) (mirror x)
(unit 1) (unit 1)
(exclude_from_sim no) (exclude_from_sim no)
(in_bom yes) (in_bom no)
(on_board yes) (on_board yes)
(dnp no) (dnp no)
(uuid "92167c05-714c-40c4-8dcf-4b7c7b4fedcd") (uuid "92167c05-714c-40c4-8dcf-4b7c7b4fedcd")
@ -8922,7 +8922,7 @@
(justify left) (justify left)
) )
) )
(property "Value" "4k7" (property "Value" "5k1"
(at 180.34 152.3999 0) (at 180.34 152.3999 0)
(effects (effects
(font (font
@ -8958,7 +8958,7 @@
(hide yes) (hide yes)
) )
) )
(property "LCSC" "C25900" (property "LCSC" "C25905"
(at 182.88 151.13 0) (at 182.88 151.13 0)
(effects (effects
(font (font
@ -9055,7 +9055,7 @@
(mirror y) (mirror y)
(unit 1) (unit 1)
(exclude_from_sim no) (exclude_from_sim no)
(in_bom yes) (in_bom no)
(on_board yes) (on_board yes)
(dnp no) (dnp no)
(uuid "98315fca-dfd5-4db8-b52e-38c99d6cb06f") (uuid "98315fca-dfd5-4db8-b52e-38c99d6cb06f")
@ -9134,7 +9134,7 @@
(justify left) (justify left)
) )
) )
(property "Value" "4k7" (property "Value" "5k1"
(at 91.44 171.4499 0) (at 91.44 171.4499 0)
(effects (effects
(font (font
@ -9170,7 +9170,7 @@
(hide yes) (hide yes)
) )
) )
(property "LCSC" "C25900" (property "LCSC" "C25905"
(at 93.98 170.18 0) (at 93.98 170.18 0)
(effects (effects
(font (font
@ -9199,7 +9199,7 @@
(at 199.39 143.51 0) (at 199.39 143.51 0)
(unit 1) (unit 1)
(exclude_from_sim no) (exclude_from_sim no)
(in_bom yes) (in_bom no)
(on_board yes) (on_board yes)
(dnp no) (dnp no)
(uuid "9bcc504d-56e7-4f80-8fa0-b31d6126a24a") (uuid "9bcc504d-56e7-4f80-8fa0-b31d6126a24a")
@ -9350,7 +9350,7 @@
(mirror x) (mirror x)
(unit 1) (unit 1)
(exclude_from_sim no) (exclude_from_sim no)
(in_bom yes) (in_bom no)
(on_board yes) (on_board yes)
(dnp no) (dnp no)
(uuid "a0360854-89e8-470a-a0ff-828765fcfd5e") (uuid "a0360854-89e8-470a-a0ff-828765fcfd5e")
@ -9664,7 +9664,7 @@
(justify left) (justify left)
) )
) )
(property "Value" "4k7" (property "Value" "5k1"
(at 91.44 134.6199 0) (at 91.44 134.6199 0)
(effects (effects
(font (font
@ -9700,7 +9700,7 @@
(hide yes) (hide yes)
) )
) )
(property "LCSC" "C25900" (property "LCSC" "C25905"
(at 93.98 133.35 0) (at 93.98 133.35 0)
(effects (effects
(font (font
@ -9863,7 +9863,7 @@
(mirror y) (mirror y)
(unit 1) (unit 1)
(exclude_from_sim no) (exclude_from_sim no)
(in_bom yes) (in_bom no)
(on_board yes) (on_board yes)
(dnp no) (dnp no)
(uuid "c2336358-357b-4d18-ba02-f5188911a579") (uuid "c2336358-357b-4d18-ba02-f5188911a579")
@ -10348,7 +10348,7 @@
(at 58.42 49.53 0) (at 58.42 49.53 0)
(unit 1) (unit 1)
(exclude_from_sim no) (exclude_from_sim no)
(in_bom yes) (in_bom no)
(on_board yes) (on_board yes)
(dnp no) (dnp no)
(uuid "cb9469c7-49ac-4ac3-9c9d-70a8430c8f4b") (uuid "cb9469c7-49ac-4ac3-9c9d-70a8430c8f4b")
@ -10487,7 +10487,7 @@
(mirror x) (mirror x)
(unit 1) (unit 1)
(exclude_from_sim no) (exclude_from_sim no)
(in_bom yes) (in_bom no)
(on_board yes) (on_board yes)
(dnp no) (dnp no)
(uuid "d1fe5164-6ef9-4d1e-a148-00c82e5f39b0") (uuid "d1fe5164-6ef9-4d1e-a148-00c82e5f39b0")
@ -10912,7 +10912,7 @@
(mirror y) (mirror y)
(unit 1) (unit 1)
(exclude_from_sim no) (exclude_from_sim no)
(in_bom yes) (in_bom no)
(on_board yes) (on_board yes)
(dnp no) (dnp no)
(uuid "dfc2795d-9380-4759-b5a0-b2efcdda606c") (uuid "dfc2795d-9380-4759-b5a0-b2efcdda606c")
@ -11396,7 +11396,7 @@
(at 199.39 100.33 0) (at 199.39 100.33 0)
(unit 1) (unit 1)
(exclude_from_sim no) (exclude_from_sim no)
(in_bom yes) (in_bom no)
(on_board yes) (on_board yes)
(dnp no) (dnp no)
(uuid "f014e65a-fe42-4ab5-9f00-5c9ad2827d0a") (uuid "f014e65a-fe42-4ab5-9f00-5c9ad2827d0a")
@ -11810,7 +11810,7 @@
(mirror x) (mirror x)
(unit 1) (unit 1)
(exclude_from_sim no) (exclude_from_sim no)
(in_bom yes) (in_bom no)
(on_board yes) (on_board yes)
(dnp no) (dnp no)
(uuid "f7fea151-c1a5-4464-837b-c27b85ace62d") (uuid "f7fea151-c1a5-4464-837b-c27b85ace62d")
@ -11875,7 +11875,7 @@
(at 102.87 146.05 90) (at 102.87 146.05 90)
(unit 1) (unit 1)
(exclude_from_sim no) (exclude_from_sim no)
(in_bom yes) (in_bom no)
(on_board yes) (on_board yes)
(dnp no) (dnp no)
(uuid "f87cb37e-4555-48f2-ae56-bc76d5fa3a11") (uuid "f87cb37e-4555-48f2-ae56-bc76d5fa3a11")
@ -12025,7 +12025,7 @@
(mirror x) (mirror x)
(unit 1) (unit 1)
(exclude_from_sim no) (exclude_from_sim no)
(in_bom yes) (in_bom no)
(on_board yes) (on_board yes)
(dnp no) (dnp no)
(uuid "fade1ce4-f6a0-4812-854f-bea36424ff1f") (uuid "fade1ce4-f6a0-4812-854f-bea36424ff1f")

File diff suppressed because it is too large Load Diff

View File

@ -956,25 +956,23 @@
(exclude_from_sim no) (exclude_from_sim no)
(in_bom yes) (in_bom yes)
(on_board yes) (on_board yes)
(property "Reference" "U" (property "Reference" "U401"
(at 21.844 51.054 0) (at 24.638 -37.846 0)
(effects (effects
(font (font
(size 1.27 1.27) (size 1.27 1.27)
) )
(justify left bottom)
) )
) )
(property "Value" "RP2040" (property "Value" "RP2040"
(at 21.844 48.514 0) (at 24.638 -40.386 0)
(effects (effects
(font (font
(size 1.27 1.27) (size 1.27 1.27)
) )
(justify left bottom)
) )
) )
(property "Footprint" "RadPie2040:RP2040-QFN-56" (property "Footprint" "led-matrix:RP2040-QFN-56"
(at -20.32 62.23 0) (at -20.32 62.23 0)
(effects (effects
(font (font
@ -1003,6 +1001,15 @@
(hide yes) (hide yes)
) )
) )
(property "LCSC" "C2040"
(at 0 0 0)
(effects
(font
(size 1.27 1.27)
)
(hide yes)
)
)
(property "ki_keywords" "raspberry pi 2040" (property "ki_keywords" "raspberry pi 2040"
(at 0 0 0) (at 0 0 0)
(effects (effects
@ -2034,7 +2041,7 @@
) )
) )
) )
(pin input line (pin bidirectional line
(at 31.75 25.4 180) (at 31.75 25.4 180)
(length 2.54) (length 2.54)
(name "GPIO7" (name "GPIO7"
@ -2581,6 +2588,16 @@
) )
(uuid "134875fd-cbbf-4a93-bddf-ff91636ccab7") (uuid "134875fd-cbbf-4a93-bddf-ff91636ccab7")
) )
(wire
(pts
(xy 119.38 68.58) (xy 124.46 68.58)
)
(stroke
(width 0)
(type default)
)
(uuid "144f2eba-d364-4da6-9a51-ead7c6ab389e")
)
(wire (wire
(pts (pts
(xy 86.36 40.64) (xy 87.63 40.64) (xy 86.36 40.64) (xy 87.63 40.64)
@ -3421,16 +3438,6 @@
) )
(uuid "9c790027-6407-4beb-8582-66399703cae5") (uuid "9c790027-6407-4beb-8582-66399703cae5")
) )
(wire
(pts
(xy 119.38 68.58) (xy 124.46 68.58)
)
(stroke
(width 0)
(type default)
)
(uuid "9d3342ef-dc9d-48c4-93ec-04efae6c26da")
)
(wire (wire
(pts (pts
(xy 119.38 86.36) (xy 124.46 86.36) (xy 119.38 86.36) (xy 124.46 86.36)
@ -4867,7 +4874,7 @@
(justify left) (justify left)
) )
) )
(property "Value" "100nF" (property "Value" "100n"
(at 68.58 27.9399 0) (at 68.58 27.9399 0)
(effects (effects
(font (font
@ -5214,7 +5221,7 @@
(justify left) (justify left)
) )
) )
(property "Value" "100nF" (property "Value" "100n"
(at 41.91 27.9399 0) (at 41.91 27.9399 0)
(effects (effects
(font (font
@ -5361,7 +5368,7 @@
(justify right) (justify right)
) )
) )
(property "Value" "100nF" (property "Value" "100n"
(at 67.31 162.5535 0) (at 67.31 162.5535 0)
(effects (effects
(font (font
@ -5640,7 +5647,7 @@
(justify left) (justify left)
) )
) )
(property "Value" "22uF" (property "Value" "22u"
(at 161.29 30.4799 0) (at 161.29 30.4799 0)
(effects (effects
(font (font
@ -5649,7 +5656,7 @@
(justify left) (justify left)
) )
) )
(property "Footprint" "Capacitor_SMD:C_1206_3216Metric" (property "Footprint" "Capacitor_SMD:C_0805_2012Metric"
(at 158.4452 33.02 0) (at 158.4452 33.02 0)
(effects (effects
(font (font
@ -5676,7 +5683,7 @@
(hide yes) (hide yes)
) )
) )
(property "LCSC" "C12891" (property "LCSC" "C45783"
(at 157.48 29.21 0) (at 157.48 29.21 0)
(effects (effects
(font (font
@ -5796,7 +5803,7 @@
) )
) )
) )
(property "Value" "33pF" (property "Value" "33p"
(at 33.02 81.28 90) (at 33.02 81.28 90)
(effects (effects
(font (font
@ -5873,7 +5880,7 @@
(justify left) (justify left)
) )
) )
(property "Value" "1uF" (property "Value" "1u"
(at 68.326 37.084 0) (at 68.326 37.084 0)
(effects (effects
(font (font
@ -5951,7 +5958,7 @@
(justify left) (justify left)
) )
) )
(property "Value" "100nF" (property "Value" "100n"
(at 50.8 27.9399 0) (at 50.8 27.9399 0)
(effects (effects
(font (font
@ -6029,7 +6036,7 @@
(justify left) (justify left)
) )
) )
(property "Value" "100nF" (property "Value" "100n"
(at 59.69 27.9399 0) (at 59.69 27.9399 0)
(effects (effects
(font (font
@ -6094,7 +6101,7 @@
(at 87.63 93.98 0) (at 87.63 93.98 0)
(unit 1) (unit 1)
(exclude_from_sim no) (exclude_from_sim no)
(in_bom yes) (in_bom no)
(on_board yes) (on_board yes)
(dnp no) (dnp no)
(uuid "5be3e4d7-906b-4b09-ac25-5acb7552cad5") (uuid "5be3e4d7-906b-4b09-ac25-5acb7552cad5")
@ -6626,7 +6633,7 @@
(justify left) (justify left)
) )
) )
(property "Value" "1uF" (property "Value" "1u"
(at 40.132 60.452 0) (at 40.132 60.452 0)
(effects (effects
(font (font
@ -6999,7 +7006,7 @@
) )
) )
) )
(property "Value" "33pF" (property "Value" "33p"
(at 33.02 87.63 90) (at 33.02 87.63 90)
(effects (effects
(font (font
@ -7077,7 +7084,7 @@
(justify left) (justify left)
) )
) )
(property "Value" "1uF" (property "Value" "1u"
(at 124.46 35.5601 0) (at 124.46 35.5601 0)
(effects (effects
(font (font
@ -7156,7 +7163,7 @@
(justify left) (justify left)
) )
) )
(property "Value" "100nF" (property "Value" "100n"
(at 133.35 30.4799 0) (at 133.35 30.4799 0)
(effects (effects
(font (font
@ -7386,7 +7393,7 @@
(justify left) (justify left)
) )
) )
(property "Value" "100nF" (property "Value" "100n"
(at 33.02 27.9399 0) (at 33.02 27.9399 0)
(effects (effects
(font (font
@ -7755,7 +7762,7 @@
(justify left) (justify left)
) )
) )
(property "Value" "100nF" (property "Value" "100n"
(at 24.13 27.9399 0) (at 24.13 27.9399 0)
(effects (effects
(font (font
@ -7833,7 +7840,7 @@
(justify left) (justify left)
) )
) )
(property "Value" "100nF" (property "Value" "100n"
(at 77.47 27.9399 0) (at 77.47 27.9399 0)
(effects (effects
(font (font
@ -7911,7 +7918,7 @@
(justify left) (justify left)
) )
) )
(property "Value" "100nF" (property "Value" "100n"
(at 102.87 27.9399 0) (at 102.87 27.9399 0)
(effects (effects
(font (font
@ -8058,7 +8065,7 @@
(justify left) (justify left)
) )
) )
(property "Value" "100nF" (property "Value" "100n"
(at 124.46 30.4799 0) (at 124.46 30.4799 0)
(effects (effects
(font (font

View File

@ -2141,7 +2141,7 @@
(at 27.94 45.72 0) (at 27.94 45.72 0)
(unit 1) (unit 1)
(exclude_from_sim no) (exclude_from_sim no)
(in_bom yes) (in_bom no)
(on_board yes) (on_board yes)
(dnp no) (dnp no)
(uuid "63e09765-1daf-4b3d-9b73-b05d09450a1f") (uuid "63e09765-1daf-4b3d-9b73-b05d09450a1f")

BIN
text.pxm

Binary file not shown.