VGA-Schnittstelle mit PIC

7

Ich suche nach einer Möglichkeit, einen VGA-Bildschirm mit einem PIC zu steuern. Externe Komponenten sind in Ordnung, daher ist auch ein VGA-Chip mit I2C oder SPI oder etwas in Ordnung.

Bedarf:

  • Auflösung: max 1024x768, kein Minimum
  • Sprache: C (C18-Compiler) oder Jalv2
  • Nur Text, keine Grafik notwendig (aber es wäre okay, wenn es das auch hätte)
  • Eine Farbe ist ausreichend, daher fällt die DA-Konvertierung nicht in den Rahmen dieser Frage

In meinem Projekt habe ich einen Textpuffer, den ich auf einem Bildschirm haben möchte. Sie können es mit der Verwendung eines LCD-Displays für die Textanzeige vergleichen, jetzt jedoch mit VGA.


quelle
Was versuchst du zu machen? Ein PIC verfügt weder über Videohardware noch über De-facto-Standard-Videohardware, die mit PICs verwendet wird. Jede Software ist spezifisch für ein bestimmtes Hardware-Setup.
Dave Tweed
1
Der richtige PIC kann möglicherweise VGA-Signale mit sorgfältiger Codierung erzeugen, aber das ist nicht einfach. Welche Hardware möchten Sie zwischen dem PIC und dem VGA-Ausgang bereitstellen?
Olin Lathrop
2
Ein Textpuffer mit welchen Dimensionen? Können Sie den größten Teil der Prozessorleistung für die Wartung des Displays verwenden? Auf den ersten Blick sind mir keine eigenständigen "VGA-Chips" bekannt, aber Sie könnten einen eigenständigen SPI- oder seriellen Display-Slave mit einem kleinen FGPA oder einem zweiten Mikrocontroller herstellen, entweder mit einer sehr hohen Taktrate und / oder DMA (einige der ARM-Kortexteile vielleicht) oder eines, das für ungewöhnliche Aufgaben wie einen Parallaxenpropeller entwickelt wurde. Wenn Sie mit begrenzten Farben einverstanden sind, kann Ihre elektrische Schnittstelle nur ein paar Widerstände sein.
Chris Stratton
2
Erstens, um die sehr beschäftigte Aufgabe, das Display ständig neu zu streichen, einfach zu entladen, damit Ihr primärer Prozessor frei darüber nachdenken kann, was auf dem Display angezeigt werden soll. Zwei, weil es schneller ist, mehrere Kerne hat und Leute Videoanzeigen damit gemacht haben. Ein FPGA würde noch mehr Flexibilität bieten, hat jedoch eine hohe Lernkurve und ist einschließlich Support-Komponenten wesentlich teurer.
Chris Stratton
2
@Camil Staps Sehen Sie sich zum Beispiel den Code für das Propeller Demo Board an. Es macht PS / 2-Tastatur und -Maus, zeigt auf Composite-Ausgang und VGA an, tastet von einem Mikrofon ab und spielt alles gleichzeitig ab. Ein weiterer Ort, an dem Sie suchen müssen, ist der Objektaustausch . Dort stehen viele VGA-Objekte kostenlos zur Verfügung. Es gibt auch VGA-Demos, die auch mit der IDE geliefert werden.
AndrejaKo

Antworten:

3

Wenn es für Ihre Anwendung nicht übertrieben ist, können Sie Ihrem PIC eine ISA-Schnittstelle hinzufügen und irgendwo eine alte Grafikkarte abholen.

Supercat weist jedoch darauf hin, dass es keinen PC gibt, auf dem das Video-BIOS ausgeführt werden kann. Daher würde dies wahrscheinlich nicht funktionieren.

Ich habe auf Hackaday einen Beitrag gefunden , der etwas Ähnliches mit einem AVR macht, der gut zur Inspiration sein könnte.

Phil Frost
quelle
Ooh, schön! Ich muss natürlich für zukünftige Projekte darüber nachdenken, danke für die Verknüpfung von & +1! Ich fürchte, es ist ein Overkill für dieses Projekt.
Schön, habe das alles vergessen. Ich denke, es kann sogar VGA-Karten geben, die nur mit angeschlossenem 8-Bit-ISA funktionieren können. Es gibt sicherlich Herkules-, EGA- usw. Karten, die möglicherweise auf die erforderlichen Zeiten umprogrammiert werden können.
Chris Stratton
Eine ausreichend veraltete VGA-Karte sollte mit einem 8-Bit-Bus funktionieren, aber die E / A-Anforderungen selbst für einen 8-Bit-Bus werden so groß sein, dass man auch für einen 16-Bit-Zugriff springen kann. Ein Problem, das bei VGA-Karten auftreten kann, besteht darin, herauszufinden, welche Initialisierungssequenz für eine bestimmte Karte erforderlich ist. Sogar Karten, die "100% VGA-kompatibel" sind, müssen vor der Verwendung häufig auf verschiedene nicht standardmäßige Arten initialisiert werden. Da jede VGA-Karte ein BIOS-ROM enthält, ist dies kein Problem, wenn die Karte an einen PC angeschlossen ist. Der PC wird den Code im ROM
ausführen
... führen Sie die entsprechende Initialisierung für alle Register durch, die auf dem ursprünglichen VGA nicht vorhanden waren. Sofern Sie nicht vorhaben, eine 8086-Emulationsbibliothek für Ihren PIC zu schreiben, sind die im ROM bereitgestellten Initialisierungsroutinen möglicherweise ziemlich nutzlos.
Supercat
@supercat du hast wahrscheinlich recht, ich habe das video BIOS vergessen.
Phil Frost
1

