Eine Taschenrechnerfamilie mit dem ATMega328

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    Aufgrund technischer Veränderungen ist der Mailverkehr innerhalb des Forums (Private Nachrichten) nur noch eingeschränkt möglich. Die Einschränkung ist notwendig, um zusätzliche Betriebskosten für das Forum zu vermeiden. Näheres zu den Hintergründen im Thread "Aktuelles zum Forum".Wir bitten um Verständnis.

    Hinweis kann nach Kenntnisnahme deaktiviert werden!

    • Eine Taschenrechnerfamilie mit dem ATMega328

      Am Anfang war es nur eine kleine Spielerei, um die Möglichkeiten des ATMega einmal so richtig kennenzulernen. Mit der Zeit entstanden eine ganze Familie von Taschenrechnern, die sich im praktischen Einsatz mehr oder weniger bewährt haben.

      Eigentlich verwendet ja kein Mensch mehr einen Taschenrechner. Aber da ein wahrer Bastler über die Frage "Wofür soll das gut sein?" erhaben ist, warum nicht?

      Das eine oder andere hatte ich an anderer Stelle im Netz schon geschrieben, sowohl die Leiterplatten, als auch den BASCOM-Code hab ich unter GPL gestellt, nachputzen und rumkritisieren ist ausdrücklich erwünscht.

      Was hatte mir am Anfang vorgeschwebt?

      - UPN (Umgekehrte Polnische Notation) haben (wie die alten HPs
      - leicht wissenschaftlich sein (Winkelfunktionen, Logarithmen, ...)
      - mit den altmodischen Siebensegmentanzeigen leuchten (LED)
      - Halbwegs klein sein
      - praktisch verwendbar sein.

      Am Anfang hab ich ein wenig mit dem ATMega8 herumexperimentiert. Die Idee, eine eigene Mathematikbibliothek zu schreiben ist schnell zu den Akten gelegt worden, nachdem ich mir die verfügbaren Double-Funktionen im BASCOM angeschaut hatte. Meiner Meinug nach bleibt da kein Wunsch unerfüllt. Nur Leider war der Mega8 damit dann voll. Der ATMega 328 war dann der Prozessor meiner Wahl.

      Die Suche nach "passenden" Siebensegmentanzeigen gestaltete sich auch ein wenig aufwändiger, am Ende hatte ich ein achtstelliges Modul mit MAX7219 auf dem Basteltisch. Eigentlich wollte ich das Multiplexen der einzelnen Anzeigeelemente ja den Prozessor machen lassen, aber der Siebensegmentcontroller ist wirklich ein nützlicher Zeitgenosse.

      Am Ende brauchte mein BASCOM-Code nur 45% des Flashs des ATMega328. Der Rechner hat 28 Tasten, die fast alle doppelt belegt sind, die Tasten werden gepollt. Die Speicher (ich gönne mir den Luxus von 10 Speichern) liegen im EEPROM, genau so wie die Einstellungen (rad/grd, Anzeigemodus)

      Die Leiterplatte ist doppelseitig und 100x65mm groß. Damit konnte ich sie in der freien Eagle-Version gerade noch layouten.

      Das Gerät nimmt bei 5V Betriebsspannung und einer 88888888 in der Anzeige etwa 150mA, das ist natürlich der Tod jeder kleinen Batterie. Deshalb geht die Anzeige in einen "Schlafmodus", es wird nur ein Dezimalpunkt angezeigt. Dabei geht dann die Stromaufnahme auf etwa 40mA zurück. Immer noch viel.

      Die Stromsparmodi des ATMega verwende ich noch nicht.

      Die Stromversorgung ist noch eine kleine Herausforderung. In der Theorie braucht das Gerät 5V. In der Praxis funktioniert es auch mit einer LiPo-Zelle. Dabei fließen im Ruhemodus 35mA und bei voller Anzeige etwa 90.

      IMG_0932_jpg.jpg

      So richtig fertig ist ein Projekt ja eigentlich nie. Ein Gehäuse gehört für mich aber dazu, damit aus einer Leiterplatte ein Gerät wird. Also, dem 3D-Drucker ein Modell zu lesen gegeben und ihn einige Stündchen arbeiten lassen. Ein einzelliger LiPo-Akku, eine Ladebuchse und ein Schiebeschalter passen auch noch mit hinein. Das kann sich schon fast sehen lassen. Hier und da hakelt es noch ein wenig. Mein Prototyp ist aus PLA mit der 0.4er Düse gedruckt. Dabei bin ich bei den cura-Vorgaben geblieben, nur den Füllgrad hab ich auf 50% gesetzt. Mein Druck war etwas unsauber, ich denke, da muss man noch mal an den Einstellungen drehen. Das Akkufach ist mit 47x43mm groß genug, daß auch andere Akkus hineinpassen sollten.

      IMG_1043.jpg

      In etwa diesem Zustand hab ich mein Projekt dann zum ersten mal in einem Mikrocontrollerforum zur Diskussion gestellt, es gab einige Ideen, Interesse an den Leiterplatten und Schaltplänen und einige, die den Rechner nachgebaut haben. Mit der ersten Softwareversion bleibt doch einiges im ATMega ungenutzt. Fast die Hälfte des FLASH, von RAM und EEPROM gar nicht zu reden. Also die nächste Version könnte programmierbar sein.
      Ich hab mich bei der Programmierbarkeit ein wenig zwischen den alten UPN-HP-Taschenrechnern und den russischen Elektronikas orientiert. Mit dem Ziel, einige der vielen Programmen, die in Büchern und auf Webseiten herumschwirren, nachnutzen zu können.

      Die Software hat einige Verbesserungsrunden über sich ergehen lassen müssen. In der Endgültigen Version hat der Rechner:

      10 Zahlenspeicher
      100 Programmschritte
      16 Unterprogrammebenen
      GOTO, GOSUB, IF<0, IF=0 und IF>0

      Da die Zahlenspeicher im Programmmodus doch recht häufig geschrieben werden, hab ich sie im RAM gecached und schreibe sie nur wenn der Rechner auf Eingaben wartet zurück in den EEPROM.

      IMG_1127b.jpg
      Theorie und Praxis unterscheiden sich in der Theorie nicht.

      srswift.de

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von srswift ()

    • Das Interesse an meiner Spielerei hatte mich dann doch ein wenig überrascht, der eine oder andere hatte Interesse, an der Software mitzuwirken und so hab ich die Source dann irgendwann nach Github geschaufelt.

      Der BASCOM-Code der nichtprogrammierbaren Version findet sich hier

      Die Programmierbare Version hatte natürlich viel mehr Wünsche ausgelöst. Die gibt es hier.

      Vor allem erschien das Display verbesserungswürdig. Mehrzeilig sollte es, im Sinne einer besseren Programmierbarkeit schon sein. Und eine Schnittstelle zum PC wäre auch wünschenswert. Die Ideen sprudelten nur so. Gewissermaßen als "Zwischenlösung" entstand dann "boris5". Mit hintergrundbeleuchtetem 3-Zeilen-Display.

      Aber mit Rücksicht auf meine Beschränkungen:
      - kleiner als 100x80
      - keine SMDs
      - ATMega 328P CPU

      IMG_1553b2.jpg

      Mit folgenden Weiterentwicklungen:

      - 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:

      Auch dafür hab ich mir irgendwann ein Gehäuse gebaut. Der "boris5" 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.
      Ich hab versucht, den Flash des 328 so richtig voll zu bekommen. Es gibt einen HEX-Modus und die Mnemonics der Tastenkommando werden im Display angezeigt.

      IMG_2615b.jpg

      Das Gehäuse ist nur wenig größer und passt gerade noch in die Hemdtasche. Die Serielle Schnittstelle ist ein echtes Plus. Damit können die UPN-Programme auf einem PC gespeichert und von dort geladen werden. Viele Ideen für die Weiterentwicklung kamen aus der Community.
      Wenig später entstand dann auch noch ein kleiner Compiler für Taschenrechnerprogramme.
      Theorie und Praxis unterscheiden sich in der Theorie nicht.

      srswift.de
    • Einige Zeit war ins Land gegangen. Und dann gab es irgendwann ein Sonderangebot von Dreizeilendisplays. Und ein paar Verbesserungswünsche. Herausgekommen ist ein neuer boris.

      Mit folgenden Änderungen:
      • 27 Tasten, kleineres Format
      • Serielle Schnittstelle zum Laden von Programmen vom PC
      • Ein I2C-EEPROM für Programme
      Die Praxis hat gezeigt: Programmieren auf dem Taschenrechner ist nicht der Weisheit letzter Schluß, das geht auf dem PC besser. Die Programmiertasten auf den Taschenrechner sind also entfallen

      IMG_3735b.jpg

      Neu ist der I2C-EEPORM zum Speichern mehrerer Taschenrechnerprogramme.

      Diese Programme sind komfortabler geworden, die Eingaben und Ausgaben können jetzt Zeichenketten enthalten.
      Der Compiler auf dem PC ist auch ein wenig erweitert worden, Symbolische Adressen und Variablennamen sowie die schon erwähnten Zeichenketten sind dazugekommen.

      All das passt auf eine doppelseitige 73x100 mm Leiterplatte, der ATMega328 ist damit randvoll. Wie auch schon die anderen Borisse: keine SMDs, und nur der interne RC-Oszillator mit 8MHz. Eine Lipo-Zelle kommt als Akku zum Einsatz, eine Ladeschaltung über USB ist mit eingebaut.

      Der BASCOM-code benötigt vielleicht noch ein wenig liebevolle Zuwendung, er tut aber, was er soll. Die Taschenrechnerfunktion ist eigentlich unverändert, die Funktionen für das Editieren des Programms auf dem Gerät, Codeanzeige und das Herunterladen des Programms auf den PC sind aus aus Speicherplatzgründen entfernt dafür sind die I2C-Routinen (Inspiriert vom R.Walter-Buch) hinzugekommen.

      Viel kleiner ist der boris7 am Ende nicht geworden, die Eagle-Restriktion der Leiterplatte erzwingt
      ein wenig unvorteilhafte Proportionen. Der EEPROM kann bis zu 64 boris-Programme speichern. Neben der Berechnung der Sonnenauf- und Untergangszeit sind ein paar Programme für die Fliegerei (W&B, Kraftstoffverbrauch, Winddreieck …) mit dabei.

      IMG_3780b.jpg

      Soviel zu meiner Projektvorstellung.

      gero
      Theorie und Praxis unterscheiden sich in der Theorie nicht.

      srswift.de