Hallo alle zusammen, Vor kurzem habe ich meinen guten alten programmierbaren Taschenrechner TI58c zerlegt (Baujahr 1981, der ausgelaufene Akku hatte die Platine zerstört). Dabei kam mir ein Idee. Das Gerät konnte mit Programmbibliotheken auf austauschbaren ROMs erweitert werden und war trotz seiner nur 225kHz Taktfrequenz recht leistungsfähig. So etwas könnte man ja mit einem Mikrocontroller heutzutage leicht nachbauen. Im Internet gibt es zahlreiche Seiten zum Eigenbau von Taschenrechnern. Auch hier im Forum habe ich viele Beiträge dazu gefunden. Leider aber nichts zu meinem konkreten Vorhaben. Mit einem Arduino, fertiger Tastatur sowie einem Display mit eigenem Controller und Zusammensetzen von vorhandenen Software-Blöcken wäre so ein Rechner heute wohl mühelos machbar. Fraglich ist nur, was man dabei lernt. Zum Einarbeiten in die Hardware vom Mikrocontroller und ASM habe ich mir vor paar Jahren mal einen Taschenrechner (Bild 1, nur Grundrechenarten) selbst gebaut. Schaltung, Platine, LED-Treiber und Tastaturauswertung war alles selbstgestrickt. Es sollte absichtlich ein PIC16F628 mit nur 2K Programmspeicher und wenigen Pins sein. Dadurch war ich gezwungen, den kompletten Treiber für die Anzeige sowie die Tasteneingabe samt Plausibilitätschecks möglichst platzsparend hinzubekommen (zusammen sind es nur 284 Worte). Der Rechner gewinnt zwar sicher keinen Schönheitspreis, funktioniert aber tadellos und ist sehr gut ablesbar. Wie man sieht hat er auch nur minimalen Hardwarebedarf. Nun zu meiner Idee und den Fragen dazu. Wenn ich die bestehende Schaltung um einen EEPROM erweitere wie im Bild 2 dargestellt (der rote Teil), könnte ich wohl mit dem kleinen PIC einen hochwertigen programmierbaren wissenschaftlichen TR hinbekommen. Wie Bild 1 zeigt, habe ich die Software schon mal so erweitert, das auch Zahlen mit Mantisse und Exponent ein- und ausgegeben werden können. Die interne Verarbeitung fehlt aber noch. Und ich habe vor, das so zu machen: - ich ergänze das Programm um "virtuelle Tasten" mit jeweils eigenem Scancode - Beim Aufruf dieser Tastencodes führt der PIC Folgen von Grundoperationen in den TR-Arbeitsregistern aus, die für Berechnung von SIN, LOG, y^x usw. erforderlich sind (also Zweierkomplement, Links/Rechtsverschiebung, Vergleiche, bedingte Sprünge, Registertausch,INC,DEC) - Die Befehlsfolgen dazu (die Tasten-Scancodes) kommen aus dem externen EEPROM Faktisch würde der kleine PIC damit zu einer TR-spezifisch erweiterten ALU mit eigenem 2. Programcounter, die den erweiterten Befehlscode aus dem externen EEPROM erhält. Da der EEPROM austauschbar ist und auch alle real vorhandenen Tasten aufrufbar sind, könnten ähnlich wie beim TI58c auch eigene Anwenderprogramme erstellt und genutzt werden. Meine Frage: Geht das prinzipiell so? Und habt ihr eigene Erfahrungen mit diesem Thema? Über eure Ideen und Anregungen würde ich mich freuen Beste Grüße Micha
Soweit ich weiss können PIC Controller nur Code aus dem internen Flash Speicher ausführen. Wenn Du also Code von einem externen Speicher ausführen willst, müsstest du ihn interpretieren (wie Java oder Basic). Hast du ja auch geschrieben. Aber in diesen kleinen Pic wirst du wohl kaum einen sinnvollen Interpreter rein bekommen. Laut Datenblatt hat der Chip 3,5kB Programm Speicher und nur magere 224 Bytes RAM. > Dadurch war ich gezwungen, den kompletten Treiber für die Anzeige > sowie die Tasteneingabe samt Plausibilitätschecks möglichst > platzsparend hinzubekommen Du scheinst es als sportliche Herausforderung zu sehen. Andere würden es Zeitverschwendung nennen. Ich würde lieber einen größeren Controller nehmen, zum Beispiel einen ATmega328P mit 32kB Programmspeicher und 2kB RAM. Da kriegt man dann auch einen Java Interpreter rein (siehe http://www.harbaum.org/till/nanovm/index.shtml).
Ich würde auch nochmal über den LED-Strom nachdenken. 8-Fach Multiplexing ist schon außergewöhnlich viel, dazu sind die 15mA Strom (aufgeteilt auf 8 Segmente) außergewöhnlich wenig. Sicher wird das Abends im Bastelkeller hell genug sein, aber wird es auch tagsüber in Arbeitsräumen reichen? LED's soll man nicht parallel schalten. Die Widerstände gehören nach unten an die Leitungen a bis h. Warum manchst du eine Hälfte mit gemeinsamer Anode und die andere mit gemeinsamer Kathode? Bsit du sicher, dass beide Anzeigen mit exakt den gleichen LED's bestückt sind, damit es nicht blöd aussieht?
> über den LED-Strom nachdenken Diese LED Rechner kenne ich noch aus der Schule. Katastrophe! Haben sich nach ein paar Minuten abgeschaltet und in den Prüfungen war die Batterie leer. Da kommt doch die Frage auf - warum Batterien kaufen, wenn man heute für das gleiche Geld einen Taschenrechner bekommt, der 10 Jahre mit einer Lithiumzelle läuft?
Noch einer schrieb: > Da kommt doch die Frage auf - warum Batterien kaufen, wenn man heute für > das gleiche Geld einen Taschenrechner bekommt, der 10 Jahre mit einer > Lithiumzelle läuft? Schon einmal darüber nachgedacht, dass einige wenige Menschen ein Hobby ohne finanzielles Interesse betreiben - rein als Spaß an der Freude?
Interessanter Ansatz - erinnert mich ein wenig an mein PICALIC, was ja im Prinzip auch eine interpretative Abarbeitung von Opcodes (in dem Fall aus dem internen EEPROM) ist. Etwas gruseln würde mir vor dem Multiplexen der EEPROM-Leitungen und Tasten auf denselben Leitungen - da könnte man durch Drücken von zwei Tasen gleichzeitig während das Programm läuft einen netten Programmabsturz provozieren.
Ein Taschenrechner koennte auch heute noch ein sinnvolles Projekt fuer den Eigenbau sein, wenn er Eigenschaften hat die am Markt heute nicht verfuegbar sind: - Einige, moeglichst potentialgetrennte AD-Kanaele (12 bit waeren gut) - Ein oder zwei DA-Wandler (auch hier 12 bit und bitte keine PWM). - Eine Messeinrichtung fuer Frequenz, Periodendauer, Ein- und Ausschalt- zeiten und das Zaehlen von Ereignissen. - Eind Handvoll digitale Ein- und Ausgaenge. Vielleicht auch ein paar Relaiskontakte. - Eine einfache Anbindung an einen "groesseren" Host/PC. Vielleicht seriell + Massenspeicheremulation. - Ein einfaches Grafiksystem um Trends, Plots und Werte auszugeben. Sowas koennt Mann vielleicht gebrauchen. Die Befehle dafuer waeren so wie bei programmierbaren TR ueblich, dann nur weitere Opcodes im TR-Befehlssatz. Vermutlich ist es dann wohl einfacher so was wie das 8032AH-Basic dafuer aufzubohren.
Also ich finde das Projekt ebenfalls toll! Unbedingt bei LED-Anzeige bleiben, das hat viel mehr Stil als eine LCD-Gurke, womöglich in ihrer schlimmsten Reinkarnation als HD44780 dot Display. Allerdings könnte ich mir vorstellen, daß es sinnvoll (und schick!) wäre die Stellenzahl zu vergrößern, 12 oder 16... Stefan U. schrieb: > Ich würde lieber einen größeren Controller nehmen, zum Beispiel einen > ATmega328P mit 32kB Programmspeicher und 2kB RAM. Da kriegt man dann > auch einen Java Interpreter rein Auweia! Nö bloss nicht, ich würde (wenn ich denn könnte,...:-))so nah wie möglich am Original bleiben und die Arbeitsweise eines Taschenrechnerschaltkreises nachbilden, mit 3 oder 4 Rechenregistern in denen dezimal stellenweise die Rechnerei abgewickelt wird. In Java auf mega328 wartest du vermutlich 5 Minuten auf die fertig berechnete Quadratwurzel...:-)
Praktischer (und realitätsnäher) als eine Erweiterbarkeit per EEPROM fände ich eine Möglichkeit Variablen und Funktionen zu definieren und dann beliebige Ausdrücke ausrechnen zu können. Man würde zB folgendes 1:1 eingeben und würde das entsprechende Ergebnis erhalten: a:=42; b:=23; f(x,y):=sin(a+b*π); f(a+b*11) Ein bisschen wie Mini Matlab. Ob das auf einen kleinen PIC passt ist aber fraglich, das würde ich lieber auf einem ARM machen. Auch hier könntest du Funktionen und Variablen per EEPROM (oder lieber SD Karte? Einfach steckbar) nachrüsten...
Dr. Sommer schrieb: > Ob das auf einen kleinen PIC passt ist > aber fraglich, das würde ich lieber auf einem ARM machen. Wenn man es in Assembler macht, dann paßt das. Ich müßte mal nachschauen, wieviel Platz meine 4 und 5 Byte-GK-Arithmetik braucht, soweit ich mich erinnere, kommt die mit einem K oder so aus. Ich hab in solche kleinen PIC's schon ganz andere Sachen programmiert. Die 5 Byte GK Ari mit 32 Bit Mantisse hat's z.B. für nen Reziprok-Zähler gebraucht. Mit sowas hätte man auch genügend Stellen für einen kleinen Taschenrechner. Für den Rest, also Tastenabfrage, Display-Multiplex und Kommandointerpreter braucht man erfahrungsgemäß nicht gar so viel Platz. W.S.
Mir würde eine Kombination aus diesen Anforderungen gefallen: (º°)·´¯`·.¸¸.·´¯`·.¸¸.·´¯`·.¸¸.·´¯`·.¸¸.·´¯`·.¸¸.· schrieb im Beitrag #4932224: > - Einige, moeglichst potentialgetrennte AD-Kanaele (12 bit waeren gut) > > - Ein oder zwei DA-Wandler (auch hier 12 bit und bitte keine PWM). > > - Eine Messeinrichtung fuer Frequenz, Periodendauer, Ein- und Ausschalt- > zeiten und das Zaehlen von Ereignissen. > > - Eind Handvoll digitale Ein- und Ausgaenge. Vielleicht auch ein > paar Relaiskontakte. > > - Eine einfache Anbindung an einen "groesseren" Host/PC. > Vielleicht seriell + Massenspeicheremulation. > > - Ein einfaches Grafiksystem um Trends, Plots und Werte auszugeben. und Dr. Sommer schrieb: > Praktischer (und realitätsnäher) als eine Erweiterbarkeit per EEPROM > fände ich eine Möglichkeit Variablen und Funktionen zu definieren und > dann beliebige Ausdrücke ausrechnen zu können. Man würde zB folgendes > 1:1 eingeben und würde das entsprechende Ergebnis erhalten: > > a:=42; > b:=23; > f(x,y):=sin(a+b*π); > f(a+b*11) was letztlich eine Baugruppe mit BASIC-Interpreter sein könnte. Unter mircomite findet man etwas, was sogar einen PIC als µC verwendet. Einen Ansatz mit STM32 hatte ich mangels Interesse verworfen. Beitrag "PIC 32 schneller Basic Interpreter" VOA schrieb: > Allerdings könnte ich mir vorstellen, daß es sinnvoll (und schick!) wäre > die Stellenzahl zu vergrößern, 12 oder 16... Auf jeden Fall müssen es mehr als 8 Stellen sein.
Hallo alle zusammen, Danke erstmal für eure Meinungen. Stefan U. schrieb: > LED's soll man nicht parallel schalten. Die Widerstände gehören nach > unten an die Leitungen a bis h. ... > Warum manchst du eine Hälfte mit gemeinsamer Anode und die andere mit > gemeinsamer Kathode? Die LED der Anzeige sind alle antiparallel geschaltet. Nur so ist es möglich, 8 Stellen mit 12 Leitungen zu treiben. Dr. Sommer schrieb: > Praktischer (und realitätsnäher) als eine Erweiterbarkeit per EEPROM > fände ich eine Möglichkeit Variablen und Funktionen zu definieren und > dann beliebige Ausdrücke ausrechnen zu können. Genau das habe ich vor! VOA schrieb: > Allerdings könnte ich mir vorstellen, daß es sinnvoll (und schick!) wäre > die Stellenzahl zu vergrößern, 12 oder 16... Also mir reicht eine 5-stellige Mantisse. Gerade bei Messwerten wird bei großer Stellenanzahl oftmals eine trügerische Genauigkeit vorgegaukelt. (º°)·´¯`·.¸¸.·´¯`·.¸¸.·´¯`·.¸¸.·´¯`·.¸¸.·´¯`·.¸¸.· schrieb im Beitrag #4932224: > Ein Taschenrechner koennte auch heute noch ein sinnvolles Projekt > fuer den Eigenbau sein, wenn er Eigenschaften hat die am Markt > heute nicht verfuegbar sind: ....... Das wäre machbar, wenn ich den pinkompatiblen 16F1847 nehmen würde. Der hat ADC (leider auch nur 10bit) und mehr Speicher. Der jetzt genutzte PIC hat nur noch einen Eingang frei. Ohne ADC kaum sinnvoll nutzbar. Thomas E. schrieb: > Etwas gruseln würde mir vor dem > Multiplexen der EEPROM-Leitungen und Tasten auf denselben Leitungen Mit gutem Timing sollte das machbar sein. Die Anzeige hängt jetzt auch im Multiplex an den Tastaturleitungen. Ohne jeglichen Probleme. Und es ist kein 8-Stellen-Multiplex, sondern ein echtes 64-Segment-Multiplex. Stefan U. schrieb: > Ich würde lieber einen größeren Controller nehmen Ich habe gerade das alte Service-Manual vom TI58c runtergeladen und kurz überflogen. Ich vermute der 16F628 allein hat mehr "Power" als der ganze Chipsatz, der damals erfolgreich dort eingesetzt wurde. Mehr zum Thema später Beste Grüße Micha
> Die LED der Anzeige sind alle antiparallel geschaltet. Achso, kappiert. > In Java auf mega328 wartest du vermutlich 5 Minuten auf die fertig > berechnete Quadratwurzel...:-) Vertue dich da mal nicht. Lego Mindstorms Rboter laufen mit Java Interpreter auch prima. Der RCX Computer hatte einen 16Bit µC mit 16Mhz, der NXT einen 32Bit µC mit 32Mhz. Das ist nicht weit von ATmegas und PIC's entfernt. > Ich vermute der 16F628 allein hat mehr "Power" als der ganze > Chipsatz, der damals erfolgreich dort eingesetzt wurde. Ja, warscheinlich. Er war dafür aber sicher auch viel anspruchsvoller zu programmieren, als die heute üblichen Chips.
Hallo alle zusammen, Thomas E. schrieb: > da könnte man durch Drücken von zwei Tasen gleichzeitig während das > Programm läuft einen netten Programmabsturz provozieren. Das ist ja tatsächlich ein echtes Problem. Der Nutzer erwartet zu Recht, das eine Aktion bereits sofort beim Druck auf eine Taste startet und nicht erst beim Loslassen. Das heisst hier, in der Regel würde der Zugriff auf das EEPROM starten wenn die auslösende Taste noch lange gedrückt ist. Um das I2C-Protokoll nicht zu stören, könnte ich nun theoretisch im Programm die bestehenden Abtastlücken beim Tastenscan ermitteln und nur in dieser Zeit die Zugriffe aufs EEPROM zulassen. Das Ergebnis wäre bei dieser Methode allerdings sicher niederschmetternd: Die Routine würde eine Ewigkeit dauern. Da mache ich es lieber so: Für die Zeit der Berechnung schalte ich einfach den gesamten Port B auf Eingang. Die Anzeige bleibt dann zwar solange dunkel, gedrückte Tasten können aber den Pegel an Port A (und somit die I2C-Kommunikation) nicht mehr beeinflussen. Das Lesen vom EEPROM erfolgt so mit maximaler Geschwindigkeit. Ich halte das für die beste Lösung. Und auch bei vielen anderen Taschenrechnern bleibt die Anzeige während der (i.d.R. nur ms langen) Berechnungen dunkel. Sollte der Nutzer wider Erwarten zufällig mal zeitgleich 2 untere Tasten in der selben Spalte drücken, schliesst er damit die Leitungen SDA und SCL kurz. Ich finde mit dieser Ausnahme kann man leben. Um in diesem Fall die Pins A4 und A6 vor Überstrom zu schützen, würde es ausreichen, vor Pin A4 einfach einen Widerstand 270 Ohm einzufügen. m.n. schrieb: > Auf jeden Fall müssen es mehr als 8 Stellen sein. Der verwendete PIC könnte mit dem vorliegenden Schaltungskonzept max. 16 Stellen ansteuern. Für eine akzeptable Helligkeit müsste ich dann jedoch den Pulsstrom durch die LED stark erhöhen. Und hier liegt das Problem: Erstens gibt ein Pin lt. Datenblatt nur 25 mA her und zweitens: Sollte (z.B. beim Programmtest) das Multiplexing mal gestört sein und ein Segment statisch belastet werden, würde es bestimmt nicht lange überleben. Um die Genauigkeit der Rechenergebnisse zu erhöhen, kann ich auch rechnerintern mit mehr Stellen arbeiten als angezeigt werden. Aber es stimmt schon, schicker sieht es mit mehr als 8 Stellen aus. Für die Nostalgiker unter euch: Ich habe ein Bild von der TI-Platine mit dem alten Chipsatz angehängt. Da der TI58/59 noch immer eine Fan-Gemeinde hat, kann man ihn als Emulator unter Windows oder auch Android heute noch nutzen. Optisch, funktionell und auch akustisch (Tastencklick und sogar der Druckersound) dem Original perfekt nachempfunden. Beste Grüße Micha
Ich freue mich, das es noch andere gibt, die gerne einen Taschenrechner bauen wollen. In meinem Projekt werden auch 24 Tasten verwendet. Alles ist offen gelegt und darf gerne verwendet werden. Beitrag "Taschenrechner: ATmega1284p - 15x 7-Segmentdisplay"
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.