Gentoo Forums
Gentoo Forums
Gentoo Forums
Quick Search: in
[prog en C] problemes avec I2c
View unanswered posts
View posts from last 24 hours

 
Reply to topic    Gentoo Forums Forum Index French
View previous topic :: View next topic  
Author Message
john7002
Apprentice
Apprentice


Joined: 21 Jan 2004
Posts: 238
Location: United Kingdom

PostPosted: Thu Aug 03, 2006 8:57 am    Post subject: [prog en C] problemes avec I2c Reply with quote

Je fais ma premiere experience en developpement I2C sous Linux et j'ai quelque points que j'aimerais eclaircir:

Tout d'abord niveau materiel j'ai une carte mere EPIA M10000, grace a son connecteur I2C j'y connecte une carte tres simple comportant le chip PCA9555 de Philips.

Datasheet : http://www.semiconductors.philips.com/acrobat_download/datasheets/PCA9555_5.pdf

Sur ce chip a la broche 4 (voir figure1, page3) une diode electroluminescente est connectee. Les broches 2,3 et 21 sont mis a zero (ce sont les broches pour l'adresse du composant).

Voila une description succinte de l'hardware.

Niveau linux, tout semble fonctionner, j'ai bien charger les modules i2c.

1) Premier hic: Lorsque je tape

Code:
i2cdetect 0


le syteme detecte 3 adresses !! 0x69 0x20 0x50, or selon le datasheet (page 7) et du fait que A0, A1 et A2 soient a 0 mon adresse devrait etre 0x40. A quoi correspondent donc ces 3 adresses alors que je n'ai qu'un seul I2C slave??? et finalement comment je peux savoir quel adresse choisir?


2) Deuxieme hic: je voudrais simplement allumer la diode:

Selon la datasheet, il faut envoyer l'adresse du periph, puis 0x02 (pour dire qu'on accede au registre output), puis comme ma diode est sur la broche I/O0.0 il faut que j'envoi un niveau bas sur ce bit soit 0x00.
Je fais donc de cette maniere (qui doit etre fausse) mais rien ne se passe :cry:


Code:

#include <errno.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <linux/i2c-dev.h>

#define SLAVE_ADDR      0x69 // J'AI ESAYE LES 3 ADRESSES MAIS PAS DE RESULTAT...


int main(int argc, char *argv[]) {
   char *end;
   int res,file;
   int e1;
   char filename[20] ;
   long funcs;
   
   //###### access I2c device #########
   sprintf(filename,"/dev/i2c-0");
   if ((file = open(filename,O_RDWR)) < 0) {
     e1 = errno;
     if (e1 != ENOENT) {
       fprintf(stderr,"Error: Could not open file '%s' : %sn",
               filename,strerror(e1));
       if(e1 == EACCES)
         fprintf(stderr,"Run as root?n");
     }
   }
   //#########################

   // ##### initilaisation de l'I2c ##########
   if (ioctl(file,I2C_FUNCS,&funcs) < 0) {
     fprintf(stderr,
             "Error: Could not get the adapter functionality maxtrix: %sn",
             strerror(errno));
     exit(1);
   }

   //###########################

   // ###### test pour savoir si smbus-control peut etre utiliser ######
   if (! (funcs & I2C_FUNC_SMBUS_QUICK)) {
     fprintf(stderr,
             "Error: Can't use SMBus Quick Write command "
             "on this bus (ISA bus?)n");
     exit(1);
   }
   fprintf(stderr, "I2C functionality: %08Xn", funcs);
   // ##############################

   // #### test pour tester si le periph est occupe ######
   if (ioctl(file,I2C_SLAVE,SLAVE_ADDR) < 0) {
     if (errno == EBUSY) {
       printf("device is busyn");
     }
     exit(0);
   }
   //########################
     

     // on veut ecrire sur les registres output donc on envoit @slace puis 0x02
     res = i2c_smbus_write_byte_data(file, SLAVE_ADDR, 0x02);
     if (res <0) {printf("erreur ecriture");}

     // on met un etat bas a la broche de la diode pour l'allumer
     res = i2c_smbus_write_byte_data(file, 0x00, 0x00);
     if (res <0) {printf("erreur ecriture");}

}


Je n'ai pas de message d'erreur par contre il me renvoit bien des valeurs quand je veux lire des registres... Quelqu'un a de l'experience des ports I2C?? Merci d'avance.

PS: desole pour les accent, clavier qwerty
_________________
la vrai bouffe me manque!!
Back to top
View user's profile Send private message
Display posts from previous:   
Reply to topic    Gentoo Forums Forum Index French All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum