Excel konwersja wartości elementów elektronicznych z BOM na notację naukową.

Generując BOM ze schematu do arkusza kalkulacyjnego Excel lub pliku CSV w kolumnie „wartość” dostajemy przeważnie wartości elementów według branżowej konwencji, czyli z użyciem symboli przedrostków SI, używaniem przedrostków bądź innych liter zamiast separatora dziesiętnego, oraz dodatkowych liter jako na przykład jednostek. Na domiar złego, w tej samej kolumnie mamy często wymieszane wartości elementów pasywnych (Omy, Henry, Farady) z MPN innych podzespołów. Przykładowo:

100n
1u
BAT64-05
120R
15k
39k2
47R
15uH
220p
2u2

Nie muszę chyba dodawać, że Excel całkowicie nie radzi sobie z sortowaniem wartości w takiej kolumnie.

Oto formuła, która dokona konwersji na notację naukową. W przypadku błędu, wstawi pusty ciąg znaków, dzięki czemu sortowanie nie będzie zakłócone. Zakładam, że dane znajdują się w kolumnie A od komórki A1 – zmiany wymaga tylko jedno miejsce w formule.

Formuła dla Excela w j. Polskim:

=JEŻELI.BŁĄD(LET(
tekst;USUŃ.ZBĘDNE.ODSTĘPY(A1);
poz;MIN(
JEŻELI.BŁĄD(ZNAJDŹ("p";tekst);1E+99);
JEŻELI.BŁĄD(ZNAJDŹ("n";tekst);1E+99);
JEŻELI.BŁĄD(ZNAJDŹ("u";tekst);1E+99);
JEŻELI.BŁĄD(ZNAJDŹ("µ";tekst);1E+99);
JEŻELI.BŁĄD(ZNAJDŹ("m";tekst);1E+99);
JEŻELI.BŁĄD(ZNAJDŹ("R";tekst);1E+99);
JEŻELI.BŁĄD(ZNAJDŹ("Ω";tekst);1E+99);
JEŻELI.BŁĄD(ZNAJDŹ("k";tekst);1E+99);
JEŻELI.BŁĄD(ZNAJDŹ("M";tekst);1E+99);
JEŻELI.BŁĄD(ZNAJDŹ("G";tekst);1E+99)
);
JEŻELI(LUB(tekst="";poz>DŁ(tekst));"";LET(
prefiks;FRAGMENT.TEKSTU(tekst;poz;1);
czescLewa;LEWY(tekst;poz-1);
ogon;FRAGMENT.TEKSTU(tekst;poz+1;DŁ(tekst));
dlOgonu;DŁ(ogon);
ileCyfr;JEŻELI(dlOgonu=0;0;
JEŻELI.BŁĄD(
PODAJ.POZYCJĘ(
FAŁSZ;
JEŻELI.BŁĄD(
CZY.LICZBA(--FRAGMENT.TEKSTU(ogon;SEKWENCJA(dlOgonu);1));
FAŁSZ
);
0
)-1;
dlOgonu
));
koncowka;JEŻELI(ileCyfr<dlOgonu;PRAWY(ogon;dlOgonu-ileCyfr);"");
lewaPoprawna;ORAZ(
czescLewa<>"";
SUMA(--JEŻELI.BŁĄD(
CZY.LICZBA(--FRAGMENT.TEKSTU(czescLewa;SEKWENCJA(DŁ(czescLewa));1));
FAŁSZ
))=DŁ(czescLewa)
);
koncowkaPoprawna;JEŻELI(koncowka="";PRAWDA;
SUMA(--JEŻELI.BŁĄD(
CZY.LICZBA(--FRAGMENT.TEKSTU(koncowka;SEKWENCJA(DŁ(koncowka));1));
FAŁSZ
))=0
);
mantysa;czescLewa&JEŻELI(ileCyfr>0;","&LEWY(ogon;ileCyfr);"");
wykladnik;JEŻELI(prefiks="p";"-12";
JEŻELI(prefiks="n";"-9";
JEŻELI(LUB(prefiks="u";prefiks="µ");"-6";
JEŻELI(prefiks="m";"-3";
JEŻELI(LUB(prefiks="R";prefiks="Ω");"0";
JEŻELI(prefiks="k";"3";
JEŻELI(prefiks="M";"6";
JEŻELI(prefiks="G";"9";""))))))));
JEŻELI(ORAZ(lewaPoprawna;koncowkaPoprawna;wykladnik<>"");
mantysa&"e"&wykladnik;
"")
)));
"")

Formuła dla Excela w j. Angielskim (nie testowana):

```excel
=IFERROR(LET(
text,TRIM(D2),
pos,MIN(
IFERROR(FIND("p",text),1E+99),
IFERROR(FIND("n",text),1E+99),
IFERROR(FIND("u",text),1E+99),
IFERROR(FIND("µ",text),1E+99),
IFERROR(FIND("m",text),1E+99),
IFERROR(FIND("R",text),1E+99),
IFERROR(FIND("Ω",text),1E+99),
IFERROR(FIND("k",text),1E+99),
IFERROR(FIND("M",text),1E+99),
IFERROR(FIND("G",text),1E+99)
),
IF(OR(text="",pos>LEN(text)),"",LET(
prefix,MID(text,pos,1),
leftPart,LEFT(text,pos-1),
tail,MID(text,pos+1,LEN(text)),
tailLen,LEN(tail),
digitCount,IF(tailLen=0,0,
IFERROR(
MATCH(
FALSE,
IFERROR(
ISNUMBER(--MID(tail,SEQUENCE(tailLen),1)),
FALSE
),
0
)-1,
tailLen
)),
ending,IF(digitCount<tailLen,RIGHT(tail,tailLen-digitCount),""),
leftValid,AND(
leftPart<>"",
SUM(--IFERROR(
ISNUMBER(--MID(leftPart,SEQUENCE(LEN(leftPart)),1)),
FALSE
))=LEN(leftPart)
),
endingValid,IF(ending="",TRUE,
SUM(--IFERROR(
ISNUMBER(--MID(ending,SEQUENCE(LEN(ending)),1)),
FALSE
))=0
),
mantissa,leftPart&IF(digitCount>0,"."&LEFT(tail,digitCount),""),
exponent,IF(prefix="p","-12",
IF(prefix="n","-9",
IF(OR(prefix="u",prefix="µ"),"-6",
IF(prefix="m","-3",
IF(OR(prefix="R",prefix="Ω"),"0",
IF(prefix="k","3",
IF(prefix="M","6",
IF(prefix="G","9","")))))))),
IF(AND(leftValid,endingValid,exponent<>""),
mantissa&"e"&exponent,
"")
))),
"")
```

Wynik dla wcześniej pokazanych przykładowych danych:

100e-9
1e-6

120e0
15e3
39.2e3
47e0
15e-6
220e-12
2.2e-6

Mam nadzieję, że będzie przydatna

LG TV webOS Dev Manager – ponowna instalacja

Na TV ustaw prawidłowo datę i godzinę (ważne dla certyfikatów), wyłącz w routerze firewall dla TV, uruchom Developer mode, włącz Key Server, zweryfikuj IP i Passphrase, clear cach data.

webOS Dev Manager: https://github.com/webosbrew/dev-manager-desktop

Jeżeli zawiesza się na instalacji homebrew lub innego pakietu, w zakładce „Terminal” wywołaj:

curl -L https://raw.githubusercontent.com/webosbrew/webos-homebrew-channel/main/tools/install.sh | sh -

Powinno zainstalować homebrew.

STM32 HAL Systick

w stm32g4xx_it.c

w stm32g4xx_it.c:
/**
  * @brief This function handles System tick timer.
  */
void SysTick_Handler(void)
{
  /* USER CODE BEGIN SysTick_IRQn 0 */
  systickEvent();
  /* USER CODE END SysTick_IRQn 0 */
  HAL_IncTick();
  /* USER CODE BEGIN SysTick_IRQn 1 */

  /* USER CODE END SysTick_IRQn 1 */
}

w main.h:

/* USER CODE BEGIN EFP */
void systickEvent(void);

w main.c:

/* USER CODE BEGIN 4 */

void systickEvent(void)
{
  static int period_cnt = 0;
  if(++period_cnt >= 100){
    period_cnt = 0;
	HAL_GPIO_TogglePin(LED1_GPIO_Port, LED1_Pin);
  }
}

 

Porównanie metod kompresji plików

Obiekt testowy: folder z zawartością 910MB,  mieszana zawartość, 814 plików, 42 foldery. Dane nie były dobierane z myślą o faworyzowaniu którejkolwiek metody kompresji – akurat takie szykowałem do archiwizacji.

Sufiksem _slow oznaczone zostały te metody kompresji, które trwały zauważalnie dłużej od pozostałych.

Do kompresji użyłem programu 7-Zip w wersji 24.07 (x64).

Jak widać, domyślna metoda kompresji zip – deflate – sprawdza się najgorzej. Zdecydowanie lepiej wypada kompresja 7zip zarówno w domyślnym, jak i zwiększonym rozmiarze słownika. Zwiększenie rozmiarów słownika zwiększa zużycie zasobów komputera i wydłuża czas kompresji.

 

Test coupon: TDR i linie różnicowe, a ground plane

Inspiracją do wykonania płytki i pomiarów była prezentacja Erica Bogatina:

Zdjęcie PCB:

JLC04161H-7628

Render 3D struktury wewnętrznej PCB:

Pomiary:

#1 Impedancja liczona w odniesieniu do ground plane 100R, w połowie przerwany ground plane.

Widać nieciągłość impedancji – wzrost.

#2 120R Impedancja bez odniesienia do ground plane, w połowie przerwany ground plane.

Nie widać przerwy.

#3 Stała impedancja na całej długości, ale zmiana odległości referencji (w pozycji kursora są rezystory SMD)

#4 Linia single przechodzi na różne warstwy

Dziękuję inż. Michałowi Karasiowi za wspólną realizację doświadczenia.

P5.js – symulacja masy na sprężynie z zewnętrzną siłą

Symulacja potrzebna do przygotowania efektu graficznego na pewne urządzenie.

Kółko reprezentuje masę poruszającą się wzdłuż osi X ze sprężyną zamocowaną w środku układu. Wprowadzono tłumienie prędkości symulujące opory otoczenia. Slider pozwala zaaplikować zewnętrzną siłę (można sobie to wyobrazić jak przechylanie kulki na desce przyczepionej sprężyną).

Kod:

let slider;

function setup() {
  createCanvas(400, 400);
  slider = createSlider(-100, 100, 0);
  slider.position(50, 350);
  slider.size(300);

}

let x=0, vel=0, a=0, f=0;
const mass = 50;
const k = .8;
const damping = 0.1;
function draw() {
  background(220);
  translate(width / 2, height / 2);
  point(0,0);

  f = -1*k*x+slider.value();
  a = f/mass; //external force
  vel += a;
  vel = vel - vel * damping;
  x+=vel;

  fill(0, 0, 0);
  text('x = '+x.toFixed(2), -180, -180);
  text('v = '+vel.toFixed(2), -180, -160);
  text('a = '+a.toFixed(2), -180, -140);
  text('f = '+f.toFixed(2), -180, -120);
  text('external force = '+slider.value(), -140, 140);
  fill(200, 200, 255);
  circle(x,0,10);
}

Demo:

Cewka Tesli #3 – zakupy, bank kondensatorów, interrupter

Zakupy

Kupiłem w sklep.avt.pl:

  • Kondensator foliowy MKP 9.1nF 2000V RM15 100 sztuk po 1,10 zł = 110 zł

    • Kondensator sprawdziłem na przebicie miernikiem rezystancji izolacji przy napięciu 2600 V przez 60 sekund, i nie uległ on przebiciu, ani miernik nie zarejestrował upływności.
    • https://sklep.avt.pl/pl/products/kondensator-foliowy-mkp-9-1nf-2000v-rm15-178625.html?query_id=1
    • wymiary obudowy 10×16.5x18mm
    • Pasuje footprint z Kicada: Capacitor_THT:C_Rect_L16.5mm_W10.7mm_P15.00mm_MKT
  • Zasilacz modułowy 24V 2.5A 60W za 31,30 zł
    • https://sklep.avt.pl/pl/products/zasilacz-modulowy-24v-2-5a-60w-189620.html?query_id=2
    • Zasilanie: AC 110-220V ±15%, 0,45A, 50/60 Hz

Bank kondensatorów

Bank kondensatorów 3S33P. Aby ograniczyć długość pakietu, został on podzielony na 3 jednakowe PCB składane „na kanapkę” poprzez kołki dystansowe M4 25 mm pełniące jednocześnie rolę połączenia elektrycznego, na każdym 3S11P:

PCB jest proste i jednostronne, o wymiarach 130×100 mm, można wykonać samodzielnie. Ja jednak chyba zamówię w JLCPCB (koszt z dostawą ok. 50zł za 5 sztuk, przy czym użyję 3 sztuki).

Interrupter

Jako interrupter, aby nie robić kolejnego projektu PCB, użyję już wykonanego PCB sterownika zabawkowej kasy fiskalnej na STM32, który miał być następcą do tego projektu:

Zabawkowa kasa fiskalna

Schemat:

Tak mam zamiar użyć sygnały:

  • KB1 – ADC12_IN0 -potencjometr #1 (nastawa częstotliwości)
  • KB2 – ADC12_IN1 -potencjometr #2 (nastawa wypełnienia)
  • KB3 – PA4 – przycisk #1 (wybór nastaw)
  • KB4 – PA5 – przycisk #2 (wybór nastaw)
  • KB5 – TIM3_CH1 – wyjście PWM na nadajnik światłowodowy (poprzez szeregowo wpięty przełącznik kill-switch)

Oprócz tego użyty wyświetlacz LCD 16×2, kwarc 8/16 MHz.