Table des matières:

Réutilisation des broches de l'interface ATtiny84/85 SPI : 6 étapes
Réutilisation des broches de l'interface ATtiny84/85 SPI : 6 étapes

Vidéo: Réutilisation des broches de l'interface ATtiny84/85 SPI : 6 étapes

Vidéo: Réutilisation des broches de l'interface ATtiny84/85 SPI : 6 étapes
Vidéo: Module ATTINY85 2024, Novembre
Anonim
Réutilisation des broches de l'interface ATtiny84/85 SPI
Réutilisation des broches de l'interface ATtiny84/85 SPI

Cette instructable fait suite à l'instructable « ATtiny84/85 In-circuit Debugging with Serial Output » et étend cette configuration matérielle et logicielle pour résoudre le problème de la réutilisation des broches de téléchargement de programmation par le programme d'application. Au total, entre cela et la partie 1 instructable, les sujets suivants sont discutés/démonstrés:

Sujet ATtiny84 ATtiny85
Communication série à l'aide de la classe SoftwareSerial X X
Partage des broches de l'appareil entre l'application et le téléchargement X X
Interruption de changement de broche X
Interruption externe X
Veille en mode POWER_DOWN; réveil sur interruption X
Solution de contournement pour l'erreur de lien de vecteur d'interruption "multipliée" liée à SoftwareSerial X
Modification en circuit, téléchargement, débogage, … cycle de développement pour les appareils ATtiny X X

L'ajout d'un composant d'E/S matériel à l'une des broches dédiées à l'interface de programmation SPI est parfois OK, parfois non. Par exemple, l'ajout d'une LED à MISO fait simplement clignoter la LED pendant le téléchargement, puis elle est disponible pour l'application. Cependant, l'ajout d'un buzzer piézo à MISO entraînera un horrible son strident suivi d'un échec du téléchargement.

Cette instructable explique comment utiliser un multiplexeur 4x2:1 pour "récupérer" l'utilisation des broches affectées aux signaux MISO, MOSI et SCK de l'interface SPI en les protégeant pendant le téléchargement. La réutilisation de la broche RESET nécessite un changement de fusible et n'est pas couverte par cette approche. La double affectation des broches est réalisée en utilisant le multiplexeur pour basculer entre les entrées d'application et de programmation selon que le téléchargement est en cours ou non. Le code et les schémas sont inclus pour l'ATtiny84 et l'ATtiny85. La configuration ATiny84 est abordée en premier car elle possède deux ports d'E/S et peut être utilisée pour illustrer certains problèmes/solutions supplémentaires. Suite à la discussion de tiny84, les mêmes scénarios sont discutés pour l'ATtiny85.

Étape 1: Matériel requis

Image
Image

La plupart du matériel requis était répertorié dans la partie 1 instructable, de sorte que seul le nouveau matériel est répertorié ci-dessous.

Nom Source possible Comment utilisé
Multiplexeur 4x2:1 Mouser Contient quatre commutateurs à 2 entrées et 1 sortie qui sont le mécanisme par lequel les signaux de l'interface SPI et les E/S d'application sont partagés.
Commutateur SPST Tout type de commutateur (momentané ou verrouillé) fonctionnera. Le commutateur est utilisé pour illustrer le partage des broches pour une entrée d'application.
Résistance 10K Résistance pull-down pour le commutateur SPST pour éviter une entrée flottante
Image
Image
Image
Image

Le multiplexeur est la clé pour isoler l'utilisation du téléchargement des broches de l'utilisation de l'application. La fonctionnalité globale du multiplexeur 4x2:1 est assez simple et consiste en 2 signaux de commande et 4 commutateurs fonctionnant de manière identique. Le comportement de chaque broche du multiplexeur est décrit ci-dessous:

Épingler Nom Fonction
15 g Comme indiqué dans la table de vérité, le multiplexeur ne fonctionne que lorsque la broche de validation G est basse. Comme nous ne voulons jamais désactiver totalement le multiplexeur, la broche 15 sera connectée directement à la masse.
2-4; 5-7; 9-11;12-14 A (entrée), B (entrée), Y (sortie) Il y a quatre 2 entrées; Commutateurs à 1 sortie avec chaque groupe de 3 broches numérotées consécutivement dans l'ordre A (entrée), B (entrée), Y (sortie) par ex. pour le commutateur 1; broche 2=1A; broche 3=1B; broche 4=1Y.
1 Sélectionner Lorsque Select est bas, l'entrée du commutateur A est connectée à la broche de sortie du commutateur associée, Y. Lorsque Select est haut, l'entrée du commutateur B est connectée à la sortie à la place. Les commutateurs sont commandés simultanément par le signal Select et fonctionnent de manière identique.
8 GND masse du circuit intégré multiplexeur
16 VCC puissance IC du multiplexeur

