Page 1 of 1

How can i FAST send 12 Bit Words parallel with ESP32

Posted: Wed Feb 16, 2022 9:24 am
by Tobi82m
Hello,

first, sorry, my english is not the best ;-)

I have to send a 12Bit Word parallel with a ESP32. How can i do this as fast as possible?

It i send it with digitalWrite...i think its very slow. In Arduino i can use port manipulation...i read its also possible with ESP32? The register GPIO_OUT_W1TS_REG ?

What Pins should i need? How would you send the example Word -> 0b 1101 1100 0011 ? Have anyone a example for me? The Bit Word is change continuously and i need fast and continuous timing.

Thanks!

Re: How can i FAST send 12 Bit Words parallel with ESP32

Posted: Wed Feb 16, 2022 9:34 am
by ESP_Sprite
Look into the parallel mode of the I2S peripheral.

Re: How can i FAST send 12 Bit Words parallel with ESP32

Posted: Wed Feb 16, 2022 10:09 am
by Tobi82m
Thank you. I think its the right for me. But i dont know how to make it. Im looking in the reference manual and examples but i dont know how to send the data.
I have to 12 Bit Ports, so i think i can send a 24bit word at same time. Is there a example?

Re: How can i FAST send 12 Bit Words parallel with ESP32

Posted: Thu Feb 17, 2022 3:49 am
by ESP_Sprite
I think you can use the 16-bit mode, that's closest to the 12 bit you need. There's some other projects out there that use the parallel i2s interface (for instance, this one), maybe you can browse through their code for inspiration.

Re: How can i FAST send 12 Bit Words parallel with ESP32

Posted: Thu Feb 17, 2022 8:51 pm
by AlfredoSC
Esto no te funciona lo suficientemente rápido?
  1. /*
  2.  * Programa para el ESP32 que consiste en formar un puerto con varios
  3.  * GPIOs, (ya que el ESP32 no tiene configuración por puertos paralelos
  4.  * como en los Atmegas y PICs).
  5.  *
  6.  * Alfredo Segura Querétaro, México febrero de 2022
  7.  */
  8.  
  9. int D0 = 13;    // 8 bits para salida paralela,
  10. int D1 = 12;    // en cada PIN del ESP32
  11. int D2 = 14;
  12. int D3 = 27;
  13. int D4 = 26;
  14. int D5 = 25;
  15. int D6 = 33;
  16. int D7 = 32;
  17.  
  18. int variable = 0;
  19. String datochar;
  20.  
  21. int i = 0;
  22. int j = 0;
  23.  
  24. void setup() {
  25.   pinMode(D0, OUTPUT);
  26.   pinMode(D1, OUTPUT);
  27.   pinMode(D2, OUTPUT);
  28.   pinMode(D3, OUTPUT);
  29.   pinMode(D4, OUTPUT);
  30.   pinMode(D5, OUTPUT);
  31.   pinMode(D6, OUTPUT);
  32.   pinMode(D7, OUTPUT);
  33.  
  34.   digitalWrite(D0, LOW);
  35.   digitalWrite(D1, LOW);
  36.   digitalWrite(D2, LOW);
  37.   digitalWrite(D3, LOW);
  38.   digitalWrite(D4, LOW);
  39.   digitalWrite(D5, LOW);
  40.   digitalWrite(D6, LOW);
  41.   digitalWrite(D7, LOW);
  42.  
  43.   Serial.begin(115200);
  44.  
  45.  
  46. }
  47.  
  48. void loop() {
  49.   if (Serial.available()) {
  50.     datochar = Serial.read();
  51.     Serial.println(datochar);
  52.    
  53.     variable = datochar.toInt();
  54.     digitalWrite(D0, bitRead(variable,0));  
  55.     digitalWrite(D1, bitRead(variable,1));
  56.     digitalWrite(D2, bitRead(variable,2));
  57.     digitalWrite(D3, bitRead(variable,3));
  58.     digitalWrite(D4, bitRead(variable,4));
  59.     digitalWrite(D5, bitRead(variable,5));
  60.     digitalWrite(D6, bitRead(variable,6));
  61.     digitalWrite(D7, bitRead(variable,7));  
  62.     }
  63.   delay(100);    
  64. }

Re: How can i FAST send 12 Bit Words parallel with ESP32

Posted: Fri Feb 18, 2022 1:41 am
by ESP_Sprite
That code is super-inefficient on any processor, so I wouldn't think so.

Re: How can i FAST send 12 Bit Words parallel with ESP32

Posted: Fri Feb 18, 2022 7:35 am
by Tobi82m
AlfredoSC...whats this? This is really the slowest version...

I think i try to work with the https://github.com/TobleMiner/esp_i2s_parallel
Any other Ideas?