Les membres ayant 30 points peuvent parler sur les canaux annonces, projets et hs du chat.

Forum Casio - Vos tutoriels et astuces


Index du Forum » Vos tutoriels et astuces » Une Mémoire externe pour la Casio FX92+
Aditya02 Hors ligne Membre Points: 5 Défis: 0 Message

Une Mémoire externe pour la Casio FX92+

Posté le 11/01/2022 00:01


L’inspiration derrière ce projet provient initialement de la Casio 92B, qui était la calculatrice recommandée pour les humanités en Belgique et en France. Malheureusement la 92B, sauf son élégance, n’avait rien d’impressionnant…

Ayant récemment fait la découverte de la 92+ et de son mode algorithmique tout juste après mes études secondaires, j’étais heureux de voir que « la » calculatrice qui m’avait accompagnée pendant six ans allait encore m’occuper quelque temps !

…La seule déception était bien sûr que la 92+ n’a pas de mémoire interne.

Il me semblait donc intéressant de créer un module de mémoire externe et détachable pour pouvoir sauvegarder ces longs programmes qui deviennaient une lourde tâche à réécrire.

Bien que ce module puisse être compatible avec n'importe quelle calculatrice (ou n'importe quel appareil avec un clavier matriciel), il a été principalement conçu pour la Casio FX-92+.



Fonctionnement :
Un microcontrôleur Arduino au cœur du module pilote les quatre circuits intégrés (CD4066), qui a leur tour simulent une pression de touche sur la calculatrice. Un CI CD4066 est composé de 4 interrupteurs électroniques bilatéraux, une touche sur la calculatrice est « pressée » lorsque l’interrupteur électronique correspondant à la colonne et l’interrupteur électronique correspondant à la rangée de la touche voulue sont activés simultanément.

En bas du module, 5 boutons permettent de sélectionner un parmi les 5 algorithmes sauvegardés dans la mémoire EEPROM de l’arduino. Chaque algorithme peut contenir 200 instructions/coordonnées des touches

Logiciel MATRIXIO :
J’ai également écrit un programme afin de charger les algorithmes dans la mémoire EEPROM de l’arduino. Les Instructions et coordonnées des touches peuvent être envoyées manuellement via le moniteur de série de l’IDE arduino, ou automatiquement via un chargeur écrit en Python.

MATRIXIO v1.0 (c) Jan 2022 Aditya Chugh -type 'help'-

Voir commandes
Cacher commandes
xy :         Instruction, where x is column and y is row of calculator key
a~t :         Shortcut instruction sequences
write :     Enable writing of instructions to EEPROM memory
read :         Disable enable writing of instructions to EEPROM memory
prog 1~5 :     Memory address set to beginning of program 1~5
clear 1~5 :     Clears all 200 instructions of program 1~5
list 1~5 :     Lists all 200 instructions of program 1~5
addr 0~999 :     Memory address set to 0~999 (for uno & nano)

On Casio FX-92B & FX-92+, the bottom-most row is matrixed differently, keys should hence be addressed as such :

'0' : 65
',' : 64
'x10^x' : 63
'ANS/REP' : 62
'EXE' : 61

Shortcut instruction sequences for Casio FX-92+:

a : avancer de
b : tourner de
c : s'orienter à
d : aller à x,y

e : stylo écrit
f : stylo relevé
g : mettre var à
h : demander valeur

i : commentaire
j : afficher résultat
k : style
l : attendre

m : répéter
n : répéter jusqu'à
o : si alors
p : si alors sinon

q : exécuter
r : copier et insérer
s : insérer ligne
t : tout supprimer


Construction :
Matrice du clavier:
Voir matrice
Cacher matrice


Le schéma parait impressionnant de loin, en réalité c'est très répétitif
Voir schéma
Cacher schéma





Vous pouvez télécharger tous les fichiers et schémas ici: https://github.com/adityachugh02/casio-external-memory/

Avantages :
-On peut sauvegarder des programmes pour la 92+
-Chargement rapide
-Détachable et relativement esthétique


Inconvénients :
-On ne peut pas (encore) sauvegarder des programmes à partir de la calculatrice, il faut pour le moment toujours charger les algorithmes à partir d’un ordinateur.


Kikoodx Hors ligne Membre Points: 2834 Défis: 11 Message

Citer : Posté le 11/01/2022 19:20 | #


C'est un beau projet avec une super utilité, en plus l'article est ultra propre. Bravo, c'est un topic de qualité !
Time is running out
Lephenixnoir Hors ligne Administrateur Points: 21346 Défis: 149 Message

Citer : Posté le 11/01/2022 20:28 | #


Wow ! C'est super professionnel. Le modding matériel est pas fondamentalement dur, mais le circuit bien fignolé, le boîtier en bois genre Fablab et tout, franchement super travail.

Peut-être que tu pourrais avoir un mode "macro" sur le contrôleur où il enregistre les signaux du clavier pour les reproduire plus tard (en éliminant au passage les pauses) histoire de pouvoir plus ou moins saisir le programmes sur la calto et les garder en mémoire sur le contrôleur (à défaut de pouvoir lire directement la mémoire de la calto) ?

Je sais pas si j'oserai faire ça sur ma fx-92 SC+, mais j'aimerais bien... en plus pour tester les quelques programmes qu'on a durant des événements ça serait super pratique.
Zezombye En ligne Rédacteur Points: 1752 Défis: 13 Message

Citer : Posté le 11/01/2022 20:30 | #


Un rubber ducky sur casio, c'est original ça
Divers jeux : Puissance 4 - Chariot Wars - Sokoban
Ecrivez vos programmes basic sur PC avec BIDE
Lephenixnoir Hors ligne Administrateur Points: 21346 Défis: 149 Message

Citer : Posté le 11/01/2022 20:33 | #


Joke's on you y'a aucune mesure de sécurité sur les caltos
Aditya02 Hors ligne Membre Points: 5 Défis: 0 Message

Citer : Posté le 11/01/2022 21:22 | #


Je suis heureux que mon projet vous ait plus!

Lephenixnoir a écrit :

Peut-être que tu pourrais avoir un mode "macro" sur le contrôleur où il enregistre les signaux du clavier pour les reproduire plus tard (en éliminant au passage les pauses) histoire de pouvoir plus ou moins saisir le programmes sur la calto et les garder en mémoire sur le contrôleur (à défaut de pouvoir lire directement la mémoire de la calto) ?


J'avais réfléchi à ça mais la façon dont les calculatrices scannent la matrice rend les choses un peu compliquées. (En fait la calculatrice fait passer séquentiellement un courant à travers les colonnes de la matrices, pendant que les rangées sont "à l'écoute", si un bouton est pressé, le circuit se ferme entre la colonne et la rangée, c'est ainsi que la calculatrice détecte quel bouton est pressé.)

Le souci donc, est que ce scan va très vite, et il n'y a que 2 pins d'interruption sur l'arduino nano. Mais je viens de découvrir que l'arduino zero en avait 15! Sinon l'autre solution serait d'utiliser un "port expander" comme le MCP23S17 qui agit comme un registre à décalage interruptible, connecté à un pin interrupt sur l'arduino nano. Mais je ne suis pas certain que cette méthode soit suffisamment rapide..

J’y réfléchis!
Lephenixnoir Hors ligne Administrateur Points: 21346 Défis: 149 Message

Citer : Posté le 11/01/2022 21:30 | #


Oui c'est vrai qu'il y a un clavier matriciel. J'ai cru naïvement que tu t'étais branché sur le contact de chaque touche, alors que vu le nombre de connexions c'est évident que non ! Et du coup tu ne peux pas faire le scan toi-même sous peine de gêner la calculatrice, et si tu veux lire en même temps qu'elle ça rend le timing très subtil... dur dur. Par pure curiosité est-ce que tu sais quelle vitesse c'est le scan ? Peut-être que tu peux le mesurer avec tes connexions et un oscillo ? Si c'est le proco il doit pas aller très vite avec un peu de chance.
Aditya02 Hors ligne Membre Points: 5 Défis: 0 Message

Citer : Posté le 12/01/2022 19:31 | #


Lephenixnoir a écrit :
Par pure curiosité est-ce que tu sais quelle vitesse c'est le scan ? Peut-être que tu peux le mesurer avec tes connexions et un oscillo ? Si c'est le proco il doit pas aller très vite avec un peu de chance.


J'ai testé les connecteurs du clavier sur l'oscilloscope et j'ai remarqué qu'en fait toutes les rangées sont "hautes" (tout le temps, selon mon oscilloscope) et ce sont les colonnes qui écoutent, étrangement je n’arrive pas à apercevoir de scan sur cette matrice.
Mais lorsque j'appuie sur une touche d'une colonne dont je mesure le connecteur, un pic très court survient toutes les 125 millisecondes. Je ne sais pas si quelqu'un arrive à en tirer quelque chose...



Par contre j'ai eu l'idée de faire usage du code QR, qui serait un peu plus facile et beaucoup plus promettant.

L'application Casio Edu+ produit un code comme ça:

(il s'agit du programme de la vidéo)
-95→A
Répéter200
Aller à x=A; y=sin(A÷5)×20
Stylo écrit
A+1→A


Qu'il faudrait ensuite traduire en "coordonnées de touches" à l'aide d'un interprète écrit en python qui produirait un résultat comme ceci:

Voir coordonnées de touches
Cacher coordonnées de touches

g
41
23
12
61
61
m
11
65
65
61
61
d
18
05
61
35
18
05
42
12
34
32
11
65
61
61
e
g
18
05
31
01
61
61
61


Ce n'est pas la méthode la plus rapide, mais c'est beaucoup plus facile que devoir taper les coordonnées individuelles pour chaque touche comme je dois faire actuellement. X)
Lephenixnoir Hors ligne Administrateur Points: 21346 Défis: 149 Message

Citer : Posté le 12/01/2022 19:36 | #


Mais lorsque j'appuie sur une touche d'une colonne dont je mesure le connecteur, un pic très court survient toutes les 125 millisecondes. Je ne sais pas si quelqu'un arrive à en tirer quelque chose...

Le scan du clavier doit être contrôlé par une interruption, et le signal haut sert dans la configuration "idle" à détecter "n'importe quelle" pression de touche pour envoyer la requête d'interruption ? Ensuite l'OS planifie un scan toutes les 125 ms jusqu'à ce qu'aucune touche ne soit plus pressée, auquel cas tout s'arrête. Un truc comme ça ?

En effet c'est compliqué, eeet comme tu l'as si bien vu le QR code c'est au moins aussi bien.

Tu ne devrais pas avoir trop de mal à faire cette traduction. Personnellement j'ai écrit un interpréteur fx-92 SC+ qui lance les programmes sur le PC, et tu pourrais réutiliser la liste de tokens voire directement le parser, qui te donne un AST qui serait traduisible en une série d'inputs simplement par une fonction récursive. Je peux contribuer de ce côté-là si ça t'arrange

Ça a l'air parti pour être super stylé ça !
Aditya02 Hors ligne Membre Points: 5 Défis: 0 Message

Citer : Posté le 13/01/2022 19:42 | # | Fichier joint


Le scan du clavier doit être contrôlé par une interruption, et le signal haut sert dans la configuration "idle" à détecter "n'importe quelle" pression de touche pour envoyer la requête d'interruption ? Ensuite l'OS planifie un scan toutes les 125 ms jusqu'à ce qu'aucune touche ne soit plus pressée, auquel cas tout s'arrête.


Ça doit très certainement être ça!

