class RGBDisplay – RGB-displaystuurprogramma

De RGBDisplay-klasse stuurt 24-bit parallelle RGB-LCD’s aan via de STM32 LTDC (LCD-TFT)-controller. De LTDC stuurt pixels rechtstreeks vanuit een door SDRAM ondersteunde framebuffer uit op de gekozen pixelklok, zodat hoge verversingssnelheden (tot 120 Hz) mogelijk zijn zonder tussenkomst van de CPU.

Op de OpenMV Cam Pure Thermal voedt diezelfde 24-bit parallelle bus ook een ingebouwde TFP410 HDMI-encoder, zodat de HDMI-uitvoer eveneens via deze klasse wordt aangestuurd – gebruik display_on=False om het ingebouwde LCD zwart te maken terwijl er toch pixels naar de encoder worden geklokt.

De paneelresolutie wordt geselecteerd via framesize met behulp van de constanten die zijn gedefinieerd in de display-module (QVGA, VGA, WVGA, HD, FHD, …). Paneelspecifieke initialisatiesequenties worden ingeplugd via het sleutelwoordargument controller (bijvoorbeeld ST7701 voor panelen op basis van ST7701). De helderheid van de achtergrondverlichting wordt standaard als een eenvoudige GPIO aangestuurd, of door DACBacklight / PWMBacklight als een daarvan als backlight wordt meegegeven.

Frames worden weergegeven door write() aan te roepen met een image.Image. Het stuurprogramma handelt RGB-conversie, schalen, ROI, palet en oriëntatietransformaties intern af.

Voorbeeld – de camera spiegelen naar een 480x272-paneel op 60 Hz:

import csi
import display
import image

csi0 = csi.CSI()
csi0.reset()
csi0.pixformat(csi.RGB565)
csi0.framesize(csi.QVGA)

lcd = display.RGBDisplay(framesize=display.FHVGA, refresh=60)

while True:
    lcd.write(csi0.snapshot(), hint=image.SCALE_ASPECT_KEEP)

Constructors

class display.RGBDisplay(framesize: int = display.FWVGA, refresh: int = 60, display_on: bool = True, triple_buffer: bool = True, portrait: bool = False, controller: object | None = None, backlight: object | None = None)

framesize Een van de standaard ondersteunde resoluties (zie de constanten van de display-module).

refresh Stelt de schermverversingssnelheid in hertz in (30-120). Dit regelt de pixelklok van het RGB-LCD.

display_on Schakelt de lokale LCD-uitvoer in. Geef False mee op de OpenMV Cam Pure Thermal, waarvan de 24-bit parallelle bus zowel het ingebouwde LCD als de TFP410 HDMI-encoder aanstuurt – hiermee blijft het ingebouwde LCD zwart terwijl de HDMI-encoder toch wordt gevoed. Op andere OpenMV Cams is er geen gedeelde afnemer en kan dit op de standaardwaarde blijven staan.

triple_buffer Indien True, worden updates van het scherm niet-blokkerend, ten koste van 3x de displaygrootte aan RAM.

portrait Verwisselt de breedte en hoogte van de framesize.

controller Geef een instantie van een controllerchipklasse mee om die samen met het display te initialiseren.

backlight Geef een instantie van een module voor de achtergrondverlichting mee die moet worden gebruikt. Standaard wordt de achtergrondverlichting via een GPIO-pin geregeld.

deinit() None

Geeft de I/O-pinnen en het RAM die door de klasse worden gebruikt weer vrij. Dit wordt automatisch aangeroepen bij vernietiging.

width() int

Geeft de breedte van het scherm terug.

height() int

Geeft de hoogte van het scherm terug.

triple_buffer() bool

Geeft terug of triple buffering is ingeschakeld.

bgr() bool

Geeft terug of de rode en blauwe kanalen zijn verwisseld.

byte_swap() bool

Geeft terug of de RGB565-pixelbytes bij uitvoer zijn verwisseld.

framesize() int

Geeft de framesize-constante terug waarmee het display is geconfigureerd.

refresh() int

Geeft de verversingssnelheid terug.

clear(display_off: bool = False) None

Wist het LCD-scherm naar zwart.

display_off indien True, schakelt de displaylogica uit in plaats van de framebuffer naar zwart te wissen. Je moet hierna ook de achtergrondverlichting uitschakelen om er zeker van te zijn dat het scherm zwart wordt, aangezien veel displays wit zijn wanneer alleen de achtergrondverlichting aan is.

backlight(value: int | None = None) int

Stelt de dimwaarde van de LCD-achtergrondverlichting in, van 0 (uit) tot 100 (aan). Geef geen argumenten mee om de huidige waarde van de achtergrondverlichting op te vragen.

Tenzij er een DACBacklight- of PWMBacklight-controller aan de constructor is meegegeven, wordt de achtergrondverlichting als een GPIO-pin geregeld en gaat deze alleen van 0 (uit) naar niet-nul (aan).

write(image: image.Image, x: int = 0, y: int = 0, x_scale: float = 1.0, y_scale: float = 1.0, roi: Tuple[int, int, int, int] | None = None, rgb_channel: int = -1, alpha: int = 255, color_palette: image.Image | None = None, alpha_palette: image.Image | None = None, hint: int = 0) None

Geeft een image weer waarvan de linkerbovenhoek begint op locatie x, y. In plaats van een afbeeldingsobject kan ook een padstring worden meegegeven om de afbeelding automatisch van schijf te laden.

x_scale regelt hoeveel de weergegeven afbeelding in de x-richting wordt geschaald. Als deze waarde negatief is, wordt de afbeelding horizontaal gespiegeld. Als y_scale niet is opgegeven, komt deze overeen met x_scale om de beeldverhouding te behouden.

y_scale regelt hoeveel de weergegeven afbeelding in de y-richting wordt geschaald. Als deze waarde negatief is, wordt de afbeelding verticaal gespiegeld (vereist triple buffering). Als x_scale niet is opgegeven, komt deze overeen met y_scale om de beeldverhouding te behouden.

roi is de rechthoektuple van het aandachtsgebied (x, y, w, h) van de weer te geven afbeelding.

rgb_channel is het RGB-kanaal (0=R, 1=G, 2=B) dat uit een RGB565-afbeelding wordt geëxtraheerd en in grijswaarden wordt weergegeven. -1 schakelt kanaalextractie uit.

alpha regelt hoe ondoorzichtig de afbeelding is, van 0 (volledig transparant / zwart) tot 255 (ondoorzichtig).

color_palette een RGB565-afbeelding van in totaal 256 pixels die als een kleuropzoektabel wordt gebruikt op de grijswaarde van de invoerafbeelding. Wordt toegepast na de rgb_channel-extractie. Mag ook een palet-enum zijn (bijv. image.PALETTE_RAINBOW).

alpha_palette een GRAYSCALE-afbeelding van in totaal 256 pixels die als een per-pixel alpha-opzoektabel wordt gebruikt op de grijswaarde van de invoerafbeelding. Wordt toegepast na de rgb_channel-extractie.

hint is een logische OR van de vlaggen: