Έξοδος βίντεο Raspberry Pi Pico

TL;DR

Το Raspberry Pi Pico είναι ένας απίστευτος μικρός μικροελεγκτής. Αν και δεν έχει ενσωματωμένη διεπαφή εξόδου βίντεο, όπως τα μεγαλύτερα αδέρφια του Raspberry Pi Zero / 1 / 2 / 3 / 4 / 400 (HDMI / διπλό HDMI στην περίπτωσή τους), είναι δυνατόν να προσθέσετε μια έξοδο βίντεο στο Pico! (Ως VGA ή DVI μέσω σύνδεσης HDMI, διαβάστε παρακάτω για λεπτομέρειες)

Σε αυτή τη δημοσίευση, θα εξηγήσουμε γιατί η έξοδος βίντεο είναι ένα πολύ ιδιαίτερο χαρακτηριστικό για τους μικροελεγκτές και ποιους τύπους εξόδου βίντεο μπορείτε να κατασκευάσετε ή να αγοράσετε για το Pico σας. Θα σας δείξουμε επίσης κάποιο δείγμα κώδικα - ήδη προμεταγλωττισμένο για εσάς, ώστε να μπορείτε να το κατεβάσετε απευθείας, και στη συνέχεια θα μιλήσουμε για το τι πρέπει να τροποποιήσετε για να το κάνετε να τρέξει.

Το αδελφό μας κατάστημα, buyzero.de, πωλεί μια ποικιλία αξεσουάρ Pico - μεταξύ των οποίων το DVI Sock, και το Πλακέτα φορέα VGA για το Pico.

Σημείωση: το Pico δεν διαθέτει λειτουργικό σύστημα Linux όπως το Raspberry Pi Zero W για παράδειγμα. Έτσι, το πιθανότερο είναι ότι θα πρέπει να ασχοληθείτε λίγο περισσότερο με την εκμάθηση του τρόπου κωδικοποίησης και μεταφόρτωσης των εφαρμογών σας στο Pico. Αν αυτό δεν είναι το φόρτε σας, το Pi Zero W μπορεί να είναι μια καλύτερη λύση για να αρχίσουμε να παίζουμε 🙂

Έξοδος βίντεο Pico με χρήση της υποδοχής DVI - είναι δυνατή η δημιουργία άγριων κινούμενων σχεδίων. Αναγνωρίζετε το πρόσωπο; Ενημερώστε μας στα σχόλια

Αν καταφέρατε να κάνετε το δικό σας project βίντεο με το Raspberry Pi Pico, ενημερώστε μας στα σχόλια!

Γιατί η προσθήκη μιας εξόδου βίντεο Raspberry Pi Pico αποτελεί πρόκληση;

Το Raspberry Pi 400, για παράδειγμα, βασίζεται στο BCM2711 SoC. Αυτό το system-on-a-chip διαθέτει εξειδικευμένο υλικό το οποίο αναλαμβάνει την έξοδο βίντεο, προετοιμάζοντάς το τέλεια στη μορφή που καθορίζεται για τη συγκεκριμένη διεπαφή(ες) βίντεο, δύο θύρες HDMI στην περίπτωση του Pi 400. Διαθέτει επίσης μια τεράστια μνήμη (4 GB), στην οποία αποθηκεύονται τα δεδομένα εξόδου βίντεο.

Για να το κατανοήσουμε καλύτερα αυτό, πρέπει να εξετάσουμε ορισμένες βασικές αρχές της εξόδου βίντεο από υπολογιστή:

Προβολή και μετάδοση βίντεο

Βλέπουμε την εμφάνιση στην οθόνη "αμέσως". Ο εγκέφαλός μας διαθέτει μαζικά παράλληλη καλωδίωση, κατά την οποία προσλαμβάνει πληροφορίες από όλα τα διαθέσιμα κύτταρα του αμφιβληστροειδούς ταυτόχρονα (κωνικά κύτταρα και ραβδωτά κύτταρα).

μια γάτα με μια πεταλούδα, ένα παράδειγμα αυτού που θέλουμε να δείξουμε στους χρήστες μας.
Φωτογραφία από Karina Vorozheeva στο Unsplash

(* ο μηχανισμός μετάδοσης στον εγκέφαλο ενσωματώνει τις πληροφορίες σε πολλά κύτταρα του αμφιβληστροειδούς, αλλά το γεγονός παραμένει ότι πολλές πληροφορίες μεταδίδονται παράλληλα. Κοιτάξτε διπολικά κύτταρα αν ενδιαφέρεστε να μάθετε περισσότερα)

Ο εγκέφαλος, ωστόσο, έχει καθυστερήσεις - δεν είναι σε θέση να επιλύσει αλλαγές σε οπτικά ερεθίσματα ταχύτερα από 13 ms. (δηλαδή περίπου 1 στα 75 καρέ ανά δευτερόλεπτο).

Για εμάς αυτό σημαίνει ότι αν θέλουμε να προβάλουμε μια πραγματικά ομαλή κίνηση, πρέπει να προβάλλουμε περίπου 60 διαφορετικές στατικές εικόνες ανά δευτερόλεπτο. Ο εγκέφαλός μας θα ερμηνεύσει αυτές τις στατικές εικόνες ως ομαλή και ζωντανή αναπαραγωγή.

Συνήθως, θέλουμε αυτές οι εικόνες να είναι έγχρωμες.

Έχουμε τρεις διαφορετικούς φωτοϋποδοχείς για το χρώμα, οπότε η οθόνη εμφανίζει μόνο αυτά τα τρία διαφορετικά χρώματα με διαφορετική φωτεινότητα. Και πάλι, ο εγκέφαλός μας θα συνθέσει τα ενδιάμεσα χρώματα από αυτές τις πληροφορίες που λαμβάνει. (Σε μια δευτερεύουσα σημείωση, μοβ δεν υπάρχει πραγματικά ως δικό του μήκος κύματος - είναι ένα μείγμα κόκκινου και μπλε).

Υπάρχουν τρία βασικά χρώματα:

  • κόκκινο
  • πράσινο
  • μπλε

Μαζί, είναι γνωστά ως RGB. Όταν τα προσθέσετε και τα τρία, θα έχετε λευκό χρώμα. Προσθέτοντας κόκκινο σε πράσινο προκύπτει κίτρινο, προσθέτοντας πράσινο σε μπλε προκύπτει κυανό, προσθέτοντας μπλε σε κόκκινο προκύπτει ματζέντα.

Έτσι, αυτό που πραγματικά θέλουμε να βγάλουμε είναι:

  • τρία διαφορετικά χρώματα,
  • το καθένα με διαφορετική τιμή φωτεινότητας
  • ιδανικά περίπου 60 διαφορετικές τιμές ανά δευτερόλεπτο (60 Hz)
  • ορισμένη ανάλυση οθόνης - π.χ. 640 x 480

Ας υπολογίσουμε πόσα δεδομένα είναι αυτά ανά δευτερόλεπτο:

  • 3 χρώματα
  • x 8 bit βάθος χρώματος
  • x 60
  • x 640 x 480

= 442.368.000 bits ανά δευτερόλεπτο = περίπου. 422 MBit/s

(Σκεφτείτε ότι, για παράδειγμα, η διεπαφή USB v1.1 στο Pico έχει περίπου 10 Mbit/s - περίπου 40 φορές μικρότερη απόδοση!)

Για την έξοδο αυτών των πληροφοριών, ιδανικά θα θέλατε επίσης να κρατάτε αυτές τις πληροφορίες ως εικόνα bitmap στη μνήμη RAM - ένα μέρος της εφαρμογής σας θα ενημερώνει την εικόνα στη μνήμη RAM, ενώ ένα άλλο θα φροντίζει για την παράδοση των δεδομένων σε μορφή που μπορεί να επεξεργαστεί μια οθόνη. Αυτή πρέπει να είναι η RAM, δεδομένου ότι λειτουργούμε σε υψηλές ταχύτητες και πρέπει να μπορούμε να διαβάζουμε αξιόπιστα και με μικρές καθυστερήσεις - κάτι που η μνήμη Flash δεν θα παρείχε.

Ας υπολογίσουμε πόση μνήμη RAM χρειαζόμαστε:

  • 640 x 480 (ανάλυση)
  • x 3 (χρώματα)
  • x 8 bit (βάθος χρώματος)

= 7372800 bits = 900 kBytes (σημ. 1 Byte = 8 Bits)

Ενώ 900 kBytes χωράνε πολλές φορές στη μνήμη RAM ενός Raspberry Pi 400, το Pico διαθέτει μόνο 264KB RAM.

Όπως βλέπετε, θα πρέπει να μειώσουμε κάποιες από τις παραμέτρους (π.χ. ανάλυση, βάθος χρώματος, ...) αν θέλουμε να χωρέσουμε ένα bitmap στη μνήμη RAM, ή θα πρέπει να σκεφτούμε κάποιες έξυπνες ιδέες για το πώς θα το κάνουμε να λειτουργήσει χωρίς να αποθηκεύσουμε τα πάντα!

Το RP2040 PIO της Pico επιτρέπει την έξοδο δεδομένων βίντεο

Τέλος, ενώ το Raspberry Pi 400 και άλλα μοντέλα Raspberry Pi διαθέτουν ειδικά κυκλώματα υλικού για την επεξεργασία όλων αυτών των πληροφοριών και την έξοδό τους με αξιόπιστο τρόπο, το Pico δεν διαθέτει ειδικά κυκλώματα αποκλειστικά για την έξοδο βίντεο.

Αλλά έχει ένα κόλπο στο μανίκι του! Το RP2040 υποστηρίζει PIO (προγραμματιζόμενο IO). Το PIO είναι αφιερωμένο στην εξομοίωση διαφορετικών διεπαφών με ακριβή χρονισμό και είναι πολύ πολύ ισχυρό! Μπορεί να προγραμματιστεί να διαβάζει από τη μνήμη RAM και να εξάγει με υψηλές ταχύτητες.

Θα χρησιμοποιήσουμε το PIO για την έξοδο βίντεο σε κάποιες ακίδες GPIO και θα χρησιμοποιήσουμε κάποια πρόσθετα κυκλώματα (αντιστάσεις) για να φέρουμε το σήμα στην επιθυμητή κατάσταση, ανάλογα με τη διεπαφή εξόδου βίντεο που θέλουμε να συνδέσουμε το Pico.

Ιστορικό μορφής εξόδου βίντεο

Πριν περάσουμε στην ουσία του τρόπου με τον οποίο μπορείτε να προσθέσετε μια έξοδο βίντεο στο Raspberry Pi Pico, ας ρίξουμε μια ματιά στην ιστορία των μορφών εξόδου βίντεο.

Όπως έχει ήδη συζητηθεί, το ανθρώπινο μάτι δεν είναι σε θέση να ανιχνεύσει αλλαγές σε εικόνες ταχύτερα από περίπου 13 ms. Συνεπώς, μια από τις πρώτες προσεγγίσεις για την κατασκευή οθονών υπολογιστών ήταν η CRT (καθοδικός σωλήνας ακτίνων) οθόνη.

Η οθόνη CRT χρησιμοποιεί διάφορες ακτίνες (2) για να γράψει την εικόνα στην οθόνη γραμμή προς γραμμή (4), η (5) δείχνει ένα κοντινό πλάνο των πολύχρωμων φωσφόρων που δέχονται μεμονωμένα τις διάφορες ακτίνες. CC BY-SA 3.0 Peo~commonswiki 

Η CRT διαθέτει τρία πιστόλια ακτίνων, τα οποία σαρώνουν εικονοστοιχείο προς εικονοστοιχείο, γραμμή προς γραμμή. (και στη συνέχεια χρειάζονται κάποιο χρόνο για να επιστρέψουν στο σημείο εκκίνησης). Η οθόνη έχει πολύχρωμους φωσφόρους, οι οποίοι θα συνεχίσουν να εκπέμπουν φως για λίγο μετά το πέρασμα της ακτίνας. Στην επόμενη σάρωση του όπλου ακτίνων πάνω από το συγκεκριμένο εικονοστοιχείο η ένταση της ακτίνας μπορεί να έχει αλλάξει, πράγμα που θα δούμε ως ένα πιο σκούρο εικονοστοιχείο. Ο εγκέφαλός μας συγχωνεύει τα γειτονικά πολύχρωμα εικονοστοιχεία φωσφόρου σε ένα εικονοστοιχείο και δεν είναι σε θέση να παρατηρήσει τις αλλαγές στη φωτεινότητα μεταξύ των σαρώσεων της ακτίνας.

Κοντινό πλάνο CRT, όπου φαίνονται οι πολύχρωμες κουκίδες φωσφόρου. από: Hubert jelen

Με αυτόν τον τρόπο δημιουργείται η ψευδαίσθηση μιας κινούμενης εικόνας.

Στην πραγματικότητα, δεν χρειάζεται να υπάρχουν όλα τα δεδομένα στην αρχή της εικόνας - αλλά μόνο η τρέχουσα τιμή της ευκρίνειας των εικονοστοιχείων. Η πυκνότητα της ακτίνας θα τροποποιηθεί σύμφωνα με αυτό. Μπορούμε να χρησιμοποιήσουμε ένα αναλογικό σήμα για αυτό - για παράδειγμα, αυξάνοντας την τάση θα αυξηθεί η φωτεινότητα.

Χρειαζόμαστε τρία διαφορετικά καλώδια για τα διαφορετικά χρώματα (για να οδηγούμε κάθε όπλο ακτίνων ξεχωριστά), και πρέπει να έχουμε έναν τρόπο να ενημερώνουμε την οθόνη πότε πρέπει να ξεκινήσει μια νέα γραμμή και πότε πρέπει να ξεκινήσει μια νέα εικόνα (όταν έχουν εμφανιστεί όλες οι γραμμές).

VGA (συστοιχία γραφικών βίντεο)

Η VGA σχεδιάστηκε με γνώμονα αυτές τις οθόνες CRT. Εξακολουθεί να είναι αρκετά διαδεδομένη ως είσοδος σε οθόνες, παρόλο που γίνεται όλο και πιο παρωχημένη καθώς μεταβαίνουμε σε πλήρως ψηφιακή μετάδοση (περισσότερα σχετικά με αυτό αργότερα).

Αυτό είναι επίσης το πιο εύκολο πρότυπο εξόδου βίντεο για να λειτουργήσει το Pico.

Δίπλα σε μια προδιαγραφή (με προεπιλεγμένους τρόπους ανάλυσης), προσδιόριζε ένα βύσμα, το βύσμα VGA:

Θύρα VGA- φωτογραφία από Duncan Lithgow

Έχει 15 ακίδες:

  1. RED (κόκκινο βίντεο)
  2. GREEN (πράσινο βίντεο)
  3. BLUE (μπλε βίντεο)
  4. ID2/RES (δεσμευμένο)
  5. GND (Γείωση HSync)
  6. RED_RTN (κόκκινη επιστροφή, αναλογική γείωση για το κόκκινο)
  7. GREEN_RTN (Πράσινη επιστροφή, αναλογική γείωση για το πράσινο)
  8. BLUE_RTN (Μπλε επιστροφή, αναλογική γείωση για το μπλε)
  9. KEY/PWR (+5 V DC τροφοδοτεί το τσιπ EDID EEPROM σε ορισμένες οθόνες)
  10. GND (Γείωση VSync, DDC)
  11. ID0/RES (δεσμευμένο)
  12. ID1/SDA (δεδομένα I2C από το DDC2)
  13. HSync (Οριζόντιος συγχρονισμός)
  14. VSync (Κάθετος συγχρονισμός)
  15. ID3/SCL (ρολόι I2C από το DDC2)

Σημείωση: Τα καλώδια VGA μπορούν να υποστηρίζουν διαφορετικές αναλύσεις, βάθη χρώματος και συχνότητες ανανέωσης, ενώ η λέξη "VGA" όταν αναφέρεται στην ανάλυση συνήθως σημαίνει 640 x 480.

Όπως βλέπετε, υπάρχουν τρία καλώδια που μεταφέρουν τα δεδομένα εικόνας, ένα για κάθε χρώμα. Το σήμα μεταδίδεται με μέγιστη τάση αιχμής 0,7 V. Τα σήματα που μεταδίδονται για τα χρώματα είναι αναλογικής φύσης - υψηλότερες τάσεις αυξάνουν τη φωτεινότητα, μια τάση 0 σημαίνει ότι το εικονοστοιχείο είναι σκοτεινό / απενεργοποιημένο.

Λειτουργία της εξόδου VGA στο Pico

Αυτό σημαίνει ότι το Pico, με την ψηφιακή του έξοδο 3,3V έχει αρκετά υψηλές τάσεις ώστε να μπορεί να οδηγήσει αυτές τις ακίδες RGB στο καλώδιο VGA (το οποίο αναμένει τάσεις 0-0,7V). Στην πραγματικότητα πρέπει να μειώσουμε την τάση χρησιμοποιώντας αντιστάσεις.

Μπορούμε να κατασκευάσουμε έναν απλό DAC (ψηφιακός αναλογικός μετατροπέας) συνδυάζοντας διάφορες αντιστάσεις και ακίδες GPIO. Ανάλογα με το συνδυασμό των ακροδεκτών GPIO που είναι ενεργοί σε κάθε δεδομένη στιγμή, έχουμε διαφορετικά επίπεδα τάσης (= επίπεδα φωτεινότητας):

Ένα απλό VGA DAC, εικόνα από το "Hardware design with the RP2040"

Όπως μπορείτε να δείτε στην παραπάνω εικόνα, πέντε GPIOs (0 -4) οδηγούν ένα κανάλι (κόκκινο σε αυτή την περίπτωση), το οποίο μας δίνει βάθος πέντε bit. Οι αντιστάσεις είναι σταθμισμένες 1:2:4:8:16, για παράδειγμα το λιγότερο σημαντικό bit (LSB) του κόκκινου έχει μια αντίσταση 8,06K.

Όταν προσπαθείτε να κατασκευάσετε αυτό το κύκλωμα, θα πρέπει να επιλέξετε 1 αντίσταση ανοχής % για να πάρετε μια καλή εικόνα.

Ανατρέξτε στην ενότητα "Σχεδιασμός υλικού με το RP2040" για να καταλάβετε πώς υπολογίστηκαν οι τιμές των αντιστάσεων. Εν ολίγοις, αν τα οδηγήσουμε όλα ταυτόχρονα, θα έχουμε μια τάση 0,74 V, η οποία είναι εντάξει για τους σκοπούς μας.

Πιο συγκεκριμένα, αυτό που προτείνει αυτός ο σχεδιασμός αναφοράς είναι η υποστήριξη μιας ευρέως χρησιμοποιούμενης μορφής δεδομένων RGB 16 bit (RGB-565), η οποία χρησιμοποιεί 5 bit για το κόκκινο και το μπλε και 6 για το πράσινο. Μπορούμε να μειώσουμε την πραγματική φυσική έξοδο στο πράσινο σε 5 ακίδες GPIO όπως και για τα άλλα χρώματα, για να εξοικονομήσουμε μία ακίδα.

Επιπλέον, απαιτούνται 2 ακόμη ακροδέκτες για τον οριζόντιο και κατακόρυφο χρονισμό του σβησίματος (HSYNC και VSYNC).

Έτσι έχουμε συνολικά 17 ακίδες GPIO για να οδηγήσουμε μια έξοδο VGA. Ευτυχώς, το Pico διαθέτει 26 διαθέσιμες ακίδες GPIO, οι οποίες μας επιτρέπουν να οδηγήσουμε την έξοδο VGA.

Όπως αναφέρθηκε προηγουμένως, το Pico είναι επίσης σε θέση να οδηγήσει αυτές τις ακίδες στις απαραίτητες συχνότητες και με ακριβή χρονισμό, χάρη στη λειτουργία PIO του RP2040 (προγραμματιζόμενο I/O).

Υλικό εξόδου βίντεο Raspberry Pi Pico VGA

Raspberry Pi Pico VGA, κάρτα SD & κάρτα ήχου Demo Board - εικόνα από το εγχειρίδιο Hardware Design with the RP2040

Το Raspberry Pi σχεδίασε και έδωσε στη δημοσιότητα μια πλακέτα φορέα για το Pico, η οποία παρουσιάζει διάφορα χαρακτηριστικά:

  • Έξοδος VGA
  • κουμπιά
  • Υποδοχή microSD
  • έξοδοι ήχου (αναλογική PWM, ψηφιακή I2S)

Αγοράστε την πλακέτα Pico VGA / Audio / microSD

Εμείς (buyzero.de) βρίσκονται αυτή τη στιγμή στη διαδικασία κατασκευής και συναρμολόγησης αυτής της πλακέτας αναφοράς για εμάς. Επικοινωνήστε μαζί μας αν θέλετε να ειδοποιηθείτε, μόλις η πλακέτα μπορεί να αγοραστεί!

Το Η πλακέτα Pico VGA είναι τώρα διαθέσιμη για αγορά από εμάς, περιορισμένο αρχικό απόθεμα!

Εν τω μεταξύ, η Pimoroni έχει επίσης δημιουργήσει μια έκδοση αυτού του πίνακα, την ονομάζουν Βάση επίδειξης Pimoroni Pico VGA Demo.

Παρενθετική σημείωση: κάθε ακίδα από τις 15 ακίδες εξόδου rgb θα πρέπει να οδηγείται σε περίπου 17,58 Mbit/s, που εξακολουθεί να είναι ένας εντυπωσιακός - αλλά πολύ πιο διαχειρίσιμος αριθμός!

Λογισμικό που απαιτείται για την οδήγηση της εξόδου VGA

Εφόσον δουλεύουμε στο Pico, δεν υπάρχουν "οδηγοί γραφικών" που μπορούμε απλά να εγκαταστήσουμε. Πρέπει να γράψουμε τον κώδικα μόνοι μας... ή όχι 🙂 .

Ευτυχώς, οι άνθρωποι που σχεδίασαν την πλακέτα υλικού για εμάς παρέχουν ήδη κάποιο κώδικα που μπορούμε να χρησιμοποιήσουμε, έτσι ώστε να μπορούμε να επικεντρωθούμε στο έργο μας.

Παράδειγμα κώδικα που μπορείτε να χρησιμοποιήσετε μπορείτε να βρείτε στο pico-playground Repository:

Σε αυτό το αποθετήριο, υπάρχει ένα απλό πρόγραμμα αναπαραγωγής ταινιών που ονομάζεται ποπ κορν (που αναπαράγει ταινίες σε προσαρμοσμένη μορφή). A big buck bunny, 1.6 GB σε μέγεθος μπορεί να κατεβάσει εδώ. Σημειώστε ότι πρόκειται για ακατέργαστες εικόνες δίσκου που πρέπει να εγγραφούν σε μια κάρτα SD - αυτό το παράδειγμα προϋποθέτει ότι έχετε την πλακέτα επίδειξης VGA, η οποία διαθέτει υποδοχή SD. Οδηγίες για μετατροπή ταινιών δίνονται επίσης.

Ο κώδικας χρησιμοποιεί το pico_scanvideo βιβλιοθήκη (pico/scanvideo.h) από το αρχείο pico_extras αποθετήριο. Ρίξτε επίσης μια ματιά σε αυτό το αποθετήριο για δείγματα κώδικα ήχου!

  • pico_scanvideo - περιλαμβάνει εκτενή τεκμηρίωση!

Το API εξάγει παράλληλα δεδομένα RGB και σήμα συγχρονισμού σε ακίδες για DPI VGA (χρησιμοποιώντας DACs με αντιστάσεις, όπως περιγράφεται παραπάνω).

Ένα ωραίο σημείο:

  • Το προεπιλεγμένο πρόγραμμα σάρωσης PIO δέχεται δεδομένα κωδικοποιημένα με μήκος εκτέλεσης - αυτό σημαίνει ότι μπορείτε να εξοικονομήσετε μνήμη RAM για να δημιουργήσετε επίπεδες χρωματικές περιοχές (σκέφτομαι παιχνίδια εδώ!)

Σε γενικές γραμμές θα θέλατε να χρησιμοποιήσετε το Βιβλιοθήκη pico_scanvideo αντί της ανάπτυξης κώδικα εξόδου VGA από το μηδέν 🙂

καλή πρακτική κωδικοποίησης

Περισσότερα demo

Ελέγξτε το Κατάλογος scanvideo του αποθετηρίου pico-playground:

  • mandelbrot: μια γεννήτρια mandelbrot χρησιμοποιώντας ένα 320x240x16 framebuffer
  • sprite_demo: Τα κεφάλια του Eben αναπηδούν (βίντεο στην κορυφή της σελίδας μας!)
  • test_pattern: Εμφάνιση χρωματικών ράβδων

Χρήση της πλακέτας VGA

Πρέπει να περάσετε μια πρόσθετη παράμετρο στο CMake κατά τη μεταγλώττιση:

-DPICO_BOARD=vgaboard

TBD: Προσθήκη οδηγών βήμα προς βήμα

DVI: DVI: Ψηφιακή οπτική διεπαφή

Η τεχνολογία προχωράει. Η ζωή προχωράει. Οι CRT έγιναν όλο και πιο παρωχημένες, αντικαταστάθηκαν από πιο σύγχρονες επίπεδες οθόνες, οι οποίες διαθέτουν ψηφιακές διεπαφές. Δεν υπάρχουν κινούμενες ακτίνες, μόνο εικονοστοιχεία.

Για ένα διάστημα, τα σήματα συνέχισαν να είναι αναλογικά - αλλά αυτό δεν είναι πολύ επιθυμητό, αφού πρέπει να πάρουμε κάτι ψηφιακό, να το μετατρέψουμε σε κάτι αναλογικό και στη συνέχεια να το μετατρέψουμε ξανά σε κάτι ψηφιακό. Η εικόνα θα είναι λιγότερο ακριβής, και έχουμε πρόσθετα κυκλώματα τα οποία θα μπορούσαμε να αποβάλουμε.

Εισάγετε το DVI. Έξυπνα προσέφερε μια επιλογή για τη μετάδοση και αναλογικών σημάτων, ώστε να μπορούν να κατασκευαστούν απλοί προσαρμογείς/καλώδια DVI σε VGA. Φυσικά, η κάρτα γραφικών θα έπρεπε να εξάγει τόσο αναλογικά όσο και ψηφιακά δεδομένα. Αυτό όμως βοήθησε στην αποδοχή του προτύπου και στην ευρεία διάδοσή του.

Μας ενδιαφέρουν τα ψηφιακά σήματα εδώ (DVI-D), καθώς θα θέλαμε να τα κάνουμε bit-bang από το Raspberry Pi Pico.

Με το DVI-D, τα δεδομένα εικόνας μεταδίδονται με σειριακό τρόπο.

Μια σύνδεση "μονής σύνδεσης" (η πιο βασική) DVI αποτελείται από τέσσερα τις λεγόμενες συνδέσεις TMDS (ελαχιστοποιημένη διαφορική σηματοδότηση μετάβασης):

  • κόκκινο
  • πράσινο
  • μπλε
  • ρολόι pixel

Η διαφορική σηματοδότηση χρησιμοποιείται για την ελαχιστοποίηση της παρεμβολής (δεδομένου ότι

Έχουμε συνολικά 24 bit ανά εικονοστοιχείο (8 bit x 3 χρώματα) και κωδικοποιούμε τα δεδομένα χρησιμοποιώντας κωδικοποίηση 8b10b (8 bit αντιστοιχίζονται σε σύμβολα 10 bit στην πραγματική φυσική γραμμή για να επιτευχθεί ισορροπία DC μεταξύ άλλων).

Το DVI αντιμετωπίζει τα εικονοστοιχεία παρόμοια με το VGA: τα πάντα μεταδίδονται εκ νέου κάθε φορά που η εικόνα "ξεκινά" ξανά και τα δεδομένα είναι χρονισμένα με ακρίβεια. Αυτό είναι σαν μια τηλεφωνική γραμμή, όπου η γραμμή χρησιμοποιείται συνεχώς όταν δύο άνθρωποι μιλούν.

Σημείωση: σε αντίθεση με αυτό, Το DisplayPort αντιμετωπίζει τα δεδομένα ως πακέτα - το οποίο έχει μια σειρά από πλεονεκτήματα.

Σε αντίθεση με το παράδειγμα VGA που συζητήθηκε παραπάνω, δεδομένου ότι τα δεδομένα αποστέλλονται ψηφιακά, αντί για αναλογικές τιμές φωτεινότητας, αυτό σημαίνει πολύ μεγαλύτερο όγκο δεδομένων.

Luke Wren, ένας μηχανικός του Raspberry Pi, πίστευε ότι ο RP2040 (στην καρδιά του Pico) θα ήταν επίσης ικανός να οδηγήσει την έξοδο DVI, και πάλι χρησιμοποιώντας PIO.

Το αποτέλεσμα είναι η Αποθετήριο PicoDVI & έργα, και η Κάλτσα Pico DVI.

Ο Luke Wren υπολόγισε ότι περίπου 252 Mbps σειριακά δεδομένα πρέπει να οδηγείται μέσω των ψηφιακών μαξιλαριών GPIO - διαφορικό σειριακό, το οποίο εξομοιώνεται με δύο μαξιλάρια μονής κατεύθυνσης.

dc_coupling.png
Πηγή: Αποθετήριο του Luke Wren (με άδεια BSD-3)

Παραπάνω βλέπετε το κύκλωμα που χρησιμοποιείται για την οδήγηση της εξόδου DVI (χρησιμοποιώντας ένα βύσμα HDMI, περισσότερα σχετικά με αυτό παρακάτω) - είναι απλά αρκετές 270 Ohm αντιστάσεις.

Ο Luke Wren προχώρησε ακόμη περισσότερο και πρόσθεσε διπλή έξοδο DVI στη διάταξη PicoDVI μέσω μιας πλακέτας plugin:

two_displays.jpg
Luke Wren αποδεικνύοντας έξοδος σε δύο οθόνες χρησιμοποιώντας το δικό του σχέδιο

HDMI: συμβατό προς τα κάτω με DVI

Το HDMI είναι η επόμενη εξέλιξη των συνδέσμων (και ανταγωνίζεται το DisplayPort). Είναι πλήρως συμβατό προς τα κάτω με τα ψηφιακά σήματα DVI - έτσι μπορείτε να έχετε απλούς, αμιγώς παθητικούς μετατροπείς DVI / HDMI.

Κάλτσα Pico DVI

Το Pico DVI Sock είναι μια εύκολη και χαμηλού κόστους λύση για να προσθέσετε ψηφιακή έξοδο βίντεο στο Pi σας. Έχει σχεδιαστεί από τον Luke Wren (δείτε την περιγραφή παραπάνω). Πρόκειται για μια έξοδο DVI με υποδοχή HDMI. Καθώς το HDMI είναι συμβατό προς τα κάτω με το DVI, μπορείτε να χρησιμοποιήσετε ένα καλώδιο HDMI για να συνδέσετε το Pico σας σε οθόνες HDMI:

συγκόλληση_04.jpg
Φωτογραφία από Luke Wren, Άδεια CC0-1.0

Προγραμματισμός του Pico DVI Sock

TL;DR

Μπορείτε να κατεβάσετε το picodvi-test.zip και ξεκινήστε να παίζετε με το παράδειγμα .UF2 που μεταγλωττίζεται σε αυτό. Περιλαμβάνει επίσης ένα PDF που σας δίνει έναν οδηγό βήμα προς βήμα.

Παραδείγματα κώδικα

Ο Luke Wren παρέχει παραδείγματα κώδικα στο αποθετήριο του. Ωστόσο, για να τα χρησιμοποιήσετε με το Pico DVI Sock, θα πρέπει να ορίσετε τη σωστή ρύθμιση παραμέτρων για χρήση. Θα σας δείξουμε τον τρόπο σε αυτό το μίνι εκπαιδευτικό πρόγραμμα.

Προϋποθέσεις εγκατάστασης

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

Κλωνοποιήστε το PicoDVI repo από τον 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

Για να χρησιμοποιήσετε τα παραδείγματα κώδικα με το Pico DVI Sock, θα πρέπει να ορίσετε το σωστή διαμόρφωση ακροδεκτών για χρήση. Προσθέστε την ακόλουθη γραμμή στο common_dvi_pin_configs.h απλά πριν από το το πρώτο #ifndef

#define DEFAULT_DVI_SERIAL_CONFIG pico_sock_cfg

Δημιουργία των παραδειγμάτων

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

Εγκαταστήστε τα παραδείγματα στο Pico

Τα κατασκευασμένα παραδείγματα θα βρίσκονται στο φάκελο software/build/apps.

Πατήστε και κρατήστε πατημένο το πλήκτρο BOOTSEL στο Pico και, στη συνέχεια, συνδέστε την πλακέτα στον υπολογιστή σας χρησιμοποιώντας τον σύνδεσμο microUSB. Αντιγράψτε και επικολλήστε το κατάλληλο αρχείο .uf2 που θέλετε να δοκιμάσετε - π.χ. sprite_bounce.uf2 - στο Pico.

Το Pico θα επανεκκινήσει αυτόματα και θα πρέπει να μπορείτε να δείτε την έξοδο στην υποδοχή HDMI (θυμηθείτε ότι στην πραγματικότητα είναι DVI :-)).

Λήψη

Μπορείτε να κατεβάσετε το picodvi-test.zip και ξεκινήστε να παίζετε με το παράδειγμα .UF2 που μεταγλωττίζεται σε αυτό. Περιλαμβάνει επίσης ένα PDF που σας δίνει έναν οδηγό βήμα προς βήμα. Εάν το sprite_bounce.uf2 παράδειγμα δεν λειτουργεί για εσάς, δοκιμάστε μια άλλη οθόνη - ενδεχομένως δεν είναι όλες οι οθόνες συμβατές με αυτή την έξοδο βίντεο.

Αν έχετε φτάσει ως εδώ, πείτε μας στα σχόλια πώς δούλεψε για εσάς και τι ιδέες για έργα έχετε σκεφτεί!

Αγοράστε μια κάλτσα Pico DVI

Η αδελφή μας σελίδα, buyzero.de, διαθέτει το Κάλτσα Pico DVI σε δύο παραλλαγές:

Σχόλιο: Οθόνες DBI & DSI

Ως δευτερεύουσα σημείωση, το αποθετήριο Raspberry Pi Pico Extras έχει καταλόγους θέσης για DBI (οθόνες MIPI DBI 16 bit - με τα δεδομένα να περνούν παράλληλα) και DSI (σειριακές οθόνες MIPI), οπότε μπορεί να δούμε υποστήριξη και για αυτές τις οθόνες στο μέλλον.

20 Σχόλια

  1. VanTa στις Μάρτιος 20, 2021 στις 8:27 πμ

    Κάποιο παράδειγμα σύνθετης εξόδου με genlock;

    • PiCaptain στις Απρίλιος 6, 2021 στις 2:47 μμ

      Νομίζω ότι η σύνθετη έξοδος θα πρέπει να είναι δυνατή, αλλά δεν έχω δει τίποτα στην άγρια φύση γι' αυτό, ακόμα.

  2. Miroslav Nemecek στις Ιούνιος 10, 2021 στις 10:24 πμ

    Ως εναλλακτική λύση στο scanvideo, έχω υλοποιήσει μια άλλη βιβλιοθήκη VGA/TV για το Raspberry Pico - 'PicoVGA', η οποία νομίζω ότι είναι πιο εύκολη στη χρήση: http://www.breatharian.eu/hw/picovga/index_en.html

    • raspi berry στις Ιούλιος 1, 2021 στις 5:20 μμ

      Σας ευχαριστούμε που μοιραστήκατε τις πληροφορίες για τη βιβλιοθήκη σας!

  3. Ashesh Rai στις Ιούνιος 10, 2021 στις 5:39 μμ

    Μπορεί αυτό το HDMI να χρησιμοποιηθεί ως ΕΙΣΟΔΟΣ και να επεξεργαστεί τα δεδομένα.

    • raspi berry στις Ιούλιος 1, 2021 στις 5:20 μμ

      με τον τρόπο που έχει προγραμματιστεί, και δεδομένου ότι οι αντιστάσεις ενεργούν για να περιορίσουν το σήμα εξόδου του Raspberry Pi - όχι.
      ενδεχομένως θα μπορούσατε να χρησιμοποιήσετε μια προσαρμογή του σχεδίου, με κάτι που ενισχύει το επίπεδο του σήματος αντί να το μειώνει / και φυσικά προσαρμοσμένο κώδικα για τις εξόδους ώστε να λειτουργούν ως είσοδοι, για να μπορείτε να επεξεργάζεστε τα δεδομένα βίντεο μέσα στο Pico.

  4. Lorencz στις Ιούνιος 25, 2021 στις 2:25 μμ

    Μερικές πρακτικές συμβουλές όμως. Χάρη στην λοταρία του πυριτίου, η συγκεκριμένη μονάδα σας μπορεί να μην υπερχρονίζει αναλογικά την gpu και το μέρος της cpu το ίδιο επίσης. Έτσι, αν δεν χρειάζεστε ταχύτερα γραφικά, μην κάνετε overclock την GPU της. Έτσι αυξάνονται οι πιθανότητες να κάνετε υψηλότερο overclock και να έχετε ένα σταθερό σύστημα. Επίσης, η χαμηλότερη κατανάλωση ενέργειας και το μικρότερο ρεύμα τροφοδοσίας σημαίνει καλύτερη σταθερότητα. Τα Raspberry Pis με 4 πυρήνες CPU μπορεί να χτυπήσουν τοίχο στην παροχή ενέργειας όταν φορτώνονται με ενεργούς και τους 4 πυρήνες. Το ενσωματωμένο PMIC (ολοκληρωμένο κύκλωμα διαχείρισης ισχύος) ενδέχεται να μην παρέχει το απαιτούμενο ρεύμα για όλους τους πυρήνες και να απενεργοποιηθεί για μικρό χρονικό διάστημα, επανεκκινώντας έτσι το Pi. Ψύξτε και το PMIC. Μην υπερφορτίζετε στο μέγιστο, αν χρειάζεστε φορτίο για όλους τους πυρήνες (μεταγλώττιση πυρήνα, βαριά επεξεργασία αριθμών κ.λπ.). Εδώ έχουμε ένα RPI4 που μπορεί να τρέξει στα 1850MHz με όλους τους πυρήνες ενεργούς με over_voltage=2, αλλά με υψηλότερη over_voltage=3, κάνει επανεκκίνηση όταν φορτίζεται. Υψηλότερη over_voltage σημαίνει επίσης υψηλότερο ρεύμα και το κύκλωμα PMIC έχει περιορισμένο ρεύμα εξόδου. Όσο πιο ζεστό είναι το PMIC και τα επαγωγικά που το περιβάλλουν, τόσο λιγότερο ρεύμα μπορεί να παρέχει. Αυτός είναι ένας περιορισμός του τσιπ PMIC και όχι του σετ τσιπ BCM. Έτσι, αν αντιμετωπίζετε περιστασιακές επανεκκινήσεις υπό μεγάλο φορτίο, μπορεί να φταίει η υπερθέρμανση του PMIC. Αν το Pi σας κλειδώσει, δεν θα είναι αυτό το συγκεκριμένο πρόβλημα, αλλά ίσως η απώλεια λοταρίας πυριτίου. Το underclocking ενός τμήματος GPU μπορεί να είναι ένας ενδιαφέρων τρόπος για την αύξηση της δυνατότητας overclocking (πιο σταθερό σύστημα), αλλά AFAIK, τα παλαιότερα Raspberry Pi είχαν L2 cache συνδεδεμένη με την GPU, οπότε το underclocking μπορεί να επιβραδύνει και την CPU. Έχω καταγράψει πώς θερμαίνεται το PMIC του Raspberry Pi 4 - όλα τα άλλα τσιπ ψύχονται απευθείας σε ψύκτρα. Η άποψη είναι από την κάτω πλευρά, δηλαδή βλέπετε τη θερμαινόμενη πλακέτα. Στην κάτω αριστερή γωνία βρίσκεται το PMIC.

    • raspi berry στις Ιούλιος 1, 2021 στις 5:18 μμ

      Σας ευχαριστώ πολύ για αυτές τις πρακτικές συμβουλές!

  5. Bing στις Οκτώβριος 23, 2021 στις 7:20 πμ

    Γεια σας,
    Εγώ είμαι noob εδώ.. Μπορεί κάποιος να δώσει ένα σχεδιάγραμμα για μια έξοδο οθόνης cvbs. Και τυχόν απαραίτητες αλλαγές στον πηγαίο κώδικα;

    • PiCaptain στις Οκτώβριος 23, 2021 στις 1:40 μμ

      Συγγνώμη, δεν έχω ιδέα για τα cvbs

  6. farooqkz στις Νοέμβριος 8, 2021 στις 8:30 πμ

    Γεια σας
    Ευχαριστώ για την ωραία ανάρτηση. Το διάβασα από την αρχή μέχρι σχεδόν το τέλος του 😉.
    Ωστόσο, έχω κάποιες ανόητες ερωτήσεις:
    1. Το RPi Pico έχει PWM. Είναι δυνατόν να χρησιμοποιηθεί ένας μόνο ακροδέκτης με PWM για την έξοδο αναλογικού σήματος που να τροφοδοτεί τις ακίδες VGA; έτσι θα χρησιμοποιηθούν λιγότερες ακίδες. Επίσης, απλούστερα και μικρά κυκλώματα.
    2. Είναι δυνατόν να λάβετε αναλογική έξοδο AV από το RPi Pico χρησιμοποιώντας PWM, ίσως; Νομίζω ότι οι περισσότερες τηλεοράσεις το υποστηρίζουν αυτό. Ίσως χρησιμοποιώντας μια μονάδα όπως https://thecaferobot.com/store/pub/media/catalog/product/cache/14d1897c7f1bd4f35a7de1523300314a/l/c/lcd-01-057-1.jpg διαθέσιμο σε ένα τοπικό κατάστημα στο οποίο έχω πρόσβαση. Ωστόσο, η εικόνα που έστειλα είναι μια μονάδα για το Arduino, αλλά θα πρέπει να είναι δυνατή η χρήση της και με το Pico, υποθέτω.
    3. Εάν κάποιος ήθελε να χρησιμοποιήσει VGA ή DVI σε συνδυασμό με το Pico, είναι δυνατόν να μην χρησιμοποιήσει αυτές τις βοηθητικές πλακέτες VGA ή DVI; Επειδή αυτές δεν είναι διαθέσιμες στην περιοχή μου για να αγοράσω μία και οι ικανότητές μου δεν είναι αρκετά καλές για να δημιουργήσω μία μόνη μου.

    • raspi berry στις Νοέμβριος 9, 2021 στις 10:29 πμ

      1. Τα PWM Pins πιθανόν να μην έχουν την ακρίβεια χρονισμού που θα θέλατε να έχετε για την έξοδο βίντεο (γι' αυτό χρησιμοποιούμε το PIO που έχει πολύ ακριβή χρονισμό). Αλλά γιατί να μην το δοκιμάσετε 🙂
      2. Υποθέτω ότι θα πρέπει να είναι δυνατή η δημιουργία μιας αναλογικής εξόδου AV από το Raspberry Pi Pico. Αμφιβάλλω ότι το PWM θα είναι "αρκετό" για αυτό (θα ήμουν ευτυχής να ακούσω κάποιον με περισσότερη εμπειρία να χτυπάει σε αυτό!).
      σημειώστε ότι η PWM απλώς ενεργοποιεί και απενεργοποιεί το σήμα, ενώ η σκάλα αντιστάσεων που χρησιμοποιείται στην πλακέτα VGA για παράδειγμα δίνει συνεχή επίπεδα σήματος. Έτσι, για να λειτουργήσει η λύση PWM πρέπει να λειτουργεί σε πολύ υψηλότερες συχνότητες από αυτές που απαιτούνται για το πραγματικό σήμα. Δεν είμαι επίσης σίγουρος για το πώς θα αντιδράσει το εξωτερικό υλικό στο σήμα που είναι PWM αντί για ένα συνεχές αναλογικό σήμα.
      Ενδεχομένως θα μπορούσε να εξομαλυνθεί με τη χρήση ενός πολύ μικρού πυκνωτή, για τον οποίο θα πρέπει να κάνετε τους κατάλληλους υπολογισμούς.
      3. οι βοηθητικές πλακέτες VGA/DVI περιέχουν ό,τι είναι απαραίτητο (κυρίως αντιστάσεις). Μπορείτε να κοιτάξετε το σχηματικό διάγραμμα και να φτιάξετε τη δική σας ρύθμιση σε breadboard ενδεχομένως, έχω δει κάποιον να το κάνει για VGA.
      Τούτου λεχθέντος, αποστέλλουμε διεθνώς:
      https://buyzero.de/products/raspberry-pi-pico-vga-audio-sd-expansion-board?variant=39412666335412
      Pico DVI Sock @ buyzero.de κατάστημα

  7. Nikolay στις Δεκέμβριος 18, 2021 στις 1:16 μμ

    Υπέροχες πληροφορίες. Ευχαριστώ.
    Βρήκα επίσης αυτό: pico του Βατόμουρου
    http://www.breakintoprogram.co.uk/projects/pico/composite-video-on-the-raspberry-pi-pico

  8. Marcelo στις Απρίλιος 23, 2022 στις 10:09 μμ

    Κατάφερα να κατασκευάσω το picoDVI από τον Wren6991 και να το ενσωματώσω με ένα τριπλό ADC για να σαρώσω RGB 15Khz (640×240).
    Στο 320×240 που χρησιμοποιεί μόνο έναν πυρήνα, ο άλλος αφήνεται μόνος του να λαμβάνει διακοπές HSYNC /VSYNC και να προετοιμάζει μεταφορές dma χωρίς προβλήματα, αλλά στο 640×480 η χρήση 2 πυρήνων εμποδίζει το σύστημα να λειτουργήσει σωστά.
    Εφόσον χρειάζομαι τις μισές γραμμές, υπάρχει τρόπος να έχω μια πάντα έτοιμη μαύρη γραμμή για τις μονές γραμμές; με αυτό απελευθερώνω έναν πυρήνα για τα dutties μου.

    • Ed T στις Φεβρουάριος 25, 2023 στις 11:25 μμ

      Δεν νομίζω ότι χρειάζεται να στείλετε κενές γραμμές. Στέλνετε όλες τις μονές γραμμές, στέλνετε ένα σήμα vsync με μια επιπλέον μισή γραμμή και στέλνετε τις ζυγές γραμμές. Κάντε μια έρευνα για τους "παλμούς συγχρονισμού διαπλεκόμενου βίντεο".

  9. nix στις Ιούνιος 9, 2022 στις 2:40 μμ

    Ξέρει κανείς πώς να φορτώσει βίντεο που έχω φτιάξει εγώ και όχι τα παραδείγματα; Ευχαριστώ εκ των προτέρων!

    • Wayne στις Ιούλιος 30, 2022 στις 1:25 μμ

      Ενδιαφέρομαι να το χρησιμοποιήσω για μοναδικούς σκοπούς οπτικοακουστικής απεικόνισης. Παρακαλώ, μπορεί κάποιος να μου πει:

      Μπορείτε να τροφοδοτήσετε το Pico μέσω του καλωδίου HDMI, ακόμη και αν αυτό βρίσκεται στην πλευρά μετάδοσης χρόνου του καλωδίου;

      Μπορείτε να ρυθμίσετε τον χρωματικό χώρο Rec2100 (χρωματικός χώρος rec 2020 HDR);

      Είναι δυνατή η σύνδεση επιπλέον γραμμών στο HDMI, για την αποστολή ήχου (και σηματοδότησης rec2020/HDR);

      Μπορείτε να εξάγετε βίντεο μέσω μιας από τις μορφές βίντεο USB (βίντεο από αμετάβλητο Pico μέσω ενός προσαρμογέα USB σε Pico);

      Χρησιμοποιώντας το ασύρματο Pico, μπορεί να κάνει Miracast;

      Μπορεί να γίνει μια κανονική λειτουργία βίντεο bitmap και να γίνει επεξεργασία για γραφικά παιχνιδιών με κύκλους που περισσεύουν;

      Το Seedstudio διαθέτει μια μίνι πλακέτα RP2040. Μπορεί η πλακέτα διασύνδεσης HDMI και το λογισμικό, να λειτουργήσει σε αυτό. Έχουν επίσης μια έκδοση RiscV με wifi, οπότε θα ήταν καλό αν μπορούσε να κάνει επαναμεταγλώττιση για αυτό.

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

      Ενδιαφέρομαι για εφαρμογές παιχνιδιών, όπως η χρήση ρολογιών παιχνιδιών.

      Οποιαδήποτε JavaScript ελάχιστη βιώσιμη πλατφόρμα χρόνου εκτέλεσης τεθεί εκεί?

      Συγγνώμη που ζητάω πολλά, αλλά
      Το πιο ενδιαφέρον.

      Σας ευχαριστώ.

  10. hitech444 στις Ιούλιος 17, 2022 στις 4:20 μμ

    Μπορώ να χρησιμοποιήσω την κάρτα σας μαζί με τον διερμηνέα MMBasic του Geoff; Υπάρχουν περιορισμοί υλικού στα προγράμματά μου λόγω της κάρτας σας;

    • Graham στις Νοέμβριος 10, 2022 στις 10:00 πμ

      Τα μεγάλα μυαλά σκέφτονται το ίδιο, σκεφτόμουν κι εγώ κάτι τέτοιο! Έχω ήδη κατασκευάσει τον υπολογιστή MMBASIC με βάση το Raspberry Pico με έξοδο VGA, και δεν είναι τίποτα λιγότερο από φανταστικό! Ωστόσο, η έξοδος DVI-D (Pseudo HDMI) ανεβάζει τη δυνατότητα γραφικών σε ένα νέο επίπεδο! Φυσικά, το MMBASIC δεν χρειάζεται να εκμεταλλευτεί πλήρως το μεγαλύτερο βάθος χρώματος ή την υψηλότερη ανάλυση, αλλά η λειτουργία σε 640×480 με π.χ. 64 χρώματα θα ήταν πολύ ωραία.

      Τώρα, με αυτά που είπα, προβλέπω δύο άμεσα προβλήματα.
      1. Η λύση VGA χρησιμοποιεί επίσης τις ακίδες PIO, και στη συνέχεια ένας από τους πυρήνες χρησιμοποιείται για τη διαχείριση των sprites, τη ρυθμιστική αποθήκευση πλαισίων κ.λπ. Νομίζω ότι αυτό είναι το μόνο που μπορεί να γίνει. Τουλάχιστον θα απαιτηθεί μια αλλαγή κώδικα, τουλάχιστον για την αντικατάσταση της υλοποίησης VGA PIO. Ως API, θα εκπλαγώ επίσης, αν η διεπαφή μεταξύ του PIO (VGA) και του κώδικα του πυρήνα framebuffer είναι η ίδια με τη λύση DVI PIO, αλλά μπορεί να κάνω λάθος. Εν πάση περιπτώσει, θα πρέπει να υπάρξει αλλαγή κώδικα.
      2. RAM. Δεν υπάρχει αρκετή μνήμη, οπότε η υψηλότερη ανάλυση και το μεγαλύτερο βάθος χρώματος θα είναι πρόβλημα. Αλλά νομίζω ότι έχω μια λύση. Χρήση εξωτερικής PSRAM, και ίσως χρήση ενός RP2040/Pico ως "GPU" και έχει τη δική του αποκλειστική PSRAM συνδεδεμένη. Στη συνέχεια, μιλάει σε ένα δεύτερο RP2040 που παρέχει την "CPU" ή τον εγκέφαλο του συστήματος, εκτελώντας MMBASIC, και μπορεί να χειριστεί/μετακινήσει τα γραφικά στοιχεία με οδηγίες προς την GPU με ελάχιστο overhead (π.χ. μέσω σύνδεσης I2C). Θέλω/χρειάζομαι αυτό 😉.

  11. Dave στις Δεκέμβριος 30, 2023 στις 1:27 μμ

    64 ευρώ για το "Raspberry Pi Pico VGA Audio SD Expansion Board"; Καλύτερα να χρησιμοποιήσει κανείς ένα μηδενικό...

Αφήστε ένα σχόλιο