Raspberry Pi Pico videoutgång

TL;DR

Raspberry Pi Pico är en otrolig liten mikrokontroller. Även om den inte har ett inbyggt videoutgångsgränssnitt, som dess större Raspberry Pi Zero / 1 / 2 / 3 / 4 / 400 syskon (HDMI / dubbel HDMI i deras fall), är det möjligt att lägga till en videoutgång till Pico! (Som VGA eller DVI via en HDMI-kontakt, läs vidare för detaljer)

I det här inlägget förklarar vi varför en videoutgång är en mycket speciell funktion för mikrokontroller, och vilka typer av videoutgångar du kan bygga eller köpa till din Pico. Vi visar också lite exempelkod - redan förkompilerad åt dig, så att du kan ladda ner den direkt, och sedan pratar vi om vad du behöver ändra för att få den att köra.

Vår systerbutik, buyzero.desäljer en mängd olika Pico-tillbehör - bland annat DVI-strumpan, och VGA-bärarkort för Pico.

Obs: Pico har inte ett Linux-operativsystem som Raspberry Pi Zero W till exempel. Så du kommer troligen att behöva dyka lite djupare för att lära dig hur du kodar och laddar upp dina applikationer till Pico. Om det inte är din grej, Pi Zero W kan vara en bättre passform att börja spela runt 🙂

Pico Video-utgång med hjälp av DVI-strumpan - vilda animationer är möjliga. Känner du igen ansiktet? Låt oss veta i kommentarerna

Om du har lyckats göra ett eget videoprojekt med Raspberry Pi Pico, låt oss veta det i kommentarerna!

Varför är det en utmaning att lägga till en Raspberry Pi Pico Video-utgång?

Raspberry Pi 400är t.ex. baserad på BCM2711 SoC. Detta system-on-a-chip har specialiserad hårdvara som tar hand om videoutgången och förbereder den perfekt i det format som är specificerat för det eller de specifika videogränssnitten, två HDMI-portar i fallet med Pi 400. Den har också ett enormt minne (på 4 GB), där videoutgångsdata kan lagras.

För att förstå detta bättre måste vi titta på några grundläggande principer för videoutmatning från datorer:

Visning och överföring av video

Vi ser det som visas på skärmen "på en gång". Vår hjärna har massivt parallella ledningar, där den tar in information från alla tillgängliga näthinneceller på en gång (konceller och stavceller).

en katt med en fjäril, ett exempel på vad vi vill visa för våra användare.
Foto av Karina VorozheevaUnsplash

(* mekanismen för överföring till hjärnan integrerar information över flera näthinneceller, men faktum kvarstår att mycket information överförs parallellt. Titta in i bipolära celler om du är intresserad av att veta mer)

Hjärnan har dock latenser - den kan inte lösa förändringar i visuella stimuli snabbare än 13 ms. (vilket är ungefär 1 av 75 bilder per sekund).

För oss innebär det att om vi vill visa en riktigt jämn animation måste vi visa cirka 60 olika statiska bilder per sekund. Vår hjärna kommer att tolka dessa statiska bilder som en jämn och verklighetstrogen uppspelning.

Vanligtvis vill vi att dessa bilder ska vara i färg.

Vi har tre olika fotoreceptorer för färg, så skärmen visar bara dessa tre olika färger med olika ljusstyrka. Återigen kommer vår hjärna att syntetisera färgerna däremellan utifrån den information den får. (På en sidenote, lila existerar egentligen inte som en egen våglängd - det är en blandning av rött och blått).

Det finns tre primärfärger:

  • röd
  • grön
  • blå

Tillsammans är de kända som RGB. När man lägger till alla tre får man vitt. Om man adderar rött till grönt får man gult, om man adderar grönt till blått får man cyan och om man adderar blått till rött får man magenta.

Så vad vi verkligen vill få ut är..:

  • tre olika färger,
  • var och en med ett annat ljusstyrkevärde
  • idealiskt ca 60 olika värden per sekund (60 Hz)
  • en viss skärmupplösning - t.ex. 640 x 480

Låt oss beräkna hur mycket data detta är per sekund:

  • 3 färger
  • x 8 bitars färgdjup
  • x 60
  • x 640 x 480

= 442.368.000 bitar per sekund = ca. 422 MBit/s

(Tänk på att till exempel USB v1.1-gränssnittet på Pico har cirka 10 Mbit/s - cirka 40 gånger mindre genomströmning!)

För att få ut den här informationen bör du helst också lagra den som en bitmapp i RAM-minnet - en del av din applikation uppdaterar bilden i RAM-minnet, medan en annan del tar hand om att leverera data i ett format som en bildskärm kan arbeta med. Detta måste vara RAM, eftersom vi arbetar i höga hastigheter och måste kunna läsa detta på ett tillförlitligt sätt med små latenser - vilket Flash-minne inte skulle ge.

Låt oss beräkna hur mycket RAM-minne vi behöver:

  • 640 x 480 (upplösning)
  • x 3 (färger)
  • x 8 bitar (färgdjup)

= 7372800 bitar = 900 kBytes (obs 1 byte = 8 bitar)

Medan 900 kBytes ryms många gånger om i RAM-minnet på en Raspberry Pi 400, Pico har bara 264KB RAM.

Som du ser måste vi minska några av parametrarna (t.ex. upplösning, färgdjup, ...) om vi vill få plats med en bitmapp i RAM-minnet, eller så måste vi komma på några smarta idéer om hur vi ska få det att fungera utan att lagra allt!

Picos RP2040 PIO gör det möjligt att mata ut videodata

Slutligen, medan Raspberry Pi 400 och andra Raspberry Pi-modeller har dedikerade hårdvarukretsar för att bearbeta all denna information och mata ut den på ett tillförlitligt sätt, har Pico inga speciella kretsar som är avsedda för videoutmatning.

Men den har ett trick i rockärmen! RP2040 har stöd för PIO (programmerbar IO). PIO är avsedd för att emulera olika gränssnitt med exakt timing, och den är mycket, mycket kraftfull! Den kan programmeras att läsa från RAM-minnet och mata ut i höga hastigheter.

Vi kommer att använda PIO för att mata ut video till några GPIO-stift och använda ytterligare några kretsar (motstånd) för att få signalen i önskat tillstånd, beroende på vilket videoutgångsgränssnitt vi vill ansluta Pico till.

Historik för videoutgångsformat

Innan vi går in på hur du kan lägga till en videoutgång till din Raspberry Pi Pico, låt oss ta en titt på lite historia om videoutgångsformat.

Som redan nämnts kan det mänskliga ögat inte uppfatta förändringar i bilder snabbare än ca 13 ms. En av de första metoderna för att bygga datorskärmar var därför CRT (katodstrålerör) monitor.

CRT-bildskärmen använder flera strålar (2) för att skriva bilden på skärmen rad för rad (4), (5) visar en närbild av de färgglada fosforerna som adresseras individuellt av de olika strålarna. CC BY-SA 3.0 Peo~commonswiki 

CRT:n har tre strålkanoner som sveper pixel för pixel, linje för linje. (och sedan behöver en viss tid för att återvända till startpunkten). Skärmen har färgglada fosforer, som fortsätter att avge ljus ett tag efter att strålen har passerat genom dem. Vid nästa svep med strålpistolen över just denna pixel kan strålens intensitet ha förändrats, vilket vi ser som en mörkare pixel. Vår hjärna smälter samman de intilliggande färgglada fosforpixlarna till en pixel och kan inte märka ljusförändringarna mellan strålsvepningarna.

CRT närbild, som visar de färgglada fosforprickarna. av: FreeImages.com / hubert jelen

På så sätt skapas en illusion av en rörlig bild.

I själva verket behöver inte alla data finnas med i början av bilden - men bara det aktuella värdet för pixelbrigthness. Strålens intensitet kommer att modifieras i enlighet med detta. Vi kan använda en analog signal för detta - till exempel ökar ljusstyrkan om spänningen ökas.

Vi behöver tre olika ledningar för de olika färgerna (för att driva varje strålkanon individuellt), och vi behöver ett sätt att meddela bildskärmen när en ny rad måste startas och när en ny bild måste startas (när alla rader har visats).

VGA (video graphics array)

VGA utformades med tanke på dessa CRT-skärmar. Den är fortfarande ganska vanlig som ingång på bildskärmar, även om den blir alltmer föråldrad i takt med att vi övergår till helt digital överföring (mer om det senare).

Det här är också den enklaste videoutgångsstandarden att få att fungera på Pico.

Förutom en specifikation (med standardupplösningslägen) angavs en kontakt, VGA-kontakten:

VGA-port; foto av Duncan Lithgow

Den har 15 stift:

  1. RED (röd video)
  2. GRÖN (grön video)
  3. BLUE (blå video)
  4. ID2/RES (reserverad)
  5. GND (jord HSync)
  6. RED_RTN (röd retur, analog jord för rött)
  7. GREEN_RTN (grön retur, analog jord för grönt)
  8. BLUE_RTN (blå retur, analog jord för blå)
  9. KEY/PWR (+5 V DC driver EDID EEPROM-chip på vissa bildskärmar)
  10. GND (jord VSync, DDC)
  11. ID0/RES (reserverad)
  12. ID1/SDA (I2C-data sedan DDC2)
  13. HSync (horisontell synkronisering)
  14. VSync (vertikal synkronisering)
  15. ID3/SCL (I2C-klocka sedan DDC2)

VGA-kablar kan stödja olika upplösningar, färgdjup och uppdateringsfrekvenser, medan ordet "VGA" när det gäller upplösningen vanligtvis betyder 640 x 480.

Som du ser finns det tre ledningar som bär bilddata, en för varje färg. Signalen överförs med en toppspänning (max) på 0,7 V. Signalerna som överförs för färgerna är analoga till sin natur - högre spänningar ökar ljusstyrkan, en spänning på 0 betyder att pixeln är mörk / avstängd.

Få VGA-utgången att fungera på Pico

Det innebär att Picos digitala utgång på 3,3 V har tillräckligt hög spänning för att kunna driva RGB-stiften till VGA-kabeln (som förväntar sig en spänning på 0-0,7 V). Vi måste faktiskt minska spänningen genom att använda motstånd.

Vi kan bygga en enkel DAC (digital analog-omvandlare) genom att kombinera flera motstånd och GPIO-stift. Beroende på vilken kombination av GPIO-pinnar som är aktiva vid varje givet tillfälle har vi olika spänningsnivåer (= ljusstyrka):

En enkel VGA DAC, bilden är hämtad från "Hårdvarudesign med RP2040"

Som du kan se på bilden ovan driver fem GPIO:er (0-4) en kanal (röd i det här fallet), vilket ger oss ett fem-bitars djup. Motstånden är viktade 1:2:4:8:16, till exempel har den minst signifikanta biten (LSB) av rött ett 8,06K-motstånd.

När du försöker bygga den här kretsen bör du välja 1 % toleransmotstånd för att få en bra bild.

Vänligen se "Hårdvarukonstruktion med RP2040" för att förstå hur motståndsvärdena har beräknats. Kort sagt, om vi driver dem alla samtidigt får vi en spänning på 0,74 V, vilket är OK för våra syften.

Mer specifikt föreslår den här referensdesignen att man stöder ett vanligt 16-bitars RGB-dataformat (RGB-565), som använder 5 bitar för rött och blått och 6 för grönt. Vi kan minska den faktiska fysiska utmatningen till den gröna till 5 GPIO-stift som för de andra färgerna, för att spara ett stift.

Dessutom behövs ytterligare 2 stift för horisontell och vertikal blankingtiming (HSYNC och VSYNC).

Detta ger oss totalt 17 GPIO-stift för att driva en VGA-utgång. Lyckligtvis har Pico 26 tillgängliga GPIO-stift, vilket gör att vi kan driva VGA-utgången.

Som tidigare nämnts kan Pico också driva dessa stift vid nödvändiga frekvenser och med exakt timing, tack vare RP2040:s PIO-funktion (programmerbar I/O).

Raspberry Pi Pico VGA-videoutgångshårdvara

Demokort för Raspberry Pi Pico VGA, SD-kort och ljud - bilden är hämtad från handboken Hardware Design with the RP2040

Raspberry Pi har designat och öppet tillgängliggjort ett bärarkort för Pico som visar upp olika funktioner:

  • VGA-utgång
  • knappar
  • microSD-kortplats
  • ljudutgångar (analog PWM, digital I2S)

