* *
* *
Electronique
+ Arduino
 -  Bus I2C
+ Divers
+ Game Boy Advance
+ Robotique
+ Z80
Informatique
+ Commande numérique
+ Les DLL
+ Mon Guppy
+ divers
Mathématiques
Astronomie
Webmaster - Infos
Ecrire à Grosse Christophe  Webmestre
Ajouter aux favoris  Favoris
Recommander ce site à un ami  Recommander
Version mobile   Version mobile
Recherche




Préférences

 Nombre de membres 30 membres


Utilisateurs en ligne

( personne )
Programmation du bus I2C sous Windows


Le principe de fonctionnement

Pour commander l'interface i2c universelle pour PC décrite sur ce site ainsi que tous les modules qui se conectent sur le bus sous windows, le plus simple consiste a utiliser une DLL. De par la structure même des DLL, ces fichiers sont utilisables par bon nombre de languages ( Delphi, Visual Basic , C++ , Paradox ... et j'en passe ). La DLL proposée contient un certain nombre de fonctions et de procédures permettant la gestion de mon interface ainsi que la commande d'un certain nombre de modules proposés sur ce site. A terme, tous les modules seront asservis sous windows ! Cette DLL est donc amené a évoluer.

Attention ! Même si cette DLL est compilée en 16 Bits elle parait fonctionner correctement sous Windows 3.1 , windows 3.11 et Windows 95 ! Les tests ont été effectuer sur plusieurs machines avec succés mais je ne peux pas garantir le fonctionnement de celle-ci sur toutes les machines du marché ...

Utilisation pratique de la DLL

Pour commencer, télécharger I2C.DLL ( 5 Ko ) puis copier ce fichier dans le répertoire C:/Windows/System/ de votre machine. Voila ! la DLL est maintenant accessible à tous les programmes Windows.

Vu le nombre de demande concernant les sources de cette DLL qui me sont parvenu j'ai décidé de les rendre public sur internet. Vous pouvez donc télécharger Les sources de la DLL pour delphi 1.00

Le tableau ci dessous liste les fonctions et les procedures disponibles dans cette DLL. Ce tableau sera mis a jour au fur et à mesure des mises à jours.

Controle de bas niveau de l'interface

procedure out(add : integer;dat : byte);

OUT transfère un octet de donné DAT vers le port de sortie ADD :

ADD : Adresse du port de sortie entre 0 et 65535
DAT : La donné a écrire sur le port entre 0 et 255

function inp(add : integer):byte;

INP permet de lire l'octet présent sur le port ADD :

ADD : Adresse du port à lire entre 0 et 65535

procedure clear_i2c_error;

Clear_i2c_error efface le Flag d'erreur. A Utiliser avant toute instruction controlant le BUS I2C et si l'on veut controler les erreurs de communication sur le bus. :

( Aucun Paramêtre )

function i2c_error:boolean;

I2c_error permet de tester l'état du flag d'erreur. Cette fonction s'utilise conjointement avec Clear_i2c_error :

La fonction renvoie TRUE si une erreur c'est produite sur le bus I2C
La fonction renvoie FALSE si aucune erreur ne c'est produite.

procedure port_lpt(numero : byte);

Port_lpt permet de choisir le N° du port parallèle sur lequel est conectée l'interface :

numero : N° du port parallèle utilisé , 1 ou 2

procedure set_tempo(t : integer);

Set_tempo effectue le réglage des boucles de temporisation utilisées pour générer les impulsions sur le bus I2C :

t : La valeur fixant le "tempo" entre 0 et 65535

Remarque : Initialement cette valeur vaut 800, ce qui convient parfaitement pour un Pentium 100 et tout ordinateur moins rapide. Pour un ordinateur plus rapide, il convient d'augmenter cette valeur. Une procedure de calibration automatique devrait voir le jour ...

procedure init_i2c;

Init_i2c met le bus i2c dans "l'état de repos" ( Lignes SDA et SCL relaxées ) :

( Aucun paramêtre ) :

procedure start;

Start envoie une "condition de start" sur le bus I2C afin que l'ordinateur en prenne le controle :

( Aucun paramêtre )

procedure stop;

Stop envoie une "condition de stop" sur le bus I2C avant de le remetre au repos :

( Auncun paramêtre )

procedure ack;

Ack envoie une condition d'acquitement en même temps qu'un Top d'horloge :

( Auncun paramêtre )

procedure sans_ack;

Sans_ack envoie un top d'horloge sans condition d'acquitement :

( Aucun paramêtre )

procedure sortie(valeur : byte);

Sortie envoie un octet valeur sur le bus I2C avec un test de la condition d'acquitement à la fin de la transmission :

Valeur : La valeur a envoyer sur le bus entre 0 et 255

procedure sortie_ack(valeur : byte);

Sortie_ack envoie un octet valeur sur le bus I2C sans faire de test d'acquitement :

Valeur : La valeur a envoyer sur le bus entre 0 et 255

function Lecture:byte;

Lecture reçoit un octet provenant du bus i2c :

La fonction renvoie l'octet reçu.

Controle du module 16 i/o numériques

procedure set_num_add(numero : integer);

Set_num_add configure l'adresse du module I/O auquel l'on veut accéder. Cette procédure doit être appelée au moins un fois avant de pouvoir écrire ou lire une donnée sur un des modules :

Numero : Adresse du module I/O entre 32 et 39

procedure sortie_num(valeur : byte);

Sortie_num envoie un octet valeur sur le port de sortie d'un module I/O dont l'adresse a été spécifier avec la procédure Set_num_add :

Valeur : La valeur a envoyer sur un module I/O comprise entre 0 et 255

function entree_num : byte;

Entree_num lit la valeur présente sur le port d'un module I/O dont l'adresse a été spécifié par Set_num_add :

La fonction renvoie la valeur lu.

Controle du module Récepteur infrarouge RC5

function telecommande : byte;

Telecommande Scrute le module de réception RC5 et analyse la réponse :

La fonction renvoie 255 si aucune touche de la télécommande n'a été pressée
Sinon la fonction renvoie le N° de la touche qui a été activée.

Pour exemple, voici les codes reçus pour une télécommande de chez Selectronic :

ctele.gif
0 : {La touche 0}
1 : {La touche 1}
2 : {La touche 2}
3 : {La touche 3}
4 : {La touche 4}
5 : {La touche 5}
6 : {La touche 6}
7 : {La touche 7}
8 : {La touche 8}
9 : {La touche 9}
10 : {La touche ./..}
12 : {La touche On/off}
56 : {La touche VCR}
33 : {La touche <}
32 : {La touche >}
20 : {La touche Contraste +}
18 : {La touche Luminosité +}
28 : {La touche Couleur +}
21 : {La touche Contraste -}
19 : {La touche Luminosité -}
29 : {La touche Couleur -}
22 : {La touche Graves +}
24 : {La touche Aigues +}
16 : {La touche Son +}
23 : {La touche Graves -}
25 : {La touche Aigues -}
17 : {La touche Son -}
13 : {La touche Speaker on/off}
27 : {La touche Left speaker on/off}
26 : {La touche Right speaker on/off}


Controle des modules I2C à base de PIC16C84

procedure sortie_PIC(add,commande,donnee : byte)

Sortie_PIC, routine de bas niveau permet d'envoyer une commande à un module à base de PIC16C84

Add : adresse du module entre 24 et 31
Commande : N° de la function sollicitée entre 0 et 7
Donnee : Un octet de donnée transmis au PIC

function entree_PIC(add,commande : byte) : byte;

Entree_PIC permet de lire un des registres du PIC16C84

Add : adresse du module entre 24 et 31
Commande : N° du registre à lire entre 0 et 7

La fonction renvoie la valeur contenue dans le registre.

function get_id(add : byte) : string;

Get_id permet de lire la chaine d'identification d'un module

