Jump to content

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
  • 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.

     

    • Like 1
    • Nice 1

    Sign in to follow this  
    Sign in to follow this  

    User Feedback


    BenMitnicK

    Posted

    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:

    Share this comment


    Link to comment
    Share on other 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

     

    Share this comment


    Link to comment
    Share on other sites


    Create an account or sign in to comment

    You need to be a member in order to leave a comment

    Create an account

    Sign up for a new account in our community. It's easy!

    Register a new account

    Sign in

    Already have an account? Sign in here.

    Sign In Now

×