Aller au contenu

ModChip France

Le kit Xecuter SX Pro va vous permettre de lancer le MODE RCM de la console, une licence pour le CFW à installer sur la console. Pas besoin d'ouvrir la console Nintendo Switch ni besoin de souder. Vous pourrez ainsi avec ce pack, lancer vos copies de jeux Nintendo Switch.
Acheter Maintenant

Jeux-Linker France

Xecuter SX Pro OS de la Team Xecuter vous permet de modifier votre Nintendo Switch, vous pouvez profiter des custom firmwares sur toutes les versions de la Switch et il est région free. Pré commander ce linker sur leur site, paypal supporté !
Acheter Maintenant

Chatbox - 128392 Messages. Spammers: neoskyriper (19639) . chronoss (18081) . crash over ride (13797) .

Charger plus
    Vous n'êtes pas autorisé à Chatter. Vous devez participer au moins une fois sur le Forum pour y avoir accès
    • b&nder
      b&nder

      I2C basique

      Le protocole I2C que l'on retrouve dans un grand nombre de circuit embarqué est utilisé en raison du faible nombre de fils qui lui permette de fonctionner,en effet avec seulement 2 fils(ligne de donée et ligne d'horloge) il est possible de se servir de ce protocole.

       

       

      Ce protocole utilise une communication de type maitre/esclave,sur le bus i2c le maitre peut envoyer un message a un ou plusieurs esclaves(capteurs,péripheriques...),pour cela le maitre doit adresser l'esclave sur le bus pour lui envoyer la transmission.

      Je vais utiliser un ecran oled qui utilise le protocole i2c pour communiquer avec l'Arduino(ce sera donc lui le Maitre du bus i2c).Le branchement est trés simple un pin pour sda(les donées) et un pin pour scl(l'horloge).

      Premiere Etape : Trouver l'adresse du composant esclave

      Pour trouver l'adresse du composant on va devoir scanner le bus i2c c'est à dire envoyer des données sur le bus à chaque adresses disponible et si unn composant est présent à une adresse il renvera un ACK(acknoledgment==message signalant sa presence) vers le maitre.L'adressage se fait sur 7bits+1bit pour le sens de la transmission.exemple 00000000 enverra un message dit BROADCAST qui s'adresse a tous les composants présents sur le bus(comme avec TCP/IP).Les adresses étant codés sur 7bits nous aurons donc ici 2^7(-1) soit 127 adresses à scanner(de 0000000 à 1111111).

      0000000 = 0 Hexadecimal = 0 Decimal

      1111111 = 7F Hexadecimal = 127 Decimal

      trame-sendacommand.JPG

      un programme faisant partie des librairies arduino permet cela,voyons sa sortie.

      Le montage est trés simple,pour un Arduino Uno:

      • le pin A4 correspond a SDA(les données)
      • le pin A5 correspond a SCL(lhorloge)

      bien sur ici il faut aussi du courant et une masse mais le protocole de communication lui utilise bien 2 fils.

      1508439237-montage.jpg

      1508439783-screenshot-20171019-210203.pn

      je connais donc l'adresse à utiliser pour mon composant sur le bus I2C.ce composant posséde ses propres registres avant de voir comment y accéder regarder la vidéo qui suit il s'agit du code du scanner que j'ai modifiée pour voir comment la fonction cherche.

       

       

      Pendant le scan l'ecran ne s'allume pas,il est alimenté mais pour l initialiser nous devons acceder à ses registres à l'aide d'une librairie par exemple.

      Pour l'ecran que j'utilise il me faut la librairie qui gere le composant SSD1306(nom technique de l ecran),nous allons donc regarder comment cette librairie gere les composants via i2c.

      pour l'exemple regardons la librairie d'Adafruit pour le ssd1306 :

      #ifndef _Adafruit_SSD1306_H_
      #define _Adafruit_SSD1306_H_
      
      #include <SPI.h>
      #include <Adafruit_GFX.h>
      
      #define BLACK 0
      #define WHITE 1
      #define INVERSE 2
      
      #define SSD1306_I2C_ADDRESS   0x3C

      une librairie est la pour faciliter le travail du programmeur,l'adresse sur le bus est connu d'avance dans ce cas la,mais si elle n'est pas disponible il faudra la chercher en scannat le bus comme nous l'avons fait avant.

      #define SSD1306_SETCONTRAST 0x81
      #define SSD1306_DISPLAYALLON_RESUME 0xA4
      #define SSD1306_DISPLAYALLON 0xA5
      #define SSD1306_NORMALDISPLAY 0xA6
      #define SSD1306_INVERTDISPLAY 0xA7
      #define SSD1306_DISPLAYOFF 0xAE
      #define SSD1306_DISPLAYON 0xAF

      quelques defines pour des fonctions de base.

      encore une fois quand une librairie est disponible tout ceci est transparent quand on code mais il est intéressant de comprendre comment cela fonctionne à un plus bas niveau.

      En cherchant dans la librairie on voit que les commandes sont envoyées via Wire une librairie de base de l'arduino.

       

      • Aimer 1
      • Nice 1


      Retour utilisateur


      merci l'artiste je vais me mettre a l'arduino je pense pour mieux comprendre tous ça ya pas mieux que de s'investir pour mieux comprendre thx :clein-oeil-2:

      Partager ce commentaire


      Lien vers le commentaire
      Partager sur d’autres sites

      yes c est toujours plus simple avec du concret! je vais rajouter la partie adressage de registres que tu vois mieux ce que tu cherchais! merci

       

      Partager ce commentaire


      Lien vers le commentaire
      Partager sur d’autres sites


      Créer un compte ou se connecter pour commenter

      Vous devez être membre afin de pouvoir déposer un commentaire

      Créer un compte

      Créez un compte sur notre communauté. C’est facile !

      Créer un nouveau compte

      Se connecter

      Vous avez déjà un compte ? Connectez-vous ici.

      Connectez-vous maintenant

    ×