Es ist wahrscheinlich, dass die zum Hinzufügen eines VGA-Displays zu einem PIC erforderliche Schaltung die Kosten und die Komplexität der Verwendung eines anderen Chips übersteigt, der ein Display bereitstellen und auch das tun könnte, was der PIC tun würde, oder etwas wie eine Himbeere Pi, um das Display bereitzustellen und es über einen UART oder ähnliches mit dem PIC kommunizieren zu lassen (ich denke, der Raspberry PI hat mindestens einen UART unter seinen E / A-Pins).

Wenn Sie sich ein VGA-Subsystem erstellen möchten, damit Sie lernen, wie solche Dinge funktionieren, erfordert eine VGA-Schnittstelle mit 640 x 480 die Fähigkeit, etwa 32 Millionen Pixel / Sekunde zu takten. Das wird ein gutes Stück über die Fähigkeiten eines "nicht unterstützten" PIC hinausgehen. Sie müssten einem PIC wahrscheinlich nicht viel Hardware hinzufügen, damit er Text ausgeben kann, wenn es Ihnen nichts ausmacht, wenn das Display den Prozessor während des größten Teils jedes Frames überlastet, aber der PIC hat wahrscheinlich keine Zeit für irgendetwas sonst; Jede Scanlinie würde erfordern, dass sie eine Sequenz mit 160 Befehlen ausführt, etwa wie folgt:

movf  POSTINC0,w,c
movwf PORTC,c

ab genau den richtigen Zyklus und ohne Unterbrechung ausgeführt [Hardware zur Zeit blind Schnappen Zeichendaten aus PORTC wäre es sollte dort sein, fütterte es durch eine Zeichenform ROM, und es in ein Schieberegister geladen werden ].

Wenn Sie so etwas getan haben, kann ein 32-MHz-PIC möglicherweise 80x25-Text mit einem schnellen (25 ns) 32Kx8-ROM generieren, um Zeichenformen zu speichern und zu serialisieren, einem 3-Bit-Zähler, um die Pixel jedes Zeichens zu takten und ein paar verschiedene Tore; Man könnte wahrscheinlich eines der PWM-Module des PIC verwenden, um die horizontale Synchronisation zu handhaben. Dieser Ansatz würde eine 80x25-Matrix von Kacheln liefern, die jeweils eine von 256 Formen haben könnten; Jede Form wäre 8x16 Pixel groß und jede Kombination von 256 Farben [der Einfachheit halber wäre die Farbe wahrscheinlich RRRGGGBB oder so ähnlich]. Wenn man Probleme hat, ein ausreichend schnelles 32Kx8-ROM zu finden, kann man stattdessen ein schnelles 32Kx8-RAM verwenden und beim Systemstart einen Mechanismus zum Einspeisen von Daten bereitstellen.

Superkatze
quelle
Aber Raspberry Pi macht kein VGA.
AndrejaKo
@AndrejaKo: Ah, okay. Wenn Sie insbesondere VGA benötigen, gibt es wahrscheinlich noch einige andere Single-Board-Computer, die diese Aufgabe für weniger als die Kosten für die Entwicklung einer benutzerdefinierten Lösung erledigen können. Der PIC-Weg kann jedoch lehrreich sein. Die Anzahl der Schaltkreise sollte nicht unangemessen sein, und Sie könnten wahrscheinlich immer noch alles finden, was Sie in leicht zu handlötenden Durchgangsbohrungsteilen benötigen. Übrigens würde das Hinzufügen einiger Zähler, eines Off-Chip-RAM und einer kleinen Klebelogik es ermöglichen, das Video kontinuierlich ohne PIC-Beteiligung zu erzeugen, mit der Einschränkung, dass der PIC ...
Supercat
... müsste die Schreibvorgänge für die Anzeige ordnungsgemäß zeitlich festlegen, um sicherzustellen, dass sie mit den verfügbaren Anzeigedaten übereinstimmen; Das Hinzufügen von etwas mehr Schaltkreisen könnte diese Anforderung erleichtern.
Supercat