Hallo Allen,

Het is al even geleden dat ik iets gepost heb. Helaas kan ik het antwoord op het forum helaas niet vinden.

Ik ben een printplaat aan het ontwerpen en wil een ESP32 koppelen aan een VID6606. https://guy.carpenter.id.au/gaugette/resources/vid/2009111391612_VID66…

Een aantal zaken heb ik aan de MCP23018 zitten (IO expander). Maar de VID6606 wil ik direct aan de ESP hangen via pins. Dat betekend dat ik een aantal pinnen moet gebruiken die niet vrij te gebruiken zijn. Deze pinnen worden bijvoorbeeld hoog of laag tijdens booten van de ESP.

De VID6606 heeft daar geen last van, die doet nog niets zolang reset niet actief is geweest.

De vraag is: Heeft de ESP er last van als de VID6606 er aan hangt bij programmeren/booten? Met andere woorden, kan de VID6606 de pinnen laag of juist hoog trekken zonder dat ik dat wil?

Groeten!

Welke pinnen wil je dan gebruiken?

Een aantal zijn in gebruik als interface naar het flash geheugen. Die zou ik zeker met rust laten. Het is misschien wel mogelijk om die af en toe te gebruiken maar dat wordt wel even puzzelen.

Een extra ingang van een andere chip op een 'boot' pin zal gewoonlijk geen probleem zijn.
Merk wel op dat de ESP 3,3 V is, en de VID6606 5 V. Met één oog in de datasheet zal het allicht gaan, maar ruim is het niet.

Mijn gewoonte is om als dat kan nieuwe (deel-) schakelingen provisorisch te testen alvorens een print te maken.
In dit geval; Als het ESP32-deel gelijk is aan een of andere breakout zou die als basis kunnen dienen om het even in breadboard te prikken, zo geeft men de praktijk een kans eventuele verrassingen te tonen.

Meestal is het zo dat voor reset je er niet 100% op kan vertrouwen dat alles zich "netjes" gedraagd. Zo kan een 4-bit 0-9 teller als je hem aanzet in de toestand "12" komen hetgeen pas gecorrigeerd wordt als je hem laat tellen (*) of als je hem reset.

Dus bij deze chip kan het zijn dat er onverwacht wat outputs actief worden. Maar ik neem aan dat je de inputs op je ESP aansluit die kunnen niet ineens outputs worden.

Ik zelf zou trouwens een tweede MCP23018 aansluiten voor de vier meters.

je runt dan 100x per seconde:


void update_meters (void)
{
   static int current_pos[4];
   int out = 0;
   for (int i=0;i<4;i++) {
      int t0, t1;
      if (current_pos[i] < wanted_pos[i]) current_pos[i]++;
      if (current_pos[i] > wanted_pos[i]) current_pos[i]--;
      t1 = current_pos[i] & 0x2;
      t0 = current_pos[i] & 0x1;
      out |= (t1 | ((t1 >> 1) ^ t0)) << (2*i);
   }
   send_to_mcp (out);

}

P.S. Er zijn mensen op het forum die er op tegen waren om de stepper-meters direct op IO pins van een microcontroller(#) te zetten. Ik heb toen een experiment gedaan en zo'n metertje een anderhalf miljoen steps in een dag laten doen. Die ging nog steeds perfect na die > miljoen steps.

(*) Hele oude deden iets als 0->1->2->3->4->5->6->7->8->9->0 (de normale sequence, maar dan 10->11->0 en 12->13->14->15->0 Of 10->2, 11->3, 12->4 enz. Iets modernere doen 10->0 11->0, 12->0 enz.

(#) pins van de MCP vallen daar ook onder.

De pinnen die ik nu plan te gebruiken zijn:

4
5
12t/m19
en voor de reset 32.

Voor wat betreft direct op de MCP23018, dat zou kunnen, maar hoe kom ik er achter hoe vol ik een bus heb. Ik heb nu op de PCB het volgende:
- MCP23018
- MCP23008 (zelfde als de 23018 alleen dan maar 8 bits)
- ADS7828 (analoge expander)
- TCA9548 (multiplexer met 4 oled displays 0.91 erachter)
- OLED 2.23"
- PCA9685 (PWM outputs chip)

Ik vraag me dus af hoe snel de bus dan vol zou raken als ik alles tegelijk aan wil sturen? Is er een manier om dat uit te rekenen?

Bij mij zit de reset niet op pin 32, dus ik vraag me af welke pin nummers je hier noemt.

In elk geval zijn GPIO6 t/m GPIO11 in gebruik als interface naar de flash, dus die kun je best niet gebruiken in je applicatie.

Software update gaat via GPIO0 (BOOT) en Serial port (GPIO1 en GPIO3).

Alle andere pinnen kun je gebruiken zoals je wilt.
Volgens mij heb je dus meer dan genoeg pinnen beschikbaar. :)

Met pen 12 altijd even uitkijken, heb ooit lang moeten zoeken waarom een board het niet altijd deed.

pin 12: boot fail if pulled high

@deKees Pin 32 is bij mij de reset van de stappenmotor drivers. Dus niet de reset van de esp :)

@pe1oxp wat had jij eraan hangen en hoe heb je het uiteindelijk opgelost?

Op 8 oktober 2023 12:39:54 schreef bart II:
@deKees Pin 32 is bij mij de reset van de stappenmotor drivers. Dus niet de reset van de esp :)

@pe1oxp wat had jij eraan hangen en hoe heb je het uiteindelijk opgelost?

Meen dat ik er een software serial poort aan had hangen, opgelost door een andere pen te kiezen

Er zijn ook nog een paar input only pinnen. En er is ook een bugje met IO 36 & 39.

ESP32: When the power switch of SARADC1, SARADC2, HALL sensor and AMP sensor is turned on, the input of GPIO36 and GPIO39 will be pulled down for about 80ns. When enabling power for any of these peripherals, ignore input from GPIO36 and GPIO39. Please refer to section 3.11 of ‘ECO_and_Workarounds_for_Bugs_in_ESP32’ for the description of this issue. As a workaround, call adc_power_acquire() in the app. This will result in higher power consumption (by ~1mA), but will remove the glitches on GPIO36 and GPIO39.

https://docs.espressif.com/projects/esp-idf/en/v4.4/esp32/api-referenc…

Op 10 oktober 2023 11:36:55 schreef pe1oxp:
[...]

Meen dat ik er een software serial poort aan had hangen, opgelost door een andere pen te kiezen

Ik heb nu GPIO12 en GPIO5 ook vrij weten te krijgen. 36&39 gebruik ik helemaal niet gelukkig. De input only pinnen zijn 34 & 35 die ik gebruik (als input). Dus het zou in theorie moeten kunnen. De enige pinnen die nu nog twijfelachtig zijn, zijn (bron https://lastminuteengineers.com/esp32-pinout-reference/ ):

GPIO 2 "must be LOW during boot and also connected to the on-board LED"
GPIO 15 "must be HIGH during boot, prevents startup log if pulled LOW"

Deze gebruik ik beide als output, maar voor zover ik kan vinden zou het geen problemen moeten vormen. Ik ga kijken of ik een jumper op de PCB kwijt kan voor het geval het een probleem mocht vormen.

Thanks Allemaal!