Tu ne devrais pas avoir trop de mal à faire cette traduction. Personnellement j'ai écrit un interpréteur fx-92 SC+ qui lance les programmes sur le PC, et tu pourrais réutiliser la liste de tokens voire directement le parser, qui te donne un AST qui serait traduisible en une série d'inputs simplement par une fonction récursive. Je peux contribuer de ce côté-là si ça t'arrange


WAOUW c'est fantastique!!!
Ça m’arrangerait beaucoup ! J'ai fait une traduction manuelle du lien du code QR à l'aide de ta liste des tokens pour mettre en évidence les quelques exceptions regardant les coordonnées. Par exemple, la viariable "A", est saisie différemment dans l'instruction "mettre var à" par rapport aux autres instructions. Ensuite il y a des instructions qui nécéssitent un seul "EXE" (par exemple: stylo écrit, stylo relevé, mettre var à) et d'autres qui en nécéssitent deux (répéter, aller à). Mais j'ai mis tous ça en évidence dans le fichier joint.

Ça a l'air parti pour être super stylé ça !

Lephenixnoir Hors ligne Administrateur Points: 21346 Défis: 149 Message

Citer : Posté le 15/01/2022 11:57 | #


Ok, j'ai commencé à regarder ça. J'ai poussé un début de test simple sur le dépôt. Le fait que les variables soient saisies différemment selon le contexte n'est pas très grave parce que comme on a l'AST on fait une récursion du haut vers le bas, donc on connaît le contexte.

Voilà un exemple avec un programme du concours de 2019... les commandes sont indiquées en commentaires, et pour l'instant les noms de touches sont en brut pour simplifier la lecture :

% ./fx92.py --keyseq -u tests/contest2019/3217.txt
[urlparser] URL includes protocol, will start after '+E-'
[urlparser] URL is not strict hexa, noise will be skipped
# GOTO 4.0 17.0
OPTN
4
  # CONST 4.0
  <TODO>
EXE
  # CONST 17.0
  <TODO>
EXE
EXE
# ASSIGN 44.0 D
OPTN
DOWN
3
  # CONST 44.0
  <TODO>
EXE
RIGHT
4
EXE
# ASSIGN 54843253.0 A
OPTN
DOWN
3
  # CONST 54843253.0
  <TODO>
EXE
EXE
# PENDOWN
OPTN
DOWN
1
[???] N.REPEAT repeat
# PENUP
OPTN
DOWN
2
# FORWARD 30.0
OPTN
1
  # CONST 30.0
  <TODO>
EXE
EXE
# ASSIGN <Node:MUL> A
OPTN
DOWN
3
[???] N.MUL mul
EXE
EXE
[???] N.REPEAT repeat
# GOTO <Node:VAR> 22.0
OPTN
4
  # VAR x
  <TODO>
EXE
  # CONST 22.0
  <TODO>
EXE
EXE
[???] N.REPEAT repeat
# PENUP
OPTN
DOWN
2
# GOTO <Node:VAR> 8.0
OPTN
4
  # VAR D
  <TODO>
EXE
  # CONST 8.0
  <TODO>
EXE
EXE
# PENDOWN
OPTN
DOWN
1
# GOTO 45.0 5.0
OPTN
4
  # CONST 45.0
  <TODO>
EXE
  # CONST 5.0
  <TODO>
EXE
EXE
# GOTO 42.0 7.0
OPTN
4
  # CONST 42.0
  <TODO>
EXE
  # CONST 7.0
  <TODO>
EXE
EXE
# GOTO 41.0 2.0
OPTN
4
  # CONST 41.0
  <TODO>
EXE
  # CONST 2.0
  <TODO>
EXE
EXE
# FORWARD 5.0
OPTN
1
  # CONST 5.0
  <TODO>
EXE
EXE
# GOTO <Node:VAR> 4.0
OPTN
4
  # VAR x
  <TODO>
EXE
  # CONST 4.0
  <TODO>
EXE
EXE
# GOTO 45.0 1.0
OPTN
4
  # CONST 45.0
  <TODO>
EXE
  # CONST 1.0
  <TODO>
EXE
EXE
# GOTO <Node:VAR> <Node:VAR>
OPTN
4
  # VAR x
  <TODO>
EXE
  # VAR A
  <TODO>
EXE
EXE
# GOTO <Node:VAR> -7.0
OPTN
4
  # VAR D
  <TODO>
EXE
  # CONST -7.0
  <TODO>
EXE
EXE
# GOTO 42.0 <Node:VAR>
OPTN
4
  # CONST 42.0
  <TODO>
EXE
  # VAR A
  <TODO>
EXE
EXE
# GOTO <Node:VAR> 1.0
OPTN
4
  # VAR x
  <TODO>
EXE
  # CONST 1.0
  <TODO>
EXE
EXE
# PENUP
OPTN
DOWN
2
# ASSIGN 4.5 A
OPTN
DOWN
3
  # CONST 4.5
  <TODO>
EXE
EXE
[???] N.REPEAT repeat
# ASSIGN 5642465600.0 A
OPTN
DOWN
3
  # CONST 5642465600.0
  <TODO>
EXE
EXE
# GOTO <Node:VAR> 2.0
OPTN
4
  # VAR x
  <TODO>
EXE
  # CONST 2.0
  <TODO>
EXE
EXE
[???] N.REPEAT repeat
# ASSIGN 81923201.0 A
OPTN
DOWN
3
  # CONST 81923201.0
  <TODO>
EXE
EXE
[???] N.REPEAT repeat

Tu peux voir que les EXE vs EXE/EXE ça passe très bien, la saisie des variables dans ASSIGN aussi ; on peut même optimiser quand la variable est A pour gagner quelques pressions. Tu peux voir que j'ai pas fait toutes les fonctions (et en particulier pas les conditions/boucles) mais ça ne posera pas de problème, même avec les DOWN nécessaires pour sortir de la boucle à la fin.

Le plus subtil sera de reproduire fidèlement les expressions, parce qu'ironiquement le parser élimine les parenthèses. Mais ça donne l'opportunité de simplifier en enlevant les parenthèses/multiplications pas nécessaires pour aller un peu plus vite...

LienAjouter une imageAjouter une vidéoAjouter un lien vers un profilAjouter du codeCiterAjouter un spoiler(texte affichable/masquable par un clic)Ajouter une barre de progressionItaliqueGrasSoulignéAfficher du texte barréCentréJustifiéPlus petitPlus grandPlus de smileys !
Cliquez pour épingler Cliquez pour détacher Cliquez pour fermer
Alignement de l'image: Redimensionnement de l'image (en pixel):
Afficher la liste des membres
:bow: :cool: :good: :love: ^^
:omg: :fusil: :aie: :argh: :mdr:
:boulet2: :thx: :champ: :whistle: :bounce:
valider
 :)  ;)  :D  :p
 :lol:  8)  :(  :@
 0_0  :oops:  :grr:  :E
 :O  :sry:  :mmm:  :waza:
 :'(  :here:  ^^  >:)

Σ π θ ± α β γ δ Δ σ λ
Veuillez donner la réponse en chiffre
Vous devez activer le Javascript dans votre navigateur pour pouvoir valider ce formulaire.

Si vous n'avez pas volontairement désactivé cette fonctionnalité de votre navigateur, il s'agit probablement d'un bug : contactez l'équipe de Planète Casio.

Planète Casio v42 © créé par Neuronix et Muelsaco 2004 - 2022 | Il y a 64 connectés | Nous contacter | Qui sommes-nous ? | Licences et remerciements

Planète Casio est un site communautaire non affilié à Casio. Toute reproduction de Planète Casio, même partielle, est interdite.
Les programmes et autres publications présentes sur Planète Casio restent la propriété de leurs auteurs et peuvent être soumis à des licences ou copyrights.
CASIO est une marque déposée par CASIO Computer Co., Ltd