Köp Pico VGA / Audio / microSD-kort

Vi (buyzero.de) håller för närvarande på att få detta referensdesignkort byggt och monterat åt oss. Kontakta oss om du vill bli informerad när styrelsen kan köpas!

The Pico VGA Board finns nu att köpa från oss, begränsat antal i lager!

Under tiden har Pimoroni också skapat en version av denna bräda, de kallar den Pimoroni Pico VGA Demo Bas.

Tillägg: varje stift på de 15 rgb-utgångsstiften kommer fortfarande att behöva drivas med cirka 17,58 Mbit/s, vilket fortfarande är en imponerande - men mycket mer hanterbar siffra!

Programvara som krävs för att driva VGA-utgången

Eftersom vi arbetar med Pico finns det inga "grafikdrivrutiner" som vi bara kan installera. Vi måste skriva koden själva ... eller inte 🙂

Lyckligtvis har de som har designat hårdvarukortet åt oss redan levererat en del kod som vi kan använda, så att vi kan fokusera på vårt projekt.

Exempel på kod som du kan använda finns i pico-playground Repository:

I det här arkivet finns en enkel filmspelare som heter popcorn (som spelar upp filmer i ett anpassat format). A big buck bunny, 1,6 GB i storlek kan laddas ner här. Observera att detta är råa diskbilder som ska skrivas till ett SD-kort - detta exempel förutsätter att du har VGA-demokortet, som har en SD-kortplats. Instruktioner för konvertera filmer är också angivna.

Koden använder sig av pico_scanvideo biblioteket (pico/scanvideo.h) från pico_extras förvar. Ta också en titt på det förvaret för ljudprovkod!

API:et matar ut parallell RGB-data och synksignal på stift för DPI VGA (med hjälp av motstånds-DAC, enligt beskrivningen ovan).

En bra poäng:

  • Standardprogrammet PIO scanline accepterar run-längdskodade data - det betyder att du kan spara RAM för att generera platta färgområden (jag tänker på spel här!)

I allmänhet vill du använda pico_scanvideo bibliotek istället för att utveckla VGA-utgångskod från början 🙂 🙂

god kodningspraxis

Fler demos

Kolla in de scanvideo-katalog i pico-playground-förvaret:

  • mandelbrot: en mandelbrotgenerator som använder en 320x240x16 framebuffer
  • sprite_demo: studsande Eben-huvuden (video högst upp på vår sida!)
  • test_mönster: Visa färgfält

Använda VGA-kortet

Du måste skicka en ytterligare parameter till CMake under kompileringen:

-DPICO_BOARD=vgaboard

TBD: Lägg till steg-för-steg-guider

DVI: Digitalt visuellt gränssnitt

Tekniken går vidare. Livet går vidare. CRT-skärmarna blev alltmer föråldrade och ersattes av modernare platta skärmar med digitala gränssnitt. Inga rörliga balkar, bara pixlar.

Under en tid fortsatte signalerna att vara analoga - men det är inte särskilt önskvärt, eftersom vi måste ta något digitalt, omvandla det till något analogt och sedan omvandla det tillbaka till något digitalt igen. Bilden blir mindre exakt och vi har ytterligare kretsar som vi skulle kunna avstå från.

Nu kommer DVI in i bilden. På ett smart sätt erbjöds ett alternativ för att överföra analoga signaler också, så enkla DVI till VGA-adaptrar / kablar kunde byggas. Naturligtvis måste grafikkortet mata ut både analoga och digitala data. Men detta hjälpte till att få standarden accepterad och att den blev utbredd.

Här är vi intresserade av de digitala signalerna (DVI-D), eftersom vi skulle vilja bitbanga dem från Raspberry Pi Pico.

Med DVI-D överförs bilddata på ett seriellt sätt.

En "single link" (mest grundläggande) DVI-anslutning består av fyra så kallade TMDS-länkar (transition minimized differential signaling):

  • röd
  • grön
  • blå
  • pixelklocka