Étape 2: Présentation des cas de test

Image
Image
Image
Image

Les deux scénarios de réutilisation des broches dépendent du fait que la broche est une entrée ou une sortie d'application. La procédure de traitement de toute entrée est toujours la même; De plus, la procédure pour les sorties d'application est identique quel que soit le composant matériel. Même ainsi, l'explication est plus facile et, espérons-le, plus claire, si des exemples spécifiques sont donnés. Des dispositions minimalistes pour les deux cas sont présentées ci-dessus. Pour les configurations détaillées plus tard, les connexions deviennent un peu un nid d'écureuils, il peut donc être utile de se référer à ces diagrammes plus propres.

RESET est le choix parfait pour le signal Select du multiplexeur puisqu'il est bas pendant le téléchargement mais remonte à l'état haut une fois le téléchargement terminé. Notez que n'importe lequel des commutateurs du multiplexeur peut être utilisé dans les deux cas puisque tous les commutateurs se comportent de manière identique. De plus, aucun des exemples n'est « réaliste »; ils ont été choisis à la place comme le moyen le plus simple d'illustrer les techniques d'isolement

  1. Boîtier de sortie: la sortie LED de la broche 4 d'ATtiny84 (SCK) est isolée à l'aide du commutateur multiplexeur 2

    • connecter la broche 2A du multiplexeur à la terre
    • connectez la broche 2B du multiplexeur à la broche 4 d'ATtiny85
    • connecter la sortie 2Y à l'anode LED

      • Résultats attendus:

        • La LED est éteinte pendant le téléchargement car connectée à 2A, masse
        • LED attachée à la broche de sortie de l'application 4 après le téléchargement via 2B et commence à clignoter
  2. Cas d'entrée: l'entrée du commutateur SPST vers ATtiny84 broche 6 (MOSI) est isolée à l'aide du commutateur multiplexeur 3

    • Le fil conducteur MOSI de l'en-tête du programmeur AVR est déplacé à 3A
    • l'entrée du commutateur 3B est connectée à la sortie SPST
    • la sortie 3Y est connectée à ATtiny84 broche 6

      • 3A, MOSI, est connecté à la broche 6 pendant le téléchargement
      • 3B, sortie SPST, est connecté à la broche 6 après le téléchargement

Le cas 1 est réussi si la LED ne clignote pas pendant le téléchargement du programme, puis clignote toutes les deux secondes après le téléchargement comme prévu sous le contrôle du programme. Sans isolation, la LED scintillerait pendant le téléchargement car elle est directement connectée au signal SCK, qui change d'état pour synchroniser la réception/la transmission des données.

Le cas 2 est réussi si le signal MOSI est transmis à l'ATtiny84 pendant le téléchargement, c'est-à-dire que le téléchargement n'échoue pas et que la LED répond à l'activation/désactivation du SPST après le téléchargement. Le cas 2 empêche un échec de téléchargement improbable. Sans isolation, le commutateur SPST provoquera une panne si 1) un commutateur verrouillé est utilisé et 2) le commutateur est laissé en position marche pendant le téléchargement. Lorsqu'il est isolé par le multiplexeur, le commutateur ne peut en aucun cas provoquer d'échec de téléchargement. Un peu exagéré mais réconfortant pour nous les vieux.

Une conséquence de l'utilisation du multiplexeur est que le composant matériel ne peut plus être connecté directement à la broche I/O du microcontrôleur. Ceci est quelque peu gênant mais permet au composant de rester sur la maquette pendant le test avec l'autre matériel d'application, et peut être replacé à son emplacement légitime une fois le test terminé.

Étape 3: ATtiny84 Cas 1 - Isoler la sortie de l'application

Image
Image

Cette étape décrit la configuration pour le partage d'une broche de sortie d'application avec un signal de téléchargement. L'exemple utilisé est la LED attachée à la broche 4 (SCK). L'utilisation de la LED existante comme exemple permet de mettre l'accent sur l'ajout du multiplexeur à l'environnement matériel et logiciel de la partie 1.

  • Matériel

    • Ajoutez le multiplexeur à la planche à pain à l'emplacement relatif indiqué dans le schéma de frittage ci-dessus. Le multiplexeur est positionné vers le centre pour laisser de la place pour le commutateur SPST nécessaire dans le cas 2.
    • Étendez le signal RESET au multiplexeur en ajoutant un fil conducteur (jaune suggéré) de ATtiny84 broche 11 à la broche 1 du multiplexeur.
    • La configuration matérielle restante est celle indiquée à l'étape 2

      • connectez la broche 2A du multiplexeur directement à la terre
      • connectez la broche 2B à la broche 4 d'ATtiny84
      • connecter la sortie 2Y à l'anode LED

        • Résultats attendus:

          • pendant le téléchargement 2Y est connecté à la masse (2A) donc la LED reste éteinte
          • Après le téléchargement, 2Y est connecté à la broche 4 d'ATtiny84 - contrôle de la LED d'application
  • Logiciel

    • Le code de la partie 1 est réutilisé; disponible à partir de la partie 1 instructable plutôt que dupliqué ici
    • Chargez et compilez le programme de la partie 1 dans l'IDE Arduino
    • Branchez le programmateur Tiny AVR sur un port USB du PC
    • Branchez le câble USB vers série Adafruit sur un deuxième port USB

      • Un port COM est créé et est automatiquement mis à disposition dans la liste des ports IDE
      • Lancer la fenêtre COM
    • Téléchargez le code compilé sur l'ATtiny84

Les résultats du programme d'application sont les mêmes que pour la partie 1 puisque le seul changement a été de déplacer la LED vers un emplacement « protégé »: La LED clignote à 2 secondes d'intervalle; la sortie série est la même. La seule différence qui devrait se produire est que la LED ne clignote plus pendant le téléchargement car, pendant ce temps, elle est connectée à la terre via la broche 2A du multiplexeur.

Image
Image

Étape 4: ATtiny84 Cas 2 - Isoler l'entrée d'application

Image
Image

Cette étape s'appuie sur la configuration du cas d'isolement de sortie précédent. Les modifications matérielles consistent à connecter un commutateur SPST à ATtiny84 broche 6 (MOSI) via le multiplexeur. Les modifications matérielles sont donc minimes, mais plusieurs modifications logicielles permettent au commutateur SPST de contrôler la LED à l'aide d'une interruption de changement de broche. Le code mis à jour est inclus au bas de cette section. Le code doit être copié dans l'IDE Arduino; suggérons de l'enregistrer sous le nom Multiplexer_Input. (Je m'excuse pour la longueur de cette section, mais c'est le cœur de l'objectif de l'instructable et je pense qu'il se lit mieux comme un monolithe plutôt que d'insérer des pauses artificielles.)

Mettre à jour Emplacement But
inclure la classe SoftwareSerial "piratée" inclure la section La LED est maintenant contrôlée par le commutateur SPST via une interruption de changement de broche. La classe SoftwareSerial doit être modifiée car sinon elle alloue TOUS les vecteurs d'interruption de changement de broche. Cela provoque une erreur de liaison « définition multiple » pour le vecteur (port 0) affecté au commutateur SPST. La version SoftwareSerial piratée doit être placée dans le même répertoire que le programme afin qu'elle n'affecte que cette application.
Définition de la broche d'entrée SPST section inclure/définir affectation de l'entrée SPST à une broche de périphérique. La broche est spécifique à l'appareil, elle est donc ajoutée à la ou aux sections #ifdef ATtiny8x.
Mode broche d'entrée SPST fonction de configuration La broche SPST est configurée comme INPUT
Configurer l'interruption de broche SPST fonction de configuration Le vecteur d'interruption est affecté à la broche d'entrée SPST de sorte qu'un changement d'état du commutateur provoque une interruption. Les registres de configuration et le type d'interruption sont spécifiques à l'appareil. Pour rendre le code aussi simple que possible, les différences sont gérées dans une section #if définie
Message sériel de configuration terminée fonction de configuration Le message de sortie série de configuration terminée est modifié pour refléter l'application d'entrée du multiplexeur
Ajouter la fonction ISR du commutateur SPST section de code L'ISR pour l'interruption de changement de broche SPST est ajouté. Le code est commun mais le vecteur utilisé est spécifique à l'appareil et est défini dans les sections dépendantes de l'appareil en haut du programme. Afin de vérifier que l'ISR est activé, l'état de la LED est modifié. Bien qu'il s'agisse d'un non-non dans une application réelle, un message de sortie série est généré reflétant le nouvel état de la LED.
Modifier le traitement de la boucle fonction de boucle L'ISR contrôle maintenant l'allumage et l'extinction de la LED afin que la fonctionnalité soit supprimée de la routine de boucle. Un appel à la routine de sommeil est ajouté pour ATtiny84 comme une sorte de "supplément". Pour cette application, ATtiny85 sleep ne fonctionne pas; peut-être en raison de l'interférence de la classe Software Serial car elle fonctionne avec SoftwareSerial supprimé.
Ajouter une routine de sommeil section de code La fonctionnalité de veille n'est pas nécessaire pour démontrer l'utilisation du multiplexeur. Vient d'être ajouté car il voudrait normalement attendre une entrée en mode POWER_DOWN pour économiser de l'énergie plutôt que de continuer à parcourir la boucle du programme sans rien faire jusqu'à ce qu'une entrée se produise.

Modifier le code de la classe SoftwareSerial

La classe SoftwareSerial doit être modifiée afin qu'elle ne monopolise pas tous les ports d'interruption de changement de broche. Le code de classe SoftwareSerial se trouve à

C:\Program Files (x86)\Arduino\hardware\arduino\avr\libraries\SoftwareSerial\src

Faites une recherche sur PCINT0_vect dans SoftwareSerial.cpp pour trouver l'emplacement de départ des modifications de code. Ajoutez le code suivant précédant immédiatement l'instruction #if Define(PCINT0_vect) existante.

#si défini(_AVR_ATtiny84_)

#define MYPORT PCINT1_vect #elifdefined(_AVR_ATtiny85_) #define MYPORT PCINT0_vect #endif ISR(MYPORT) { SoftwareSerial::handle_interrupt(); }

Commentez maintenant le bloc de code existant qui alloue les vecteurs d'interruption de port comme indiqué ci-dessous (ajoutez simplement les symboles de commentaire de bloc de début et de fin /* et */):

/*

#if défini(PCINT0_vect) ISR(PCINT0_vect) { SoftwareSerial::handle_interrupt(); } #endif #if défini(PCINT1_vect) ISR(PCINT1_vect) { //SoftwareSerial::handle_interrupt(); ISR(PCINT1_vect, ISR_ALIASOF(PCINT0_vect)); } #endif #si défini(PCINT2_vect) ISR(PCINT2_vect, ISR_ALIASOF(PCINT0_vect)); #endif #if défini(PCINT3_vect) ISR(PCINT3_vect, ISR_ALIASOF(PCINT0_vect)); #fin si */

Configurer le matériel

Le commutateur SPST est connecté à la broche 6 d'ATtiny84 (MOSI) comme indiqué à l'étape 2. La procédure est dupliquée ici pour plus de commodité.

  • connectez l'entrée du commutateur 3A au fil MOSI de l'en-tête du programmeur Tiny AVR
  • connectez 3B à la broche de sortie du commutateur SPST ON
  • connectez 3Y à ATtiny84 broche 6

    • RÉSULTATS:

      • 3A, MOSI, sera bloqué jusqu'à la broche 6 d'ATtiny84 pendant le téléchargement
      • 3B, sortie SPST, sera bloqué sur la broche 6 après le téléchargement

Exécuter le programme

Avant de démarrer, mettez l'interrupteur SPST en position d'arrêt. Sinon, la LED s'allumera lorsque l'interrupteur sera éteint et vice-versa. Suivez la procédure de l'étape 3 pour charger, compiler et télécharger le programme d'entrée de l'application à l'aide de l'IDE Arduino. Comme auparavant, la LED ne doit pas clignoter pendant le téléchargement, donc la seule indication que le programme est en cours d'exécution sera le message série à la fin de la routine de configuration: SETUP Complete - Input Example

À ce stade, le programme attend une entrée du commutateur SPST. Placer l'interrupteur en position ON allumera la LED; le retour à la position off éteint la LED. Les messages de sortie vérifient que l'ISR a été invoqué (ISR: LED HIGH, ISR: LED LOW). Notez que l'ordre des messages série est GO TO SLEEP en attente d'un changement d'état du commutateur; lorsque vous obtenez une entrée de commutateur, l'ISR est invoqué, bascule la LED et documente le changement; puis le traitement reprend après l'appel de veille puisque l'interruption réveille le processeur.

Image
Image

PROGRAMME POUR CET INSTRUCTIBLE:

//************************************************************************

// PARTIE 2: Partage des broches de l'application/de l'appareil de téléchargement //. Modifie le code de la partie 1 pour prendre en charge la réutilisation par l'application des broches // attribuées à l'interface de programmation SPI //. Code "Comon" pour ATtiny85 et ATtiny84 //****************************************** ******************************** #include "SoftwareSerial.h" // Classe Arduino SoftwareSerial modifiée #include // Tandis que le code de traitement est commun, les broches utilisées sont spécifiques à l'appareil #if défini(_AVR_ATtiny84_) || define(_AVR_ATtiny84A_) #define ledPin 4 // Basculé pour allumer/éteindre la LED connectée #define rxPin 9 // Broche utilisée pour la réception série #define txPin 10 // Broche utilisée pour la transmission série #define SpstPin 6 // Entrée du commutateur SPST (MOSI) #define ISR_VECT PCINT0_vect // Vecteur d'interruption de changement de broche du commutateur SPST #elifdefined(_AVR_ATtiny85_) #define ledPin 1 #define rxPin 4 #define txPin 3 #define SpstPin 2 // Entrée du commutateur SPST (INT0) #define ISR_VECT INT0_vect // Commutateur SPST Vecteur d'interruption de changement de broche #else #error Seuls ATiny84 et ATtiny85 sont pris en charge par ce projet #endif // Créer une instance de la classe Software Serial spécifiant quel périphérique // les broches doivent être utilisées pour recevoir et transmettre SoftwareSerial mySerial(rxPin, txPin); //------------------------------------------------ ------------------------ // Initialisation des ressources de traitement //------------------- -------------------------------------------------- --- void setup() { mySerial.begin(9600); // Démarrer le délai de traitement en série (2000); // Donnez au port Serial Com le temps de terminer le démarrage. // sinon, la 1ère sortie est probablement manquante ou tronquée pinMode(ledPin, OUTPUT); // Configurer la broche LED pour OUTPUT pinMode (SpstPin, INPUT); // Configurer la broche du commutateur SPST en tant qu'ENTRÉE # si définie (_AVR_ATtiny84_) || (_AVR_ATtiny84A_) // configurer l'interruption de changement de broche pour gérer l'entrée du commutateur sur la broche 6 (MOSI) GIMSK |= (1<

Étape 5: ATtiny85 Cas 1 - Isoler la sortie de l'application

Image
Image

Plutôt que de créer une configuration matérielle en double pour l'ATtiny85, il est probablement plus facile de commencer avec la configuration terminée pour ATtiny84 à partir de l'étape 4 et de remplacer la puce tiny84 par la tiny85. Tout le matériel nécessaire est alors déjà disponible. Si vous utilisez cette approche, localisez le tiny85 de sorte que les broches 3 et 4 s'alignent avec le câble série tx et reçoivent les fils. Il suffit alors de déplacer les fils conducteurs de l'interface SPI pour qu'ils correspondent à leurs emplacements requis pour l'ATtiny85.

Si vous partez de zéro, suivez simplement les étapes générales de l'étape 3 et le schéma ci-dessus. Le code est le même que celui utilisé pour l'ATtiny84 à l'étape 3 avec les mêmes résultats attendus - pas de scintillement pendant le téléchargement; lors de l'exécution, la LED clignote à 2 secondes d'intervalle et les messages de sortie série suivent l'état de la LED.

Image
Image

Étape 6: ATtiny85 Cas 2 - Isoler l'entrée d'application

Image
Image

Pour la configuration matérielle, commencez par la configuration de l'étape 5 et ajoutez le commutateur SPST comme indiqué dans le diagramme fritzing ci-dessus. J'ai en fait utilisé un interrupteur momentané pour la version tiny85 et cela facilite un peu la vérification. Notez que la sortie du commutateur est tournée de 180 degrés par rapport à la configuration ATtiny84. Ce changement facilite le routage des fils de raccordement puisque les 3 signaux SPI sont du même côté pour l'ATtiny85.

Utilisez le même programme que pour ATtiny84 Étape 4. Les mêmes résultats généraux sont attendus - la LED change d'état lorsque le commutateur SPST est activé/désactivé et les messages de sortie série documentent les changements. Les messages GO TO SLEEP sont manquants car la fonctionnalité de veille n'est pas invoquée pour l'ATtiny85. Même si le même programme est utilisé, il existe des différences significatives dans la mise en œuvre pour tenir compte du fait que l'ATtiny85 n'a qu'un seul registre de port (Port 0):

  1. SoftwareSerial alloue maintenant l'interruption de changement de broche du port 0 pour la communication série (rappelez-vous que nous avons pu utiliser le port 1 pour l'ATtiny84.)
  2. L'interruption du commutateur SPST doit être implémentée avec l'interruption externe 0 (INT0) car la seule et unique interruption de changement de broche est allouée par SoftwareSerial. Cela illustre le fait que les interruptions de changement de broche et les interruptions externes sont logiquement indépendantes et peuvent être utilisées dans le même registre de port.
  3. Rien n'est gagné en utilisant une version SoftwareSerial modifiée - il n'y a qu'un seul port et la classe SoftwareSerial le saisira. Cependant, la classe modifiée était toujours utilisée uniquement pour éviter un changement non directement lié à l'objectif de cette étape.

Conseillé: