Documentation sur le port IO

 Voici de la doc sur le programmation du port de communication que j'ai pris sur TI-FR 

  Documentation technique du port de la Ti89
Partie I : L'écriture sur les lignes
By Hiddenfiles (c) 2000

 

Telecharger:
Wire 89
Wirelib

Pour toutes vos questions, suggestions à hiddenfiles@online.fr !!!
Use 3Send, the fast free mail sender at www.3send.com.bi !!!

WARNING About IOCONS.89Z !!!
Don't press on the keys like a barbarian or the program will hang on !!
Ne pas appuyer comme un barbare sur les touches sinon tout se plante !!

I. Préambule

Tout d'abord bonne année 2000 à tous les utilisateurs de Ti89 et aussi aux autres et meilleurs vœux pour cette année qui commence. Il faut partir d'un constat : la documentation autour de la programmation du port de la Ti89 est quasi inexistante, et sinon dans la langue de Sheakspeare. C'est de ce point que m'est venu l'idée d'écrire cette doc. afin que tous ceux parlant la langue de Molière (quelle culture ! mais on aurait aussi pu dire Corneille ou Voltaire ... mais passons) puissent enfin découvrir l'éventail de possibilités que peut offrir cette petit prise Jack 2,5mm. Nous verrons ainsi par la pratique comment construire deux petites interfaces pour la calculatrice ainsi que, pour les plus téméraires, comment programmer l'état du port d'I/O. J’espère que ce ne sera qu'un point de départ et que fleuriront bientôt foule d'accessoires plus utiles les uns que les autres pour cette fantastique machine qu'est la Ti89. 

 Je vous conseille de lire cet doc. linéairement, les informations étant disséminées entre les différents chapitres.

 

II. Une base expérimentale : le programme IOCONS

Afin de pouvoir effectuer les premiers test de nos futurs montages, et avant de développer pour ceux là un logiciel spécifique, je vous propose d'utiliser I/O Device Console, sorte de drivers générique que j'ai programmé moi-même. Je dois avouer qu'il s'agit de mon premier programme fonctionnel en Asm 68k (mais, ayant eu une Ti83 avant, je connais aussi pas mal le Z80).

A. Installation

  • Pour utiliser I/O DC, vous devez avoir installé DoorsOS II v0.92 ou Kernel v0.6. J'ai testé le prog. sur la rom 2, je ne sais pas si ça marche en rom 1 (Mailez-moi pour me le dire).
  • Il suffit ensuite d'envoyer avec le link le fichier IOCONS.89Z et la librairie UTIL.89Z (Il s'agit de la version pour la rom 2.0x.Si vous avez la rom 1.x une version spécifique existe sur www.ti-fr.org)

B. Utilisation

Démarrer iocons() dans le Home Screen. L'interface apparait.

  • "Etat actuel" indique le potentiel présent sur le port tel que
  • R0 0V entre la masse et le fil rouge Etat logique 0
  • R1 +3V entre la masse et le fil rouge Etat logique 1
  • B0 0V entre la masse et le fil blanc Etat logique 0
  • B1 +3V entre la masse et le fil blanc Etat logique 1
  • Il s'agit de tensions de commande (voir "Exploitation").L'état par défaut de la calculatrice est R1:B1

!!!TIPS : Fait étrange, lorsque l'on éteint la calc. et que l'un des fils

est à l'etat 0, la calculatrice se rallume aussitôt l'a-t-on éteinte. !!

  • Pour quitter, il faut appuyer deux fois consécutivement sur ESC (Bug mineur qui n'affecte pas l'efficacité du programme).Pour des raisons de securité (voir TIPS1) les fils sont remis l'état 1 lorsque l'on quit I/O DC.
  • Les options du menu principal sont assez explicites et vous proposent de configurer les état logiques des fils du port I/O.

 

III. L'exploitation de programme

A. Un dispositif de commande basse puissance

Ce montage permet, grƒce au logiciel, de contrôler la mise sous tension ou hors tension d'un dipôle (ici une LED) demandant peu de puissance. En effet, la tension et l'intensité aux bornes de ce dipôle dépendent directement de la puissance de l'alimentation (ici une pile plate de 4.5V) et du modÈle de transistor choisi. Je conseille d'utiliser un modÈle C945.

--> Piloté par IOCONS.89Z

CLGNR.89Z

B. Un montage plus évolué de commande haute puissance.

Reprise de la nomenclature:

* IC : Un circuit intégré ULN2803A ou ULN2804. Ceux-ci disposent de 8 ampli. de courant et on ne se sert que de deux de ceux-ci.

Gaspillage ? Si quelqu'un connait un IC équivalent contenant moins d'ampli., qu'il me Mail.

* T1 et T2 : Transistors NPN C945 ou équivalents.

* D1 : Une bête diode 1N4004, elle est juste là pour protéger l'IC des "Oups, j'ai mis la pile à l'envers !".

* RL1 et RL2 : relais miniature Fujitsu FBR244 ou Siemens V23026-A1 monostable ou des autres équivalents. Tout dépend de l'intensité du courant que vous voulez controler.

* Pour le reste, faiter comme vous voulez, le vous conseille de placer un interrupteur de coupe circuit ainsi que d'utiliser un support pour IC si vous voulez pas griller l'ULN en le soudant. Utilisez des plaques de backélite et des borniers à vis pour connecter les bornes des relais. Pour connecter à la TI, soit vous coupez votre cable TI-to-TI en deux (comme moi), soit vous achetez une prise femelle pour brancher le cable TI-to-TI entre l'interfaceet la calc.

!!! Attention !!! Les prises Jack 2,5mm males vendues dans le commerce ne rentrent pas dans la prise de la Ti89.

Le circuit doit être alimenté en 5V sous environ 200mA. Il est donc préférable d'utiliser une alimentation stabilisée (si vous n'en avez pas, mailez moi, je vous enverrais le schéma. On pourrait aussi placer une résistance au collecteurs des transistors si on voulait être sur de bien les protéger. De plus, l'ULN n'est pas un Pentium, mais il à tendance à chauffer, tout comme les relais sous de fortes intensités. Si vous mettez le circuit en boite, prévoyez une aération adéquat. L'avantage de ce systÈme est que vous pouvez couper des tensions importantes. Les relais Fujitsu par exemple peuvent couper jusqu'a 220V à maximun 1,6A
!!! ATTENTION !!! UNE TELLE UTILISATION EST A FAIRE UNIQUEMENT SOUS LA SURVEILLANCE D'UN PERSONNEL COMPETANT ET DANS DES CONDITIONS D'ISOLATION ET DE SECURITES OPTIMALES. JE DECLINE TOUTE RESPONSABILITE SUR CE QUI POURRAIT ADVENIR DANS DE TELLES CONDITIONS D'UTILISATION !!!

En tous cas, ne dépassez pas 1,6A si vous ne voulez pas voir vos relais fondre. Il ne s'agit pas de contrôler une centrale nucléaire à la 89. Ce montage coute dans les 50 FF, mais il a l'intéret d'être bien Fun et de permettre une automatisation de deux voies, pour peu qu'on écrive le logiciel adéquat (voir Programmer le port).

Comment ca marche ??

Le signal de +3V émit par la calculatrice est amplifié une premiÈre fois par les transistors puis fortement amplifié par l'ULN pour permettre de commander les relais. Pour faire fonctionner ces deux montages, servez-vous de IOCONS ou programmez un logiciel spécifique...

 

IV. Programmation du port

 

Il est maintenant tant d'apprendre à programmer le port I/O de la 89, et cela en DirectAccess. Ici point de Basic, rien que de l'Assembleur. Si vous voulez acquérir les bases rapidement, jetez vous sur l'excellent Asm89 dispo sur www.ti-fr.org et sur les doc de DoorsOS version Développeur qui, bien que succintent, donnent des informations trÈs pointues (trop ?) sur le software et le hardware de la 89. N'hésitez pas non plus à mater du code source, c'est comme ça qu'on apprend (commencez par jeter un coup d'œil sur IOCONS.ASM, j'ai fait exprÈs de beaucoup commenter le programme).

Contrairement aux Z80 et autres 8086, le CPU Motorola 68000 embarqué sur la TI89 ne comporte pas d'instruction de sortie directe sur un port. En Z80, il suffisait de faire OUT port,valeur pour sortir quelque chose sur un port E/S. En 68k, il faut écrire dans des zones de mémoire spécifiques. Les plus importantes pour nous sont les plages 60000C et 60000E, car c'est elles qui ont la lourde responsabilité de gérer la prise de la TI. Ne vous inquiétez pas, tout va devenir plus clair.

