Etape 11 : Quelques mots sur protocole SPI et sa position dans ce projet
Un bus SPI (Serial Peripheral Interface) offre la communication bidirectionnelle entre deux appareils. Similaire au protocole I²C précédemment utilisé, c’est aussi maître/esclave basé. Il est souvent appelé interface de quatre fils ; Toutefois, un bus SPI utilise souvent fils 3, 5, 6 ou même plus pour communiquer. Le bus SPI peut être étendu en ajoutant des esclaves à lui : leur MOSI, MISO, épingles SCLK sont câblées ensemble, leur pin select esclave doit être retiré séparément. La broche select esclave pour l’esclave SPI est comme la séquence d’octets adresse esclave pour un dispositif I²C.
Habituellement, cela prend 8 horloges pour effectuer un transfert de données. Alors que l’appareil maître envoie un peu à l’esclave (sur la ligne MOSI), l’esclave envoie un peu le maître (ligne de MISO). Ce transfert est synchronisé par le signal d’horloge sur le net SCLK. La fréquence de ce signal d’horloge peut aller jusqu'à des dizaines de MHz.
Le protocole SPI et le PIC12LF1840T39A
Au cœur d’un PIC de SPI module est le registre à décalage SPIxSR, le changement se produit avec chaque signal d’horloge sur la broche SCLK. Similaire aux autres périphériques séries, c’est trop double tamponné, le contenu de SSP1SR ne peut pas être écrit, ou lire directement. Les données nécessaires à envoyer doit être écrit dans SSP1BUF, cela agit comme un registre de transmission à l’écriture. Lors de la transmission, les données sont automatiquement chargées dans SSP1SR et sont cadencées partir d’ici.
Réception se faite à nouveau via le registre à décalage interne. Lorsque 8 bits sont cadencées dans le SSP1SR, l’octet est chargé intu SSP1BUF, l’utilisateur peut le lire a partir de là. Cette fois, le SSPBUF a agi comme un registre de réception.
Les modules SPI, construits dans les photos peuvent travailler jusqu'à 10 MHz. En particulier, dans notre cas nous allons utiliser ~ 10 KHz.
À notre grande tristesse, le SPI et I²C lignes sont multiplexées aux mêmes broches. Autrement dit, il va falloir bit-bang, l’un d’eux. J’ai écrit des routines pour un autre instructable de mes amis, j’ai copié sur ce processeur, mais frappé quelques difficultés, alors je leur ai écrit encore une fois, cette fois sans les interruptions impliquées.
Parce que je me sers peu cogné SPI, je ne vais pas vraiment dans les détails à ce sujet. Je vais plutôt mettre l’accent sur l’analyse de la feuille de données MAX7219, pour voir ce que je dois mettre sur les broches pour le faire fonctionner !
Voici une image de la feuille de données MAX7219 :
Vous pouvez voir comment les lignes doivent être affichés/masqués, comme le temps passe. C’est exactement ce que dois ressembler sur une portée, quand j’ai terminé mes signaux. Regardez l’exemple de code et d’analyser ce qui est écrit là, que vous verrez comment il agit pour générer le modèle binaire, que nous avons besoin.
Cela peut être réutilisé, il suffit de remplacer le #define-s dans le fichier d’en-tête, ou partout où vous les placés. J’ai une interruption conduite version trop, mais je me suis débarrassé de lui, parce que j’ai que c’était coupable pour mon écran de non-travail. Plus tard il s’est avéré l’affichage était sur la couche supérieure au lieu de la couche inférieure - cela me donnait des maux de tête. Toutefois, à ce moment-là j’ai déjà roulé sur l’algorithme de bit-bang SPI axée sur le retard et n’a pas voulu revenir.
Une fois que le code que vous avez écrit que génère la forme d’onde exacte qu’elle est censée générer, vous pouvez passer à envoyer des commandes à votre écran ! Il y a beaucoup de façons de tester votre algorithme, il y a simulator, analyseurs, étendues qui peuvent vous aider avec ceci.
Il s’agit d’une transmission de la parole unique, il a cropped out et agrandie de l’image suivante avec l’échange de données
Bon, il semble que nous avons nous-mêmes obtenues par le biais de cette chose affichage trop. Il faut maintenant configurer cette photo pour avoir son module MSSP configuré comme un maître I²C.