Brauche Hilfe bei Projekt mit serieller Datenübertragung! - Taschenrechner

Hallo, ich hab seit ein paar Wochen nen Arduino Uno und will nun folgendes:
Ich habe einen grafikfähigen Taschenrechner (Casio Fx-9860 GII), der auch programmierbar ist. Er hat auch einen seriellen Aus-/Eingang in Form eines Stereo-Klinkensteckers. Da ich mich mit serieller Datenübertragung nicht besonders auskenne, wollte ich fragen, ob es möglich ist, eine Datenverbindung zwischen Arduino und Taschenrechner einzurichten. Ich habe mich schon ein klein wenig über das Protokoll informiert und dazu auch folgenden PDF-File gefunden: http://ftp.jaist.ac.jp/pub/sourceforge/f/fx/fxsdk/documentation/fxreverse-docs-1/fxreverse-docs-1.pdf
Wenn mir jemand weiterhelfen könnte, wäre das genial!
Mein Ziel ist es übrigens, mit dem Taschenrechner solche Dinge wie LEDs oder kleine Motoren schalten zu können.

mfG Lasko

Lasko:
Da ich mich mit serieller Datenübertragung nicht besonders auskenne, wollte ich fragen, ob es möglich ist, eine Datenverbindung zwischen Arduino und Taschenrechner einzurichten.

Laut Bedienungsanleitung kann der Taschenrechner per USB mit einem PC verbunden werden.
Es spricht einiges dafür, dass über den Klinkenstecker eine serielle Schnittstelle herausgeführt wird.

Wenn Dir allerdings unbekannt ist, wie die Pinbelegung ist (Ground, RX, TX) und mit welchem Pegel die Schnittstelle arbeitet (TTL-Seriell oder RS232), würde es sich anbieten, dass man erstmal mit einem Oszilloskop herausbekommt,

  • welcher Anschluss Ground ist
  • welches der Sendeanschluss TX ist
  • welches der Empfangsanschluss RX ist
  • und auf welchen Spannungspegeln die Signale arbeiten

Hast Du überhaupt ein Oszilloskop?

Oder eine zuverlässige Quelle, wo Du Pinbelegung und Spannungspegel der Schnittstelle nachlesen kannst?

Wenn Du das herausbekommen hast, dann hast Du die notwendigen Infos, wie Du die Schnittstellen hardwaremäßig zusammenschalten, und wenn die Geräte zusammengeschaltet sind kannst damit anfangen, Signale über die Leitung auszutauschen.

Lasko:
Mein Ziel ist es übrigens, mit dem Taschenrechner solche Dinge wie LEDs oder kleine Motoren schalten zu können.

Dass ein Arduino auch ein bisschen selbst was rechnen kann, und nicht für jede Rechnung ein Taschenrechner benötigt wird, ist Dir aber schon bekannt, oder?

Die Pegel stehen der PDF Datei. Ist 0/4,2-5V. Was mich da aber total abschreckt ist das Kommunikations-Protokoll O_o Theoretisch ist es aber sicherlich möglich

Was mich da aber total abschreckt ist das Kommunikations-Protokoll

Lasko will ja nicht USB, sondern einfachste serielle Kommunikation: open, readbyte, writebyte.

Mir ist eher nicht klar geworden,

  1. wie man für den casio eigene Programme auf der Basis dieser API ( Chapter 5 ) schreibt und aktiviert.
  2. wie man in solchen eigenen Programmen (Add Ins) das User-Interface realisiert ( Tasten / Display ). Bis auf ein bisschen Cursor-Steuerung haab ich nichts gesehen oder verstanden.

Also erstmal danke für die schnellen Antworten! Hier hab ich nen Link, der eventuell hilfreich sein könnte:
http://casiopeia.net/forum/viewtopic.php?f=22&t=1490

Edit:
Den link hab ich auch noch gefunden:
http://www.casiopeia.net/forum/viewtopic.php?f=11&t=1557

Die Programme zum senden und empfangen würde ich nicht mit add-ins,
Sondern mit casio basic programmen realisieren.

Also ich hab hier nochmal alles zusammengestellt, was ich über die 3-Pin-Schnittstelle des Taschenrechners weiß:

  • Übertragungsrate: 9600 Bit/s oder 38400 Bit/s

  • asynchrone Datenübertragung

  • "EIA232/RS232-like interface, with the voltage level +4.2V used for logical 1, and 0V (GND) for logical 0"

  • Baudrate 9600 bps

  • keine "Parität"

  • Byte-Größe: 8 Bits

  • Stop-bits: FROM Casio: 2 bits TO Casio: 1 bit

Diese Tabelle hab ich auch noch gefunden (zu den Datenpaketen):
Size Field name Description Values
1 b Type (T) The basic purpose of the packet 0x00 to 0x1F
2 b Subtype (ST) The speciVc function of the packet “00” to “57”
1 b Extended (EX) Decides if DS and D Velds follow ’0’ - no, ’1’ - yes
(4 b) Data size (DS) Size of D Veld “0000” to “FFFF”
(n b) Data (D) Additional data related to packet function
2 b Checksum (CS) Checksum for integrity check “00” to “FF”

Ist es vielleichteinfacher, wenn man den USB-Port als Schnittstelle zum Arduino benutzen würde?

Bitte helft mir, ich hab noch das hier gefunden! :

http://www.nexusresearchgroup.com/downloads/Casio-Picaxe-manual.pdf

EIA232/RS232-like interface, with the voltage level +4.2V used for logical 1, and 0V (GND) for logical 0"

  • Baudrate 9600 bps
  • keine "Parität"
  • Byte-Größe: 8 Bits
  • Stop-bits: FROM Casio: 2 bits TO Casio: 1 bit

Das war doch schon klar, passt doch so wie es ist, ( 4.2/5.0 = 1 / 0 = 0 ) ist auch was der Arduino unter Seriell versteht.

Dein link zeigt, in Casio Basic gibt es

Send(A) und
Receive(B)

und nach deinem letzten Post im Juni war doch alles klar, oder ?

Die drei Drähte GND, RX, TX kannst du direkt an den Arduino anschliessen. Wenn du dein Casio-Crossover-Kabel nicht zerschneiden willst, ein passender Stecker ( 2.5mm Stereo ) mit den 3 Leitungen hängt an jedem Stero - Ohrstöpsel, oder du bersorgst dir eine passende Buchse.

Ist es vielleichteinfacher, wenn man den USB-Port als Schnittstelle zum Arduino benutzen würde?

? Versteh ich evtl. nicht ?
Sicher sollte Serial ( via USB ) zum PC als Test- und Debug-Schnittstelle verwendet werden, beim Uno nimmst du eben SoftSerial auf zwei anderen Pins dazu, um den Arduino mit deinem Casio zu verbinden.

michael_x:
Wenn du dein Casio-Crossover-Kabel nicht zerschneiden willst, ein passender Stecker ( 2.5mm Stereo ) mit den 3 Leitungen hängt an jedem Stero - Ohrstöpsel, oder du bersorgst dir eine passende Buchse.

Die Standard-Ohrhörer bzw. Kopfhörer haben eher 3,5mm-Klinkenbuchsen. 2,5mm ist seltener, findet man aber auch im gut sortierten Elektronik-Fachhandel. Ja, selbst bei Conrad: http://www.conrad.de/ce/de/product/710266 :wink: Ansonsten bei den üblichen Verdächtigen: Reichelt, Segor usw.

Also ich schliess dann den Klinkenstecker an die RX/TX- pins des arduino an... Theoretisch müsste ich bei einem Sendevorgang vom Taschenrechner aus dann etwas empfangen, wenn ich richtig verstanden habe: "0x05" ("check")....
um die verbindung aufrechtzuerhalten müsste der arduino dann mit "0x06" ("ack") antworten...

Ein sehr interessantes Projekt :slight_smile:
Ich habe vor 3 Jahren (noch auf dem Gymnasium) mal angefangen, so etwas zu schreiben, es ist mir dort aber leider noch nicht gelungen.

Ich habe diesen Calc. noch und werde mich heute damit definitiv nochmal befassen, diese neuen Posts und PDFs sehen sehr interessant aus :slight_smile:

Lasko:
Also ich schliess dann den Klinkenstecker an die RX/TX- pins des arduino an...

Nein, das reicht nicht, denn Du mußt auch GND anschließen.

Wahrscheinlich ist es ein Stereo-Klinkenstecker, und der hat drei Kontaktflächen für GND, RX, TX.

GND wird höchstwahrscheinlich derselbe Kontakt sein wie auch bei der Belegung als Audio-Stecker:

ich weiß das man auch gnd anschleißen muss, war nur zu faul es auch noch zu schreiben :wink:

Vielleicht nicht Pin 0 und 1 = Hardware Serial ( die einzige beim UNO) ,
damit man leicht im Serial Monitor dokumentieren kann was passiert,
sondern eine SoftSerial Schnittstelle auf zwei beliebigen anderen Pins einrichten.
( Oder beim Mega eine der anderen HardwareSerial Schnittstellen benutzen)

Es war leider ohne Erfolg... =(
Ich hab die SoftwareSerial Library mit dem Standardcode benutzt. Dann müssten mir ja eigentlich vom Taschenrechner gesendete Daten auf dem Serial Monitor angezeigt werden, es passiert aber rein gar nix.