Differentiell signalering används för att minimera interferens (eftersom

Vi har totalt 24 bitar per pixel (8 bitar x 3 färger) och kodar data med hjälp av 8b10b-kodning (8 bitar mappas till 10-bitars symboler på den faktiska fysiska linjen för att bland annat uppnå DC-balans).

DVI behandlar pixlarna på samma sätt som VGA: allt överförs på nytt varje gång bilden "startar" igen, och data klockas exakt. Detta är som en telefonlinje, där linjen ständigt är i bruk när två personer pratar.

Obs: i motsats till detta, DisplayPort behandlar data som paket - vilket har ett antal fördelar.

Till skillnad från VGA-exemplet ovan innebär detta mycket högre datavolymer eftersom data skickas digitalt i stället för analoga ljusstyrkevärden.

Luke Wren, en ingenjör på Raspberry Pi, trodde att RP2040 (hjärtat i Pico) också skulle kunna driva DVI-utgång, återigen med hjälp av PIO.

Resultatet är PicoDVI förvaringsplats och projekt, och de Pico DVI strumpa.

Luke Wren beräknade att cirka 252 Mbps seriella data måste drivas via de digitala GPIO-padsen - differentiell serie, som emuleras med två single-ended-pads.

dc_koppling.png
Källa: Luke Wrens förvaringsplats (BSD-3 licensierad)

Ovan ser du den krets som används för att driva DVI-utgången (med hjälp av en HDMI-kontakt, mer om detta nedan) - är helt enkelt flera 270 Ohm resistorer.

Luke Wren har till och med gått ännu längre och lagt till dubbla DVI-utgångar till sin PicoDVI-layout med ett instickskort:

två_displayer.jpg
Luke Wren demonstrerar utmatning på två skärmar använder sin egen design

HDMI: nedåtkompatibel med DVI

HDMI är nästa steg i utvecklingen av kontakter (och konkurrerar med DisplayPort). Den är helt kompatibel nedåt med de digitala DVI-signalerna - vilket innebär att du kan ha enkla, rent passiva DVI / HDMI-omvandlare.

Pico DVI strumpa

Pico DVI Sock är en enkel och billig lösning för att lägga till digital videoutgång till din Pi. Den har designats av Luke Wren (se beskrivning ovan). Det är en DVI-utgång med en HDMI-kontakt. Eftersom HDMI är nedåtkompatibelt med DVI kan du använda en HDMI-kabel för att ansluta din Pico till HDMI-skärmar:

lödning_04.jpg
Foto av Luke Wren, CC0-1.0-licens

Programmering av Pico DVI-sockan

TL;DR

Du kan ladda ner vår picodvi-test.zip och börja leka med .UF2-exempelkompileringarna i den. Den innehåller också en PDF som ger dig en steg-för-steg-guide.

Exempel på kod

Luke Wren tillhandahåller kodexempel i hans arkiv. Men för att använda dem med Pico DVI Sock måste du ställa in rätt konfiguration att använda. Vi visar dig hur i denna mini-tutorial.

Förutsättningar för installation

sudo apt install cmake gcc-arm-none-eabi libnewlib-arm-none-eabi build-essential

Klona PicoDVI repo från Luke Wren:

cd ~
mkdir pico
cd pico 
git clone https://github.com/raspberrypi/pico-sdk
cd pico-sdk
git submodule update --init
cd ~/pico
git clone https://github.com/Wren6991/PicoDVI.git

Om du vill använda kodexemplen med Pico DVI Sock måste du ställa in korrekt stiftkonfiguration att använda. Lägg till följande rad i common_dvi_pin_configs.h bara före den första #ifndef

#define DEFAULT_DVI_SERIAL_CONFIG pico_sock_cfg

Bygga upp exemplen

cd PicoDVI/software/
mkdir build
cd build
export PICO_SDK_PATH=~/pico/pico-sdk
make -j$(nproc)

Installera exemplen på Pico

De byggda exemplen kommer att finnas i mappen software/build/apps.

Håll BOOTSEL-tangenten på Pico intryckt och anslut sedan kortet till din dator med microUSB-kontakten. Kopiera och klistra in den .uf2-fil som du vill prova - t.ex. sprite_bounce.uf2 - på Pico.

Pico startar om automatiskt och du bör kunna se utmatningen på HDMI-kontakten (kom ihåg att det egentligen är DVI :-)).

Ladda ner

Du kan ladda ner vår picodvi-test.zip och börja leka med .UF2-exempelkompileringarna i den. Den innehåller också en PDF som ger dig en steg-för-steg-guide. Om sprite_bounce.uf2 inte fungerar för dig, prova en annan bildskärm - det är möjligt att inte alla bildskärmar är kompatibla med denna videoutgång.

Om du har kommit så långt, låt oss veta i kommentarerna hur det fungerade för dig och vilka projektidéer du har kommit på!

Köp en Pico DVI-strumpa

Vår systersida, buyzero.de, lagerför Pico DVI strumpa i två varianter:

Sidenote: DBI- och DSI-skärmar

Raspberry Pi Pico Extras-arkivet har platshållare för DBI (16-bitars MIPI DBI-skärmar - med data som skickas parallellt) och DSI (MIPI seriella skärmar), så vi kanske får se stöd för dessa skärmar i framtiden också.

21 Kommentarer

  1. VanTa den mars 20, 2021 kl 8:27 f m

    Något exempel på kompositutgång med genlock?

    • PiCaptain den april 6, 2021 kl 2:47 e m

      Jag tycker att kompositutgång borde vara möjlig, men jag har inte sett något i naturen om det ännu.

  2. Miroslav Nemecek den juni 10, 2021 kl 10:24 f m

    Som alternativ till scanvideo har jag implementerat ett annat VGA/TV-bibliotek för Raspberry Pico - "PicoVGA", som jag tycker är enklare att använda: http://www.breatharian.eu/hw/picovga/index_en.html

    • raspi berry den juli 1, 2021 kl 5:20 e m

      Tack för att du delar med dig av informationen om ditt bibliotek!

  3. Ashesh Rai den juni 10, 2021 kl 5:39 e m

    Hej, kan denna HDMI användas som INPUT och bearbeta data.

    • raspi berry den juli 1, 2021 kl 5:20 e m

      så som den är programmerad, och eftersom motstånden begränsar Raspberry Pi:s utsignal - nej.
      möjligen kan man använda en anpassning av designen, med något som höjer signalnivån istället för att sänka den / och naturligtvis anpassad kod för att utgångarna ska fungera som ingångar, för att kunna bearbeta videodata inuti Pico.

  4. Lorencz den juni 25, 2021 kl 2:25 e m

    Några praktiska tips dock. Tack vare kisel lotteri, din specifika enhet kanske inte överklockar proportionellt gpu och cpu-delen samma också. Så om du inte behöver snabbare grafik, överklocka inte dess GPU. Detta ökar din chans att överklocka högre och ha ett stabilt system. Även lägre strömförbrukning och mindre matningsström innebär bättre stabilitet. Raspberry Pis med 4 CPU-kärnor kan stöta på problem med strömförsörjningen när de belastas med alla 4 kärnorna aktiva. Den integrerade PMIC (power management IC) kanske inte levererar den ström som behövs för alla kärnor och stänger av sig själv under en kort tidsperiod, vilket gör att Pi:n måste startas om. Kyl även PMIC:en. Övervolta inte på max om du behöver belastning på alla kärnor (kärnkompileringar, tung sifferkrossning etc). Här har vi en RPI4 som kan köras i 1850MHz med alla kärnor aktiva med over_voltage=2, men med högre over_voltage=3 så startar den om när den belastas. Högre överspänning innebär också högre ström och PMIC-kretsen har begränsad utgångsström. Ju varmare PMIC och dess omgivande induktorer är, desto mindre ström kan de leverera. Detta är en begränsning i PMIC-chipet, inte i BCM-chipset. Så om du upplever sporadiska omstarter under tung belastning kan det bero på överhettning av PMIC. Om din Pi låser sig är det inte detta specifika problem, utan kanske förlust av kisel-lotteri. Underklockning av en GPU-del kan vara ett intressant sätt att öka överklockbarheten (stabilare system), men AFAIK, äldre Raspberry Pis hade L2-cache knuten till GPU, så underklockning av den kan sakta ner CPU också. Jag har dokumenterat hur PMIC:en i Raspberry Pi 4 värms upp - alla andra chip kyls direkt till en kylfläns. Bilden är från undersidan, dvs. du ser det uppvärmda kretskortet. Nedre vänstra hörnet är PMIC.

    • raspi berry den juli 1, 2021 kl 5:18 e m

      Tack så mycket för dessa praktiska tips!

  5. Bing den oktober 23, 2021 kl 7:20 f m

    Hej,
    Själv en noob här... Kan någon tillhandahålla ett schema för en cvbs-displayutgång. Och eventuell nödvändig ändring av källkoden?

    • PiCaptain den oktober 23, 2021 kl 1:40 e m

      Tyvärr, ingen aning om cvbs

  6. farooqkz den november 8, 2021 kl 8:30 f m

    Hej
    Tack för det fina inlägget. Jag har läst det från början till nästan slutet 😉
    Men jag har några dumma frågor:
    1. RPi Pico har fått PWM. Är det möjligt att använda en enda stift med PWM för att mata ut analog signal för att mata till VGA-stiften? så färre stift kommer att användas. Också enklare och små kretsar.
    2. Är det möjligt att få analog AV-utgång från RPi Pico igen med hjälp av PWM, kanske? Jag tror att de flesta TV-apparater stöder det. Kanske med hjälp av en modul som https://thecaferobot.com/store/pub/media/catalog/product/cache/14d1897c7f1bd4f35a7de1523300314a/l/c/lcd-01-057-1.jpg finns i en lokal butik som jag har tillgång till. Bilden jag har skickat är dock en modul för Arduino men det borde vara möjligt att använda med Pico också, antar jag.
    3. Om man ville gå med VGA eller DVI i kombination med Pico, är det möjligt att inte använda dessa hjälp VGA- eller DVI-kort? Eftersom de inte är tillgängliga i min region för att köpa en och mina färdigheter inte är tillräckligt bra för att skapa en själv.

    • raspi berry den november 9, 2021 kl 10:29 f m

      1. PWM Pins kommer förmodligen inte att ha den timingprecision du skulle vilja ha för videoutgång (det är därför vi använder PIO som har mycket exakt timing). Men varför inte prova 🙂
      2. Jag antar att det borde vara möjligt att generera en analog AV-utgång från Raspberry Pi Pico. Jag tvivlar på att PWM kommer att vara "tillräckligt" för detta (skulle gärna höra någon med mer erfarenhet chime in på det!).
      Observera att PWM helt enkelt slår på och av signalen, medan motståndsstegen som används i VGA-kortet till exempel ger kontinuerliga signalnivåer. Så för att PWM-lösningen ska fungera måste den arbeta med mycket högre frekvenser än vad som krävs för den faktiska signalen. Jag är inte heller säker på hur extern hårdvara skulle reagera på att signalen PWM:as istället för att vara en kontinuerlig analog signal.
      Möjligen kan den jämnas ut med hjälp av en mycket liten kondensator, vilket du måste göra lämpliga beräkningar för.
      3. VGA / DVI-hjälpkorten innehåller det som är nödvändigt (mestadels motstånd). Du kan titta på schemat och bygga din egen installation på en brödbräda eventuellt, jag har sett någon göra det för VGA.
      Med detta sagt skickar vi internationellt:
      https://buyzero.de/products/raspberry-pi-pico-vga-audio-sd-expansion-board?variant=39412666335412
      Pico DVI strumpa @ buyzero.de butik

  7. Nikolay den december 18, 2021 kl 1:16 e m

    Bra information. Tack för att du kom.
    Hittade också detta: Kompositvideo ut på Raspberry pico
    http://www.breakintoprogram.co.uk/projects/pico/composite-video-on-the-raspberry-pi-pico

  8. Marcelo den april 23, 2022 kl 10:09 e m

    Jag lyckades bygga picoDVI från Wren6991 och integrera den med en trippel ADC för att skanna RGB 15Khz (640×240).
    I 320×240 som bara använder en kärna, lämnas den andra ensam för att ta emot HSYNC /VSYNC avbrott och förbereda dma-överföringar utan problem, men på 640×480 blockerar användningen av 2 kärnor systemet för att fungera korrekt.
    Eftersom jag behöver hälften av linjerna, finns det ett sätt att ha en alltid förberedd svart linje för udda linjer? med det släpper jag en kärna för mina dutties.

    • Ed T den februari 25, 2023 kl 11:25 e m

      Jag tror inte att du behöver skicka några tomma linjer. Du skickar alla udda linjer, skickar en vsync-signal med en extra halv linje och skickar de jämna linjerna. Gör lite forskning om "interlaced video sync pulses".

  9. nix den juni 9, 2022 kl 2:40 e m

    Är det någon som vet hur man laddar videor som jag själv har gjort istället för exempelfilmerna? Tack på förhand!

    • Wayne den juli 30, 2022 kl 1:25 e m

      Jag är intresserad av att använda den för en unik audiovisuell visning. Snälla, kan någon berätta för mig:

      Kan du strömförsörja Pico via HDMI-kabeln, även om det är på sändningssidan av kabeln?

      Kan du ställa in Rec2100 färgrymd (rec 2020 HDR färgrymd)?

      Är det möjligt att ansluta extra linjer till HDMI för att skicka ljud (och rec2020 / HDR-signalering)?

      Kan du mata ut video via något av USB-video-formaten (video från en oförändrad Pico via en USB- till Pico-adapter)?

      Kan den trådlösa Pico använda Miracast?

      Kan ett vanligt bitmappsvideoläge göras och manipuleras för spelgrafik med överblivna cykler?

      Seedstudio gör ett mini RP2040-kort. Kan HDMI-gränssnittskortet och programvaran fungera på det. De har också en RiscV-version med wifi, så det skulle vara bra om det kunde omkompilera för det.

      https://www.seeedstudio.com/XIAO-RP2040-v1-0-p-5026.html?queryID=31d59a67f7c148df996ba9c1bb7563e3&objectID=5026&indexName=bazaar_retailer_products

      Jag är intresserad av spelapplikationer, till exempel användning av spelklockor.

      Någon JavaScript minimal livskraftig körtidsplattform sätta där?

      Ledsen att det är mycket att fråga, men
      Mest intressant.

      Tack så mycket.

  10. hitech444 den juli 17, 2022 kl 4:20 e m

    Kan jag använda ditt kort tillsammans med Geoffs MMBasic-tolk? Finns det några hårdvarubegränsningar för mina program på grund av ditt kort?

    • Graham den november 10, 2022 kl 10:00 f m

      Stora sinnen tänker lika, jag har också tänkt i dessa banor! Jag har redan byggt den Raspberry Pico-baserade MMBASIC-datorn med VGA-utgång, och det är inget annat än fantastiskt! DVI-D (Pseudo HDMI)-utgången tar dock grafikförmågan till en ny nivå! Naturligtvis behöver MMBASIC inte fullt ut utnyttja det högre färgdjupet eller upplösningen, men att arbeta med 640 × 480 med säg 64 färger skulle vara ganska noice.

      Med detta sagt förutser jag två omedelbara problem.
      1. VGA-lösningen använder också PIO-pinnarna, och sedan används en av kärnorna för spritehantering, rambuffring etc. tror jag. Åtminstone kommer det att krävas en kodändring, åtminstone för att ersätta VGA PIO-implementeringen. Som API skulle jag också bli förvånad om gränssnittet mellan PIO (VGA) och framebufferkärnkoden är detsamma som DVI PIO-lösningen, men jag kan ha fel. Hur som helst måste det ske en kodändring.
      2. RAM-MINNE. Det finns inte tillräckligt av det, så högre upplösning och högre färgdjup kommer att bli ett problem. Men jag tror att jag har en lösning. Använd externt PSRAM, och använd kanske en RP2040/Pico som "GPU" och den har sitt eget dedikerade PSRAM anslutet. Den pratar sedan med en andra RP2040 som tillhandahåller "CPU" eller hjärnan i systemet, som kör MMBASIC, och den kan manipulera / flytta grafiska tillgångar runt genom att instruera GPU med minimal overhead (säg över I2C-länk). Jag vill ha / behöver det här 😉

  11. Dave den december 30, 2023 kl 1:27 e m

    64 euro för "Raspberry Pi Pico VGA Audio SD Expansion Board"? Man skulle bättre använda en noll...

    • Jörg den maj 25, 2024 kl 9:31 e m

      Pimoroni har en billigare (30 €), men fortfarande mycket. DVI-sockan kostar bara några euro ...

Lämna en kommentar