Étape 4: logiciels
Les liens de logiciels sont répertoriées ci-dessous. Alors qu’il est visé pour le 12F683, il est facilement porté à plus grandes versions de l’image. Pour la plupart il nécessite un changement des noms comme TRISIO TRISA et GPIO à PORTA. Vous devrez également modifier la ligne qui identifie la version PIC (liste =) et le fichier INCLUDE, mais ceux sont les changements intuitives. La ligne __CONFIG devez également peaufiner tout simplement parce qu’un ou deux des étiquettes utilisées soient orthographiés différemment dans certains des fichiers INCLUDE. Assurez-vous juste que la photo que vous utilisez a une broche qui permet une entrée d’interruption externe (habituellement appelée EXT). Comme nous l’avons vu précédemment, le 16F688 (PIC de 14 broches) peut être utilisé avec les mêmes branchements broches physiques comme le 12F683 si vous voulez plus de broches e/s.
Le logiciel est fondamentalement le même code qui a été écrit pour l’interface LCD de 4 bits à l’épisode 12. Les changements principaux sont dans Comment les octets de données sont de sortie pour l’interface série et dans la façon dont le PIC gère le protocole I2C. Les routines I2C trouvées facilement sur internet, mais, comme pour beaucoup de choses sur l’internet, ils devaient être inspecté pour s’assurer qu’ils ont suivi la spécification. L’une erreur que j’ai trouvé était à la fin de la routine « i2cwaitack » où la broche SDA était en retrait vers une sortie avant la ligne SCL a été abaissé pour achever le cycle d’horloge. Qui pourrait avoir aussi bien le PIC (maître) et le périphérique esclave tente de conduire la ligne SDA en même temps. La routine a évidemment travaillé pour les autres gens, mais qui ne rend pas correct.
Le module I2C a une série de 8-bit de Registre à décalage parallèle construit en pour le raccordement à l’écran LCD. Les définitions du bit sont indiquées dans le diagramme ci-dessus. Les quatre bits supérieurs se connecter pour les lignes de quatre données supérieures sur l’écran LCD, tout comme dans une interface LCD de 4 bits à l’adresse typique. Les quatre bits inférieurs sont reliés aux diverses broches de contrôle sur l’écran LCD. Sur un écran LCD normal interface ces goupilles de contrôle soit serait dur câblé (comme R/W) ou contrôlée par une ligne GPIO sur le PIC. Le contrôle du rétro-éclairage n’aura pas aucun effet pour les nombreux modules LCD parce que le rétro-éclairage est généralement dur câblé pour être sur.
Dans les interfaces LCD normales la ligne enable serait soit basculée en haut, puis de nouveau faible pour causer l’écran LCD pour verrouiller les données. Dans cette application, nous gérons cette transition en envoyant chaque octet deux fois. Le premier envoyé a le jeu activer peu élevé et le deuxième envoi a l’ensemble enable bit faible. Pour une interface normale de 4 bits que nous devons faire deux envoie pour chaque octet car nous envoyons le grignotement supérieur puis le grignotement inférieur. L’écran LCD puis morceaux la deux grignote ensemble en interne. Pour l’I2C application nous finissent par faire quatre envoie pour chaque octet. Type d’inefficace, mais c’est le prix que nous payons pour une interface bifilaire.
Comme j’ai mentionné plus tôt, j’ai fait un petit correctif à la routine « i2cwaitack » que j’ai trouvé en ligne. J’ai aussi ajouté un peu de code à la fin de la routine. Si l’esclave ne parvient pas à reconnaître un transfert du maître alors le logiciel sera réinitialisé en activant le Timer de Dog Watch (WDT). Les puces PIC plus récents ont une commande de réinitialisation logicielle qui peut être utilisée à la place. Une alternative pour certaines applications I2C consisterait à simplement faire un appel à « i2cstop » et puis continuer là où le code laissé.
Eh bien, c’est tout pour l’épisode 22 de « Fun avec PIC Assembly ». Restez à l’écoute des autres épisodes.