boris-5 - was so alles in 32kByte hineinpasst
boris-5 - was so alles in 32kByte hineinpasst
Sonntag, 17. November 2019
Boris, der Taschenrechter erzeugte ein unerwartetes Echo auf mikrocontroller.net. Viele gute Ideen ließen das Projekt "Boris Voyager" entstehen. Mit Funktionalitäten, von denen der Ur-Boris nur träumen konnte. Serielle Schnittstelle, SD-Karten-Interface. Unbegrenzter Speicher. On-Board-Compiler. Mehrzeiliges Riesen-Display.
Erst einmal entstand eine Zwischenlösung. Boris-5. Mit hintergrundbeleuchtetem 3-Zeilen-Display. Aber mit Rücksicht auf meine Beschränkungen:
- kleiner als 100x80
- keine SMDs
- ATMega 328P CPU
Funktionale Basis war erst mal der boris-4. Mit folgenden Verschlimmbessernden:
- EA DOG 163-Display mit oder ohne Hintergrundbeleuchtung
- 8x4 Tastatur. Die Software unterstützt prinzipiell auch mehr Zeilen.
- USB-Schnittstelle mit MCP2221 Chip on board
- 3.3V Design
- 255 Programmschritte
- 32, später 64 Zahlenspeicher
Je länger ich mit boris5 experimentierte, um so besser gefiel mir diese Lösung. Das Display ist ein echter Gewinn.
Die Stromaufnahme mit Hintergrundbeleuchtung liegt bei 74 mA. Im Ruhemodus, ohne LED bei knapp über 1mA. Ohne Stomsparfunktion der Chips.
Für die weiter oben beschriebene Gauss-Aufgabe benötigt der Rechner 17 Sekunden.
Die Tastenbelegung hat sich natürlich geändert, leider auch der Befehlssatz. Die Winkelfunktionen sind wieder in die erste Reihe
gerutscht, damit haben sie dann leider auch andere Codes.
Die BASCOM-Sourcen liegt auf Github:
https://github.com/Feinmechaniker/UPN/blob/master/Bascom/rpn_boris5_A328_v3.bas
Übrigens: Rechnende Speicher und die Loop-Befehle machen das Programmieren einfacher und die Programme schneller.
000 CX
001 STO 01
002 RCL 07
003 STO+ 01
004 LOOP7 002
005 RCL 01
006 HALT
Das ist die boris-5 . Variante des Gauss-Programms von oben. In Speicher 07 steht am Anfang die 100. Nach 7 Sekunden ist das Ergebnis da....
Funktional sind weiter hinzugekommen (noch har der 32kByte-Flash einige freie Spitzen):
- Eine Pause-Funktion für 1 Sekunde
- Ein Displaymodus "Hex"
- Eine Indexfunktion beim Speicherzugriff, z.B. STO Idx 5 bedeutet Speichern in den Speicher, dessen Adresse im Speicher 5 steht. Das ist allgemein für alle Speicher-, Loop und Sprungbefehle möglich.
Die Software füllt den ATmega 328 bis oben aus. Die Anzahl der Zahlenspeicher kann voreingestellt werden. Die Obergrenze liegt bei 64, dann ist der EEPROM voll. Programmschritte 255. Da liegt auch eine Einschränkung für die Weiterentwicklung. Die Adressen werden in einem Byte gespeichert...
Ich hab mal ein paar Fotos vom Display gemacht, v.o.n.u Displaymodus 0 = normal, oben die Statuszeile, Grad/rad Einstellung, Programmspeicherzeiger, Displaymodus. Darunter Y und X - Register.
Dann der Hex-Modus.
Dann die Anzeige bei der Programmausführung. Im Status ganz rechts die Steckebene.
Ganz unten die Anzeige im Programmiermodus. Die mittlere Zeile kann editiert werden.
Bei der Tastatur wollte ich mal etwas neues ausprobieren:
Meine Tastatur ist fast wie beim boris4, also die Taster auf der Leiterplatte, unter der Leiterplatte eine schmale Leiste zum Abstützen.
Die Tastenköpfe (diesmal keine Einzeltasten wegen des Klapperns) liegen mit 1-2/10mm Toleranz auf den Tasten auf. Die Beweglichkeit ist in
diesem Fall nur durch die Flexibilität des Grundmaterials gegeben, rund um die Taste selbst (an den Seiten und unten) ist ein Spalt. Ein flexibles Scharnier.
Das funktioniert mit dem ersten Versuch halbwegs ordentlich, die mittleren Tasten in der oberen Zeile machen aber noch ein wenig
Probleme. AUch sind die Tastenkräfte recht hoch und leider zwischen den Tasten in der Mitte und am Rand recht unterschiedlich.
Ich muss wahrscheinlich noch ein wenig mit den Spaltbreiten und Materialstärken experimentieren.
Auf https://thimet.de/CalcCollection/CalcPerformance.html gibt es eine hübsche Übersicht über die Rechengeschwindigkeit verschiedener
Taschenrechner. Der "Ur-Boris", oder besser einer seiner Abkömmlinge (Elektronika MK-61) steht ganz oben in der Liste (er braucht für das
Beispielsprogramm am längsten). Da das Beispielsprogramm recht einfach ist, war es geschwind für meinen boris4 und den boris-5 angepasst
und siehe da, die Eigenbauten schlagen sich wacker. Boris-4 mit 1MHZ Takt kommt mit 26s auf einen Index von 13 und liegt gleichauf mit dem HP-42S.
Boris-5 kommt mit 10.2s auf einen Index von 33 in etwa beim HP-32S. Da kann man ein wenig stolz drauf sein.
Inzwischen ist noch mal ein wenig Zeit ins Land gegangen. Der Boris-Voyager ist inzwischen auch anderenorts fertig geworden. Ich hab mich mit der SMD-Löterei nicht so richtig angefreundet. Die Voyager-Variante mit ohne SMD ist ein ziemlicher Kloben geworden.
"Grau, teurer Freund, ist alle Theorie und grün des Lebens goldner Baum." heissts im Faust. Und deshalb sollte die Praxis am Ende über die
ganze Borisfamilie urteilen. Ich hab einige Varianten bebaut, und ein paar davon haben sich tatsächlich in der Praxis bewährt.
Die erste Variante "boris4" gefällt mir durch die riesengroße Anzeige. Das Gerät selbst ist kompakt genug, in die Hemdtasche zu passen. Der
Akku hält hinreichend lange. Die Alblesbarkeit der Anzeige in hellem Sonnenlicht ist aber mangelhaft, die rote Streufolie verbessert es zwar deutlich, aber für den Flugplatz ist es nichts.
Der "boris5", eigentlich nur als ein Zwischenschritt zum "Voyager" gedacht, schlägt sich in der Praxis wacker. Das Display ist auch in hellem Sonnenlicht
(mit und ohne Displaybeleuchtung) gut abzulesen. Die transflexiblen EA DOG-M Displays (FSTN) sind da unglaublich leistungsfähig.
Die Erweiterte Funktionalität (z.B. Hex-Modus) ist ein echter Zugewinn. Das Gehäuse ist nur wenig größer und passt gerade noch in die Hemdtasche. Die Serielle Schnittstelle ist ein echtes Plus.
An den SMD-Voyager hab ich leider immer noch nicht herangetraut, meine Spezial-Voyager-Version ohne SMD ist eher nicht so praktisch. Das
Gehäuse ist einfach zu klobig. Ob ich mich da noch mal an eine Verbesserung heranmache, weiß ich noch nicht.
Der "(Zwischen)boris-5" gefällt mir so gut, daß ich ihm inzwischen eine gescheite Tastenbeschriftung (Wasserschiebenbilder) verpasst habe.
Auf Github gibt es ein paar kleine Korrekturen. Vor allem für die Behandlung der Hintergrundbeleuchtung während der Programmausführung.
Wenn boris rechnet, schickt er die LED jetzt auch nach ein paar Sekunden in den Ruhemodus. Bei Stop, Fehler oder Pause (oder Programmende) geht
das Licht dann wieder an.
Die Kontrastwerte für die FSTN-Variante der EA-DOG-Displays habe ich mir auch herausexperimentiert, die stehen als Kommentar mit im Code.
Und zwei kleine Programme für den Boris5/Voyager. Die Klassische Fingerübung von Mittelwert uns Streuung einer Meßreihe. Und dann gleich mal den (Pseudo-)Zufallszahlengenerator damit untersucht...
hier findet sich der BASCOM code für boris5 und Voyager:
https://github.com/Feinmechaniker/UPN/tree/master/Bascom
und dort die Taschenrechner-Programme:
https://github.com/Feinmechaniker/UPN/tree/master/Programme