Add : adresse du module entre 24 et 31
Commande : N° du registre à lire entre 0 et 7

La fonction renvoie la chaine d'identification du module sous la forme d'une chaine de 8 caractêres ( Les 5 premiers pour le nom de l'application et les 3 suivants pour le numéro de version ).

procedure set_register(add,no,dat : byte)

Set_register initialise la valeur d'un registre du PIC

Add : adresse du module entre 24 et 31
No : N° du registre à modifier entre 0 et 7
Dat : La valeur a stocker dans le registre

procedure set_all(add,dat : byte)

Set_all initialise tous les registres du PIC avec une valeur

Add : adresse du module entre 24 et 31
Dat : La valeur a stocker dans tous les registres

procedure save_register(add,no : byte)

Save_register sauve le contenu d'un registre du PIC dans l'EEPROM ( Mémoire non volatile )

Add : adresse du module entre 24 et 31
No : N° du registre à sauvegarder entre 0 et 7

procedure save_all(add : byte)

Save_all sauve tous les registres du PIC en EEPROM ( Mémoire non volatile )

Add : adresse du module entre 24 et 31

procedure restore_register(add,no : byte)

restore_register restaure le contenu d'un registre à partir de celui de l'EEPROM

Add : adresse du module entre 24 et 31
No : N° du registre à restaurer

procedure restore_all(add : byte)

Restore_all restaure tous les registres du PIC a partir de celui de l'EEPROM

Add : adresse du module entre 24 et 31

procedure auto_load(add : byte)

Auto_load force la restauration automatique du contenu de tous les registres a partir de celui de L'EEPROM lors du POWER ON RESET du module

Add : adresse du module entre 24 et 31

procedure no_auto_load(add : byte)

No_auto_load désactive la restauration automatique des registres a partir du contenu de l'EEPROM lors du POWER ON RESET du module

Add : adresse du module entre 24 et 31

Controle du module LCD

procedure set_lcd_add(numero : integer)

Set_lcd_add sélectionne l'adresse du module LCD

Numero : adresse du module entre 24 et 31

procedure set_lcd_tempo(tempo : integer)

Set_lcd_tempo permet de fixer la durée des temporisations pour l'affichage.Par défaut, tempo vaut 100 ms.

Tempo : Durée de la temporisation en ms

procedure lcd_write_char(carac : char)

Lcd_write_char affiche un caractêre sur l'écran LCD

Carac : Caractêre a afficher

procedure lcd_screen_off;

Lcd_screen_off Etteint l'afficheur LCD ( sans effacer sa mémoire )

procedure lcd_screen_on;

Lcd_screen_on Allume l'écran LCD

procedure lcd_clear_screen;

Lcd_clear_screen efface l'écran LCD et ramène le curseur au début de la ligne

procedure lcd_home;

Lcd_home ramène le curseur au début de la ligne

procedure lcd_cursor_left;

Lcd_cursor_left déplace le curseur d'un cran vers la gauche

procedure lcd_cursor_right

Lcd_cursor_right déplace le curseur d'un cran vers la droite

procedure lcd_write_string(s : string)

Lcd_write_string Efface l'écran puis affiche une chaine de caractêre

S : La chaine de caractêre a afficher

Dernière mise a jour le 21.02.99

Quelques réalisations utilisant la DLL



 remote.gif
Une chaine Hifi avec Télécommande infrarouge !

  


Date de création : 28/10/2005 @ 17:27
Dernière modification : 31/01/2008 @ 07:46
Catégorie : Bus I2C
Page lue 8087 fois


Prévisualiser la page Prévisualiser la page     Imprimer la page Imprimer la page

react.gifRéactions à cet article


Personne n'a encore laissé de commentaire.
Soyez donc le premier !


^ Haut ^

GuppY - http://www.freeguppy.org/    Site créé avec GuppY v4.5.8 © 2004-2005 - Licence Libre CeCILL   GuppY - http://www.freeguppy.org/

Document généré en 0.2 seconde