Ich möchte ein Programm erstellen, das Farbbilder (eventuell auch Videos mit Ton) auf einem kleinen Farb-LCD-Bildschirm anzeigt. Ich möchte einen Atmega 328-Chip mit einer SD-Karte verwenden, um die Bilder zu speichern. Jede Hilfe, die mich in die richtige Richtung weisen würde, wäre sehr dankbar.
Ohne weitere Details ist es unmöglich, eine spezifische Antwort zu geben, also hier ein paar allgemeine Dinge:
Wenn Sie Farbvideos anzeigen möchten (z. B. ~24 Bilder oder mehr pro Sekunde), benötigen Sie etwas mehr Rechenleistung, als die meisten 8-Bit-uCs bieten können.
Angenommen, Sie haben ein kleines 240 x 320 Farb-TFT-Display mit bis zu 18-Bit-Farbe. 18-Bit-Farbe ergibt 2^18 = 262144 mögliche Farben.
Sie benötigen mindestens einen Bildschirm RAM für den Anzeigespeicher.
Um einen ganzen Bildschirm anzuzeigen, werden 240 x 320 x 18 = 1382400 Bits (1,38 Mbit oder 172,8 KByte) RAM benötigt.
Wenn Sie eine Bildrate von sagen wir 25 Bildern pro Sekunde haben, dann haben Sie einen Datendurchsatz von 1,38 Mbit x 25 = 34,56 Mbit oder 4,32 MB pro Sekunde.
Natürlich müssen Sie nicht die vollen 18-Bit-Farbinformationen verwenden, sodass Sie beispielsweise auf 240 x 320 x 8 = 614400 Bit pro Frame mit 256 Farben (~ 15,3 Mbit für 25 fps) herunterkommen können.
Für Schwarzweiß braucht man nur 1 Bit pro Pixel, also bekommt man 240 x 320 x 1 = 76800 Bit oder 9,6 KB pro Frame. Der Durchsatz bei 25 fps wäre 240 x 320 x 25 = 240 KB pro Sekunde.
Wenn Sie also nicht nur statische (oder sich langsam ändernde) Bilder wünschen, würde ich empfehlen, sich einen 32-Bit-uC wie einen PIC32 oder eine Art ARM anzusehen. Die Display-Controller-ICs, die die Displays ansteuern (dh das Ding, mit dem Ihr uC spricht), haben normalerweise mindestens einen Frames Speicher, manchmal mehr, sodass Sie mit begrenztem RAM arbeiten können, wenn Sie die Dinge ein wenig mischen, aber im Allgemeinen sind Sie die Idee Nehmen Sie Ihre Änderungen im uC-RAM vor und aktualisieren Sie dann den gesamten Bildschirm auf einmal mit Ihrer angegebenen Bildrate.
Microchip hat ein paar TFT-Entwicklungsboards und einen Grafikstapel, um bei der Entwicklung zu helfen, obwohl ich nicht weniger als die High-End-PIC32s zum Ansteuern wählen würde.
Abhängig von Ihren Auflösungs-/Farb-/Soundanforderungen ist ein leistungsfähigerer ARM möglicherweise besser, sie reichen von Geschwindigkeiten von 40 MHz bis zu GHz, also eine große Auswahl - die Entwicklungsmöglichkeiten sind im Allgemeinen jedoch nicht ganz so budgetfreundlich.
Ein ausgezeichneter Chip ist der STM32F4, sehen Sie sich das STM32F4 Discovery Board an, es hat alles, was Sie brauchen, um es für 10 £ zu verwenden (ja, wirklich). Dafür erhalten Sie einen 168-MHz-uC mit 1 MB Flash, 192 KB RAM und mehr Peripheriegeräten, als Sie sich vorstellen können. Außerdem sind auf der Platine ein MEMS-Beschleunigungsmesser und ein Mikrofon, ein Codec und eine Kopfhörerbuchse sowie ein STLINK2-Programmierer (der zum Programmieren anderer ST-Chips verwendet werden kann) enthalten.
Auf der anderen Seite ist die Entwicklung nicht so freundlich wie zB Microchip oder Atmel - sie bieten keine IDE und die Dokumentation lässt zu wünschen übrig.
Zufälliges Video von STM32F1 beim Abspielen von QVGA
Klingt für mich so, als sollten Sie zunächst ernsthaft darüber nachdenken, Ihre Anwendung auf einem Arduino zu entwickeln, da sie auf dem ATMega328 basiert.
Es gibt eine Reihe von Bibliotheken und Tutorials zum Ansteuern von Grafik-LCDs. In ähnlicher Weise enthalten die Arduino-Kernbibliotheken SD-Kartentreiber . Und sobald Sie dazu bereit sind, gibt es auch Shields und Treiber zum Generieren von Audio .
Sobald Sie mit Arduino und Shields Prototypen erstellt haben, können Sie die kompilierten Artefakte (z. B. Hex- / Elf-Dateien) aus dem Arduino-Build abrufen und in Ihrem eigenen integrierten Design verwenden.
Unter der Decke ist die Arduino-Software nur C++, das mit avr-libc / avr-gcc erstellt wurde.
Kellenjb
WütendEE