PicoMon ist ein (sehr) kleiner Terminalmonitor, für 2 unterschiedliche Mikrocontroller realisiert.
Die "Challenge" für das Programm könnte man auch benennen nach: Von STM32 nach CH32, zurück und dann gemeinsam, weil:
der erste Programmentwurf erfolgte für einen STM32-Controller. Dann habe ich das "Projekt" zur Seite gelegt um den CH32 zu evaluieren. Also beschlossen, den kleinen Monitor mit CH32 weiter zu führen. Allerdings gibt es einen großen Vorteil bei STM32: er hat mehr RAM.
Wie dem auch sei. "Angestachelt" von einem Nachbarthread von mir, bei dem Laberkopp meinte, den Textdisplayadapter seriell mittels UART anzusteuern, wollte ich das für ein farbiges Display machen.
Wollte ich schon immer haben, weil ich zum einen eine einfache Möglichkeit haben will, Ausgaben anstelle zum PC zu schicken auf dem Steckbrett anzeigen zu lassen. Zum Anderen möchte ich schon lange eine Möglichkeit haben, ein Display an einen PC anzustöpsel und dieses ohne großen Aufwand zu betreiben. Speziell hier möchte ich eine Ausgabemöglichkeit auf ein Display haben, die von sehr kleinen ThinClients, die nur noch als Internetradio dienen, kommen.
Jetzt habe ich das endlich mal gemacht.
Also, was kann mein PicoMon?
PicoMon empfängt auf der RxD-Leitung des USART Zeichen mit 4800 Bd im Protokoll 8N1. Eingehende Steuerzeichen werden interpretiert für
- Linefeed
- Carriage return
- Tabulator
- Backspace und vor allen Dingen ESC-Sequenzen
- und einem zusätzlichen Gadget, welches einen "mißbrauchten" Steuercode 16 (0x10h) mißbraucht, um einen String, der eine Turtlegrafik beinhaltet darstellen zu könne.
Die ESC-Sequenzen werden hinsichtlich der Farben so interpretiert, wie sie ein Linux-Terminal auch interpretieren würden. Ebson so wird die Cursorsteuerung interpretiert, so dass die Kontrolle wo und in welcher Farbe ein Text erscheinen soll gegeben ist.
PicoMon unterstützt die Grafikcontroller ILI 9162, ili9163, ili9340, st7735 / st7735r, st7789, st9225 und s6d02a1 mit Pixelauflösung von 128x128, 160x80, 160x128 und 320x24 mit Schriftstilen in 4 unterschiedlichen Größen: 5x7, 8x8, 10x16 und 12x16 Pixeln.
Aus der Kombination von unterschiedlichen Displayauflösungen und Schriftgrößen ergeben sich viele Kombination hinsichtlich der dargestellten Zeichen auf dem Display. Die Ausgabe der Zeichen kann waage- oder senkrecht erfolgen.
Wird in der untersten Zeile ein Linefeed erzeugt, scrollt der Textinhalt nach oben und die unterste Zeile wird beschrieben.
Hierfür ist ein Framebuffer notwendig, der alle eingehenden Zeichen zwischenspeichert (mit samt den Farbattributen) um diese bei Bedarf nach oben scrollen zu können.
Hieraus ergibt sich die "Problematik", dass in Verbindung mit einem Display mit "vielen Pixeln" (für mich hat ein 320x240 Display viele Pixel) und einem sehr kleinen Schriftstil der RAM eines CH32V003 nicht ausreicht (das war dann der Grund, warum es das ganze jetzt für 2 Controller gibt: ein STM32F042 und STM32F070F6 haben grundsätzlich 6 kByte RAM und der ist immer ausreichend bei diesem Projekt).
Die Funktionsweise ist wie so oft simpel, aber manches artet dann sogar in Arbeit aus:
Der USART ist als Interrupt realisiert, der alle eingehenden Zeichen in einem Ringbuffer speichert (damit bei einem eventuellen zeitraubenden Scrollen kein Zeichen verloren geht). Diese Zeichen werden zuerst geparst und dann zum einem im Framebuffer und auf dem Display abgelegt.
Das wars dann eigentlich auch schon. Wer so etwas brauchen kann, möge sich bedienen. Ich für mich werde wohl PCB's erstellen für 160x80, 160x128 und 320x240 Displays
PicoMon kann von jedem Controller aus angesteuert werden, der einen Text mit einer Baudrate von 4800 Bd verschicken kann (also von allen, getestet habe ich das mit MCS-51, AVR, Padauk PFS154, STM8, STM32 und CH32V003).
Zur Demonstration habe ich dem Archiv ein Demoprogramm für AVR ATmega mit eingepackt (bei mir ist das ein abgespeckter Arduino-Nano, dem die Chinesen damals den Mega328p entfernt und dafür einen Mega168 eingesetzt hatten... als das ganze noch inkl. Porto für 1,50€ zu haben war)