Une chose importante à savoir est que l'etat par défaut des deux lignes (fils) est 1. Cela à son importance car quand on Reset une des lignes, son état passe à 1 et pas à 0 comme on pourrait le penser.

 

A. La programmation directe :

-----------------------------

* Activer le DirectAccess.
Pour pouvoir agir directement sur l'état du port, il faut autoriser le DirectAccess. On utilise la commande suivante :
bset.b #6,$60000C

* Passer les lignes à 1 (+3V).
Ainsi, pour passer les lignes à 1, il suffit de faire un reset. On utilise les commandes suivantes :
bclr.b #x,$60000E
On remplace x par 0 pour la ligne rouge et 1 pour la ligne blanche.
Ainsi pour passer le fil rouge à +3V on fera : bclr.b #0,$60000E

* Passer les ligne à 0 (0V).
Pour passer les lignes à 0, on utilise la commande suivante :
bset.b #x,$60000E
On remplace x par 0 pour la ligne rouge et 1 pour la ligne blanche.

* Changer l'état des lignes.
On utilise la commande suivante pour inverser l'état actuel d'une ligne :
bchg.b #x,$60000E
On remplace x par 0 pour la ligne rouge et 1 pour la ligne blanche.
L'inconvénient de cette commande est qu'on ignore l'état dans lequel se trouve le port.

* Bloquer le DirectAccess.
A la fin de chaque programme utilisant le port, il faut IMPERATIVEMENT bloquer le DirectAccess avec la commande suivante :
move.b #$8D,$60000C
Sinon on crée de problemes avec le port qui ne se verrons peut-être pas tout de suite mais qui risquent de gêner les transferts.

B. Programmer avec WIRELIB

Si toutes ces commandes esotériques vous laissent de glace, vous pouvez vous servir de la librairie WIRELIB. Je l'ai programmée pour faciliter la syntaxe des commandes. Tout d'abord, il faut penser à l'inclure dans le header avec :
include "wirelib.h"
Il ne faut pas non plus oublier de transferer le fichier WIRELIB.89Z sur la calculatrice. La librairie tourne sous Doorsos et sur (normalement) toutes les roms.
Il suffit ensuite de suivre le tableau :

commande

Agit sur

Action

jsr wirelib::set_red_up

fil rouge

Met son état à 1

jsr wirelib::set_red_down

fil rouge

Met son état à 0

jsr wirelib::set_wht_up

fil blanc

Met son état à 1

jsr wirelib::set_red_down

fil blanc

Met son état à 0

jsr wirelib::chg_red

fil rouge

Change son état

jsr wirelib::chg_wht

fil blanc

Change son état

jsr wirelib::enable_DA

Etat du port

Autorise le DirectAccess

jsr wirelib::disable_DA

Etat du port

Interdit le DirectAccess

jsr wirelib::wait

Timer

Attend d0.w cycles.

jsr wirelib::version

d0.b

Retourne la version de wirelib dans d0.b

La fonction wirelib::version retourne dans d0.b un byte tel que #100 pour la version 1.00. A vous d'analyser.

C. Exemples

-----------

J'ai joint à cette doc deux fichiers pouvant servir d'exemple :

CLGNR. est un petit programme permettant de faire "clignoter" l'étatdu fil rouge. On peut s'en servir avec le schéma 1.

WIRETEST. est mon programme de débuggage de WireLib. Je l'ai écrit l'arrache et il est trÈs brouillon mais on y voit comment se servir de wirelib.

IOCONS. (voir plus haut), illustre bien la programmation directe. Il Contient encore quelques légers bugs.

D]le mot de la fin

Voila, nous arrivons au bout de cette documentation. Je pense que vous êtes maintenant capable de faire des trucs sympas avec le port I/O de la calculatrice. Aidez-vous des schémas PORT1.BMP et PORT2.BMP pour créer les votres et envoyez-les moi à hiddenfiles@online.fr Je vous promet pour bientôt la deuxiÈme partie de la doc : Comment lire des données sur le port, ainsi qu'une nouvelle version améliorée de WIRELIB. A Bientôt,

Hiddenfiles.

Vous trouverez les prochaines versions de cette doc sur www.ti-fr.org

All rights reserved, January 2000.
Copyright Hiddenfiles, January 2000.