Forum: PC-Programmierung ESP32 Code modifizieren -> parallel I²C


You were forwarded to this site from EmbDev.net. Back to EmbDev.net
von Thorsten S. (whitejack)


Lesenswert?

Hallo zusammen,

ich habe eine Bitte, da ich nicht so firm bin beim Thema ESP32 
Hardwarenahe Programmierung, komme aus der PIC und Atmega Ecke, C und 
Assembler.

Ich möchte gern das Demoprojekt welches hier

https://www.waveshare.com/wiki/RGB-Matrix-P3-64x64

unter "Working With ESP32"

https://files.waveshare.com/upload/6/6d/RGB-Matrix-P4-64x32-Demo.zip

vorgestellt wird, modifiziert nutzen.

Soweit ich gesehen habe ist es ausgelegt für eine Matrix 64x64 Pixel, 
wobei die Displaymodelle in einem gewissen Rahmen wählbar sind. Die 
Farbtiefe ist dabei zwischen 24 Bit oder 48 Bit wählbar, was dem 
Prozessor alles abverlangen dürfte.

Die Daten werden mittels DMA unter Nutzung der parallel I²C Hardware des 
ESP auf sechs (2x rot, 2x grün, 2x blau) Datenlines mit 64 Bit länge 
"rausgeschaufelt".

Die eingesetzten Displays haben ein 1:32 Muxing und eine Auflösung von 
64x64 Pixeln.

Ich benötige das so:

Farbtiefe: 3 Bit, also jede der drei Grundfarben eines Pixels nur an 
oder aus.
Länge der Datenlines dafür: 12 x 64 Bit, also 768 Bit für 12 dieser 
64x64 Pixel Displays.

Ich habe ein paar eigene einfache Applikationen in C die ich dann 
dorthin portieren möchte. Ich nutze also den ganzen Overhead der Demos 
später nicht außer vielleicht Schriftarten und Striche/Kreise.

Ich bin für jeden Tip hier dankbar, ich hoffe darauf hier auf jemanden 
zu treffen der sich gut mit dem ESP32 auskennt und mir zumindest sagen 
kann, wieviel Aufwand das ist es zu ändern oder ob das überhaupt 
realistisch ist. Wenn der Prozessor die 64x64 RGB Pixel mit 24 Bit 
Farbtiefe schafft zu bedienen, sollten 64x768 Pixel mit 3 Bit Farbtiefe 
zu schaffen sein, so meine Hoffnung.

Danke.

Gruß
TS

: Bearbeitet durch User
von Helmut -. (dc3yc)


Lesenswert?

Und wo in dem Code wird da der I2C-Bus verwendet?

von Εrnst B. (ernst)


Lesenswert?

Helmut -. schrieb:
> Und wo in dem Code wird da der I2C-Bus verwendet?

Vermutlich hat Thorsten das mit I2S verwechselt, der Beispielcode 
verwendet I2S mit DMA.

von Thorsten S. (whitejack)


Lesenswert?

Εrnst B. schrieb:
> der Beispielcode
> verwendet I2S mit DMA

Ja stimmt, mein Fehler.

Ich sehe gerade dass im Code noch defines für Prozessortypen o.ä 
vorhanden sind, auch in den I²S Routinen:

#ifdef ESP32_ORIG
#ifdef ESP32_SXXX

etc...

Es wird auf einem ESP32 WROOM 32 laufen, sofern das hier von Bedeutung 
ist.

Zerreißt mich bitte nicht gleich in der Luft für diese Anfrage. Auch 
wenn sich keiner findet der sich diesem Thema widmet,  allein mit Worten 
zu erfahren wie es grundsetzlich funktioniert dass man 64x64x3 8 bit 
tiefe PWMs seriell über diese Datenlines erzeugt, dazu gehört ja eine 
unfassbare Rechnleistung, oder es gibt dort eine Trickkiste die sich 
gewaschen hat, es müssen ja nicht nur die Daten ständig raus geschaufelt 
werden, sondern auch jede einzelne 8Bit PWM in jedem Zyklus neu 
berechnet werden...

Auch wie das I²S grundsätzlich funktioniert, sind die Pins dafür 
vorgesehen harwaremäßig? Dann könnte ich mir vorstellen wie es 
vielleicht zumindest damit funktioniert. Es wird dort ja auf "memory" 
rumgepointert, ich kenne das zumindest so dass man eine Startadresse im 
Speicher übergibt und die DMA läuft das dann "einfach" ab von x bis y. 
Aber wie die 32 bit breiten Daten dann auf den sechs Datenpins landen, 
also wie das Hardwaremäßg festgelegt ist, oder funktioniert wäre schon 
interessant, wenn auchgleich vielleicht nicht primär wichtig....

Diese ganze "Rechnerei" der PWMs könnte ja entfallen, da die RGB 
Pixelbestandteile ja "nur" an oder aus sein können/werden, auch wenn das 
sicher nur eine Hardwaretrickkiste sein kann...in Software kann das mit 
den Taktraten in meiner Welt niemals gehen...aber ich bin da wie gesagt 
auch nur bedingt zuhause...

Also bitte greift mir etwas unter die Arme. Danke.

: Bearbeitet durch User
von Peter (pittyj)


Lesenswert?

Thorsten S. schrieb:
> allein mit Worten
> zu erfahren wie es grundsetzlich funktioniert dass man 64x64x3 8 bit
> tiefe PWMs seriell über diese Datenlines erzeugt, dazu gehört ja eine
> unfassbare Rechnleistung,

Hm, das verstehe ich nicht. Werden da wirklich PWMs geschickt?
Ich habe eine andere Vorstellung was eine PWM ist.


Also wenn das Bild 64x64x3 Bytes braucht, dann sind das 12288 Bytes zu 
Übertragen. Das ist keine unfassbar große Rechenleistung. Jedenfalls bei 
meinen Erfahrungen.

Falls ich es falsch verstanden habe, und es wirklich PWMs sind, die für 
jeden Pixel erzeugt werden müssen, dann gehen die normalen CPUs nicht, 
und du müsstest auf GPUs (NVidia etc) ausweichen.

Oder einen normalen Monitor mit HDMI nehmen, der macht das mit links. 
Einfach an einen z.B. Raspi anschließen. Der hat dann auch mehr als 
64x64 Auflösung. Benutze ich täglich.

Beitrag #7603393 wurde vom Autor gelöscht.
Beitrag #7603453 wurde vom Autor gelöscht.
von Obelix X. (obelix)


Lesenswert?

Ist der ESP32 ein PC? Steht ja in dem PC-Programmierungsforum?

von Thorsten S. (whitejack)


Lesenswert?


Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.