Samvinna
LIST
FEGURÐ OG VELLÍÐAN
HANDVERK
MENNING OG SAGA
SKEMMTUN
UMHVERFI
MATUR OG DRYKKUR
ÖFUGVERKFRÆÐI
VÍSINDI
ÍÞRÓTTIR
TÆKNI
KLÆÐANLEG TÆKNI
Gangsetning: Fyrsta klukkustundin með þinn eigin flögu, prófuð af ESP32
English
Youblob (drawn from the sketch's pin map) · CC0
Ed

Búin til af

Ed

29. september 2026FI
44
0
0
0
0

Gangsetning: Fyrsta klukkustundin með þinn eigin flögu, prófuð af ESP32

Gangsetning er það sem verkfræðingar kalla fyrstu rafmögnun nýrrar kísilflögu, og röðin skiptir meira máli en eitthvert einstakt próf. Skoðaðu áður en þú kveikir, kveiktu áður en þú stillir klukkuna, og takmarkaðu straumin áður en þú gerir nokkuð annað, því skammhlaup sem straumtakmörkun hefði stöðvað á sekúndu getur eyðilagt einu flögurnar sem þú átt. Þessi þrep er gangsetningaráætlunin fyrir PWM deyfinn úr fyrri þrepum, á brotbrettinu úr þrepi 2. ESP32 sinnir verki rannsóknarstofu: hann býr til klukku flögunnar, heldur endurstillingunni, stillir vinnuhlutfallið á átta púðum og mælir PWM sem kemur til baka, og prentar síðan PASS eða FAIL fyrir hvert vinnuhlutfall. Minnisbók breytir bilun í nafn þess púða sem vírinn er rangur á. Heiðarlega sagt: það er ennþá engin flaga. Skissan var þýdd fyrir þessa teikningu og væntanlegu tölurnar koma úr hermunum fyrri þrepa; fyrsta raunverulega keyrslan er þín.
Lengra kominn
Síðdegi, þegar flagan berst

Leiðbeiningar

1

Tölurnar sem þú átt von á, og hvernig á að lesa bilun

Hleð Jupyter-vinnubók…
2

Flagan sem þú ert að ræsa

Innbyggða teikningin setur niðurdrátt á alla inntaki, þannig að flaga sem er ekki tengd er óvirk. Það er kjarninn sem þessi áætlun prófar.
3

Fyrir allt rafmagn

Án þess að nokkuð sé tengt, skoðaðu chip-on-board flöguna sem situr á breakout-inu undir lúpunni: situr flatt og ferkantað, engin lóðbrú, ekkert laust. Mældu síðan viðnámið milli VDD IO púða og GND IO púða á breakout-inu með margmælinum, í báðum pólunum, og skrifaðu bæði gildin niður. Gildi nálægt núlli þýðir skammhlaup: hættu þá strax. Púðatöflan fyrir keyrslu 1 tilgreinir hvaða breakout-púðar eru VDD IO og GND IO; notaðu töfluna fyrir þína keyrslu, því wafer.space segir að pinnaskipan breytist milli keyrslna. Athugaðu á sama hátt að enginn gagnapúði sé skammhlaupaður við nágranna sinn eða við jörð.

Efni fyrir þetta skref:

Sérsmíðuð ASIC-flagaSérsmíðuð ASIC-flaga1 stykki
PrentplataPrentplata1 stykki

Nauðsynleg verkfæri:

FjölsviðsmælirFjölsviðsmælir
4

Afl, með lága straumtakmörkun

Stilltu bekkaflgjafann á spennu flíssins þíns áður en þú tengir hann. Sú spenna fer eftir söfnunum sem flíssinn var smíðaður með: sjálfgefnu söfnin í sniðmátinu eru 5 V söfn, og hann getur einnig verið smíðaður með 3,3 V söfnum. Taktu nákvæmt gildi úr skjölum keyrslunnar; púðatafla keyrslu-1 nefnir aflpúðana en ekki spennu þeirra. Stilltu straumtakmörkunina á lægstu stillingu sem leyfir aflgjafanum að stýra spennunni, tengdu VDD IO og GND IO, og kveiktu á meðan ESP32 er enn aftengt. Án klukku og með öllum inngöngum dregnum niður ætti flíssinn að standa kyrr. Skrifaðu niður straumstyrkinn. Ef aflgjafinn fer beint í straumtakmörkun, slökktu strax: eitthvað er skammhlaupað. Skráðu straumstyrkinn tvisvar til viðbótar síðar, í endurstillingu með klukkuna í gangi og meðan hann keyrir mynstur. Þessar þrjár tölur eru eigin einkenni flíssins þíns; borð sem síðar dregur mikið meira en það gerði í dag hefur bilun.

Nauðsynleg verkfæri:

Aflgjafi fyrir vinnubekkAflgjafi fyrir vinnubekk
FjölsviðsmælirFjölsviðsmælir
5

Tengdu ESP32

Tólf vírar, eins og á myndinni og í haus skissunnar: GPIO 27 á klukkupúðann, 26 á rst_n, 32 á inntak 0 (enable), 13, 14, 18, 19, 21, 22, 23 og 25 á tvístefnupúða 0 til 7, og tvístefnupúði 8 aftur á GPIO 34, auk sameiginlegrar jarðar. GPIO 34 er eingöngu inntakspinni á ESP32, þannig að hann getur aldrei togast á við úttak flíssins. The ESP32 er 3,3 V hluti og inntök hans þola ekki 5 V. Ef I/O flíssins þíns er ekki 3,3 V, settu stigbreyta á allar tólf línurnar: þrjú fjögurra rása borð. Algengasta gerðin er með pull-up viðnámum á báðum hliðum, sem geta yfirtekið veikburða pull-down viðnám flíssins þar til ESP32 stjórnar pinnum hans; skissan heldur endurstillingu og enable lágum um leið og hún ræsist, áður en klukkan keyrir.

Efni fyrir þetta skref:

RökstigsbreytirRökstigsbreytir3 stykki
TengivírarTengivírar1 stykki

Nauðsynleg verkfæri:

TengibrettiTengibretti
6

The test sketch

bringup.ino. It starts the chip's clock with the ESP32's LED PWM peripheral at 100 kHz, with 1-bit resolution for a plain square wave; holds reset low for 1,000 chip clocks; checks that the output stays low while enable is off; then sets seven duty values and measures the high time with pulseIn, averaged over eight periods, against 10 microseconds per step, within 3 microseconds. It compiles for the ESP32 with the Arduino ESP32 core 3.3.12; it has not been run, because the chip does not exist yet.
bringup.inocpp
// SPDX-License-Identifier: Apache-2.0
// First-light test for the PWM dimmer chip (Youblob silicon rungs 3 and 6), run from an ESP32.
// The ESP32 is the whole lab: it makes the chip's clock, holds its reset, sets the duty on eight
// pads, and times the PWM that comes back, then prints PASS or FAIL for each duty value.
//
// Wiring, through a logic level converter if your chip's I/O is not 3.3 V (see the blueprint):
//   CLK      GPIO 27  -> clk pad         RST_N  GPIO 26 -> rst_n pad   (both clear of the boot strapping pins)
//   EN       GPIO 32  -> input[0]        D0..D7 GPIO 13,14,18,19,21,22,23,25 -> bidir[0..7]
//   PWM_IN   GPIO 34  <- bidir[8]        (GPIO 34 is input-only on the ESP32: it cannot fight the chip)
//   and a common ground.

const int PIN_CLK = 27, PIN_RST = 26, PIN_EN = 32, PIN_PWM = 34;
const int DATA_PINS[8] = {13, 14, 18, 19, 21, 22, 23, 25};

// 100 kHz: slow enough for a level converter's pull-up edges, and one chip clock is 10 us,
// so pulseIn's 1 us resolution sees a tenth of a clock.
const uint32_t CHIP_CLK_HZ = 100000;
const float US_PER_CLK = 1e6f / CHIP_CLK_HZ;
const float PERIOD_US = 256 * US_PER_CLK;          // one PWM period: 256 chip clocks = 2560 us
const float TOL_US = 3.0f;                         // allowed error, about a third of a clock

void setDuty(uint8_t d) {
  for (int b = 0; b < 8; b++) digitalWrite(DATA_PINS[b], (d >> b) & 1);
}

// Average high time over n periods; returns -1 if the pin never went high (pulseIn timed out).
float meanHighUs(int n) {
  float sum = 0;
  for (int i = 0; i < n; i++) {
    unsigned long t = pulseIn(PIN_PWM, HIGH, 3 * (unsigned long)PERIOD_US);
    if (t == 0) return -1;
    sum += t;
  }
  return sum / n;
}

bool alwaysLow(unsigned long ms) {
  unsigned long t0 = millis();
  while (millis() - t0 < ms)
    if (digitalRead(PIN_PWM)) return false;
  return true;
}

void setup() {
  Serial.begin(115200);
  delay(500);
  for (int b = 0; b < 8; b++) pinMode(DATA_PINS[b], OUTPUT);
  pinMode(PIN_RST, OUTPUT);
  pinMode(PIN_EN, OUTPUT);
  pinMode(PIN_PWM, INPUT);

  // Reset low BEFORE the clock starts, then give the chip some clocks in reset.
  digitalWrite(PIN_RST, LOW);
  digitalWrite(PIN_EN, LOW);
  setDuty(0);
  if (!ledcAttach(PIN_CLK, CHIP_CLK_HZ, 1)) {      // 1-bit resolution: a plain square wave
    Serial.println("FAIL: could not start the clock on GPIO 27");
    return;
  }
  ledcWrite(PIN_CLK, 1);                           // 1 of 2 steps high = 50 % duty
  delay(10);                                       // 1,000 chip clocks in reset
  digitalWrite(PIN_RST, HIGH);

  Serial.printf("# chip clock %lu Hz, PWM period %.0f us\n", (unsigned long)CHIP_CLK_HZ, PERIOD_US);
  Serial.println("duty,expected_us,measured_us,result");
  int fails = 0;

  // Disabled: the output must stay low whatever the duty.
  setDuty(200);
  bool low = alwaysLow(20);
  Serial.printf("disabled,0,%s,%s\n", low ? "0" : "high seen", low ? "PASS" : "FAIL");
  fails += !low;

  digitalWrite(PIN_EN, HIGH);
  const uint8_t duties[] = {0, 1, 16, 64, 128, 200, 254};
  for (uint8_t d : duties) {
    setDuty(d);
    delay(10);                                     // let a few periods pass with the new value
    float expected = d * US_PER_CLK;
    float got;
    bool ok;
    if (d == 0) {
      ok = alwaysLow(20);
      got = ok ? 0 : meanHighUs(8);                // a pad stuck high shows up here as a duty above 0
    } else {
      got = meanHighUs(8);
      ok = got >= 0 && fabsf(got - expected) <= TOL_US;
    }
    Serial.printf("%u,%.1f,%.1f,%s\n", d, expected, got, ok ? "PASS" : "FAIL");
    fails += !ok;
  }
  Serial.printf("# %d failure(s)\n", fails);
}

void loop() {}

Nauðsynleg verkfæri:

ESP32-þróunarbrettiESP32-þróunarbretti
BorðtölvaBorðtölva
7

Hvað prentar góð flís

Opnaðu raðskjáinn á 115200 baud. Flís sem virkar prentar í hverri línu skyldusveifluna (duty), væntanlegan og mældan háan tíma í míkrósekúndum og niðurstöðuna: # klukka flíss 100000 Hz, PWM tímabil 2560 us duty,expected_us,measured_us,result disabled,0,0,PASS 0,0.0,0.0,PASS 1,10.0,10.0,PASS ... 254,2540.0,2540.0,PASS # 0 bilun(ir) Skoðaðu síðan pad 8 með sveiflusjánni líka: eitt tímabil ætti að vera 2.560 míkrósekúndur á þessari klukku, með hreinum flönkum. Skissan mælir tíma; sveiflusjáin sýnir lögun, og hægur eða ómandi flanki í gegnum spennubreyti sést aðeins þar.

Nauðsynleg verkfæri:

Stafrænt sveiflusjáStafrænt sveiflusjá
8

Flaga sem kemur ekki upp

Bilanaleit við ræsingu.

Flow

Loading...
9

Heimildir og heiðarleg takmörk

**Heimildir**, lesið 29. september 2026: wafer-space/chip-on-board-wire-bonded-pcbs, run-1/README.md (púðatöflan sem nefnir VDD IO og GND IO púða, og athugasemdin um að pinnaskipan breytist milli keyrslna); wafer-space/gf180mcu-project-template, README.md og Makefile (sjálfgefið 5 V og 3,3 V bókasafnsvalkostirnir); hermanir fyrri þrepanna fyrir væntanlega háa tíma. **Heiðarleg takmörk.** Enginn flís er enn til: þessi áætlun og skissa hennar hafa ekki verið keyrðar á kísli. Spennan og straumurinn eru ekki tilgreind hér því keyrsluskjölin sem voru tiltæk við ritun þessa ekki tilgreina þau. Áhrif spennibreytisins á niðurdráttarviðnámin ráðast af því borði sem þú notar.

Efni

4

Nauðsynleg verkfæri

6

CC0 opinbert ríki

Þessi teikning er gefin út undir CC0. Þér er frjálst að afrita, breyta, dreifa og nota þetta verk í hvaða tilgangi sem er, án þess að biðja um leyfi.

Studdu smiðinn með því að kaupa vörur í gegnum teikningu hans þar sem hann fær þóknun smiða sem seljendur ákvarða, eða búðu til nýja endurskoðun á þessari teikningu og tengdu hana sem tengingu í þinni eigin teikningu til að deila tekjum.

Umræða

(0)

Skrá inn til að taka þátt í umræðunni

Hleður athugasemdum...