Table des matières:
- Étape 1: Matériel requis
- Étape 2: Présentation des cas de test
- Étape 3: ATtiny84 Cas 1 - Isoler la sortie de l'application
- Étape 4: ATtiny84 Cas 2 - Isoler l'entrée d'application
- Étape 5: ATtiny85 Cas 1 - Isoler la sortie de l'application
- Étape 6: ATtiny85 Cas 2 - Isoler l'entrée d'application
Vidéo: Réutilisation des broches de l'interface ATtiny84/85 SPI : 6 étapes
2024 Auteur: John Day | [email protected]. Dernière modifié: 2024-01-30 09:08
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
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 |
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
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
-
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
-
-
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
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.
Étape 4: ATtiny84 Cas 2 - Isoler l'entrée d'application
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.
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
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.
Étape 6: ATtiny85 Cas 2 - Isoler l'entrée d'application
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):
- 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.)
- 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.
- 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é:
WAC (WALK AND CHARGE GADGET) - Réutilisation d'un ancien lecteur de CD : 6 étapes
WAC (WALK AND CHARGE GADGET) - réutilisation de l'ancien lecteur de CD : Bonjour à tous, je suis Chris un étudiant de classe XI et c'est mon premier instructable. Ce projet a été réalisé par moi quand j'avais 11 ans (j'étais trop timide pour poster mes projets juste pour les montrer à tout le monde) * Désolé pour les erreurs. L'anglais n'est pas ma langue maternelle
Réutilisation d'une ancienne boîte de routeur pour votre projet Arduino : 3 étapes
Réutiliser une ancienne boîte de routeur pour votre projet Arduino : ce projet est né d'un besoin d'héberger mon projet domotique. J'ai décidé de réutiliser le boîtier d'un ancien routeur PlusNet défectueux (routeur Thomson TG585). Les exigences pour mon boîtier étaient : : boîte suspendue à profil bas Couvercle à couvercle rabattable facile
Dés à rouler VISUINO utilisant un module OLED à 4 broches de 0,96 pouce : 7 étapes
VISUINO Rolling Dice utilisant un module OLED de 0,96 pouce à 4 broches : Dans ce didacticiel, nous utiliserons OLED Lcd et Visuino pour créer un Rolling Dice lorsque nous appuyons sur un bouton de notre planche à pain.Regardez une vidéo de démonstration
Utilisation des 4 broches de l'ESP8266-01 : 3 étapes
Utilisation des 4 broches de l'ESP8266-01 : Remarque : ce projet est essentiellement une extension d'une instruction antérieure qui n'utilisait que 2 broches. Le nombre limité (4) de broches GPIO sur l'ESP8266-01 peut sembler être un obstacle, pour tout application sérieuse. Pourtant, si l'on utilise les broches de manière intelligente, c'est
Prise ISP 6 broches à 8 broches : 4 étapes
Prise ISP 6 broches à 8 broches : La raison pour laquelle j'ai principalement construit ce projet était de programmer l'ATTiny45, qui a une connexion à 8 broches, tandis que mon USBtinyISP (de Ladyada) n'a qu'une connexion à 10 et 6 broches. Après avoir fouiné sur Internet pendant environ 3-4 semaines, je n'ai rien trouvé quoi