Une expérience simple est décrite à partir de la connexion d'un bouton à un microcontrôleur AVR, il n'est pas possible d'installer un programme avec mon Cі pour appuyer sur un bouton. Jetons un coup d'œil aux fonctionnalités de connexion du bouton aux ports du MK et découvrons comment lire le bouton sur mon C.
Dans les articles précédents, des expériences ont été examinées avec des diodes lumineuses, qui étaient connectées aux ports du microcontrôleur, qui étaient connectés à la sortie (sortie).
Dans cet état, un bouton est connecté au microcontrôleur, dont les contacts, lorsqu'ils sont enfoncés, se ferment et lorsqu'ils sont enfoncés, ils s'ouvrent (bouton qui se ferme).
Pour que vous puissiez regarder comme si vous cherchiez un bouton supplémentaire, deux autres diodes lumineuses sont connectées au microcontrôleur. Le schéma est déjà simple, l'axe est sorti :
Mal. 1. Schéma de principe de l'expérience avec le microcontrôleur et le bouton ATtiny2313.
Comme Bachimo, jusqu'à deux ports PB0 et PB1 via des résistances, qui sont entrelacées, deux diodes lumineuses sont connectées, et au port PD2 - un bouton et il y a aussi une résistance intermédiaire. Pour connecter le programmateur au MK, les prises Conn 1 (AVR-ISP) sont connectées, et pour connecter le circuit à l'alimentation + 5V, deux contacts sont reconnus - P1 et P2.

Mal. 2. Conçu sur un panneau de planche à pain sans soudure pour une expérience avec un microcontrôleur et un bouton.
Pour un switch sécurisé vers un port avec un bouton, connectez séquentiellement une résistance avec un support de 1 KΩ (vous pouvez aussi vous connecter sur un autre support de 600 Ohm - 2 KΩ). Acceptez, en règle générale, une tonalité chaude dans un robot à broches, comme s'il protégeait le port du MK à la sortie de la frette lors du pardon donnant à la broche un niveau élevé lorsque le bouton est fermé.
Les broches du microcontrôleur sont universelles GPIO (General Purpose Input Output), elles peuvent être connectées en tant que périphérique auxiliaire (indicateurs, interrupteurs d'alimentation) et divers capteurs numériques (boutons, cavaliers).
Les broches Dekіlka de MK peuvent être connectées à ADC / DAC (Analog-Digital-Converter et navpaki), à partir desquelles vous pouvez également analyser et générer des signaux analogiques. Les GPIO primaires ne fonctionnent pas avec des signaux analogiques, ils peuvent avoir plus de 0 (0V) ou 1 (+5V) en entrée/sortie.
Avant la broche de skin GPIO au milieu du microcontrôleur, un bloc de blocs et de composants électroniques est connecté, dont vous devez savoir:
Pour la gestion logicielle et la configuration du port skin, trois registres spéciaux sont nécessaires, par exemple, pour le port "B":
Des informations plus détaillées sur les pièces jointes de port pour un modèle de microcontrôleur spécifique peuvent être trouvées dans la fiche technique, dans la section "I / O-Ports", et là, vous pouvez également mettre du code en C et Assembler pour travailler avec les ports.
Il est important de savoir que la broche « RESET » du microcircuit (nous avons la broche numéro 1 sur le circuit), qui sert à la suppression des programmes du microcontrôleur (redémarrage), vous pouvez également utiliser la clé pour connecter des boutons, diodes lumineuses et autres périphériques d'entrée-sortie possibles, de sorte que vous pouvez effectuer des transformations Buti vers le GPIO d'origine.
Cela peut être différent, car le microcircuit n'a pas de broches pour votre conception. Par exemple, une fois plié, je le construirai sur la puce ATtiny13 (8 visnovkіv, 2 pcs - live, 5 pcs - port d'entrée-sortie, 1 pc - pour RESET) vous avez montré que vous n'aviez pas une broche pour la lumière . Vous trouverez ici quelques options pour résoudre le problème :
Laquelle de ces options est la plus simple et la moins chère pour les finances / heure - à en juger par une humeur humide.
Pour convertir la broche "RESET" en port d'E/S, changez le fusible spécial - RSTDISBL (Reset Disable). Et tout d'abord, vous devez vous rappeler qu'après ces opérations, la reprogrammation du microcontrôleur ne sera possible qu'en raison du brouillage du programmeur haute tension (à 12V), tel que USB ISP, ou l'autre programmeur ne pourra pas fonctionner son propre 5V
De plus, nous avons un bouton et deux diodes électroluminescentes connectées au microcontrôleur, que peut-on en faire ? - et zrobimo mi axis sho (algorithme):
Un exemple de la mise en œuvre d'un tel algorithme par mon Cі pіd AVR est présenté ci-dessous. Créons un nouveau fichier pour notre logiciel et logiciel d'édition :
Nano /tmp/avr-switch-test.c
Déplaçons le code dans le corps du fichier :
/* Expérimentez avec le bouton sur ATtiny2313 * https://website */ #define F_CPU 1000000UL // Fréquence du cœur = 1 MHz #include
On nous demande avant nous Constante F_CPU Cependant, si le compilateur travaille sur la fréquence du cœur du microcontrôleur, il est nécessaire que les sous-programmes et les fonctions aient été traités correctement. L'application a une fonction de retard pour l'heure - "_delay_ms" de la bibliothèque "util/delay.h", comme un retard d'une heure de retard sur un cycle hostile, en spirale jusqu'à la valeur de la constante F_CPU.
Regardez le code de la bibliothèque "delay" pour organiser le délai par heure et de quelle manière la constante F_CPU est fixée, vous pouvez utiliser GNU Linux pour l'aide de n'importe quel éditeur de texte, par exemple, vous pouvez utiliser la commande suivante :
Nano /usr/lib/avr/include/util/delay.h
La fréquence réglée en usine de l'oscillateur RC interne dans le microcontrôleur ATtiny2313 est de 8000000Hz (8MHz), également pour le réglage par défaut du fusible sous la fréquence - CKDIV8 (Clock Divide by 8), de sorte que la fréquence de fonctionnement réelle du cristal est de 800000.
Vous pouvez voir comment le fusible est installé dans le microcontrôleur à l'aide de l'avrdude ou du shell graphique au nouveau appelé AVR8 Burn-O-Mat.
Le programme a reçu des macros pour gérer le port camp, auquel la lumière est connectée : LED_BLUE_ON, LED_BLUE_OFF, LED_RED_ON, LED_RED_OFF. Si vous appelez une macro similaire dans n'importe quel programme, nous pouvons simplement l'allumer ou éteindre la peau des lumières, ne répétez pas le même code, afin que vous puissiez demander le programme de votre côté et l'écraser la première place.
Dans le programme principal "void main(void)", nous démarrons le robot avec la configuration du port :
Dali, macros vicoristes, mi éteindre la lumière rouge et allumer le bleu. Maintenant, en plus d'une boucle éternelle de plus, nous pouvons encore attendre que le bouton s'affiche : "while (! (PIND & (1)<< PD2)));".
Lorsque le bouton est enfoncé sur la broche 6, une valeur élevée apparaîtra (pour augmenter la résistance interne, qui est utilisée, que nous avons allumée plus tôt), et un 1 logique sera inséré dans la ligne PD2 du registre PIND.
Après cela, le clignotement triple (vmknenny-vimikannya) de la diode lumineuse bleue du fondu en 0,5 seconde et le cycle éternel principal commence à fonctionner d'une nouvelle manière - deux diodes lumineuses sont déclenchées en fonction de l'appel.
Le programme est encore plus simple ;
Dans les publications précédentes, j'ai mené des expériences avec le microcontrôleur ATMega8, ici il y a moins de "bourrages" du MK - ATTiny2313.
Pour compiler le firmware dans le MK, vous devez modifier les commandes de sélection dans l'environnement de programmation intégré Geany.
Idemo dans le menu Build - Set Build Commands. La commande de compilation (commandes C) doit changer le modèle de puce qui sera arrêté : "-mmcu=attiny2313". Pour que la commande flashe le MK, vous devez changer le type de puce pour avrdude : "-p t2313".

Mal. 3. Reconfiguration de Geany pour robots avec microcontrôleur ATTiny2313.
Toutes les commandes de guidage pour le système d'exploitation GNU Linux, si vous avez Windows, vous pouvez écrire différents chemins vers les fichiers binaires "avr-gcc.exe", "avr-objcopy.exe", "avrdude.exe".
Plus de détails sur la façon de construire Geany sous GNU Linux, j'ai regardé dans l'un des articles précédents de la série.
La compilation, le pliage et le micrologiciel du programme peuvent être téléchargés en appuyant sur trois boutons au milieu de Geany : "Compiler", "Construire" et "Exécuter". De plus, ces opérations peuvent être enroulées depuis la console, l'axe de la commande pour ces opérations (enroulement séquentiel):
Avr-gcc -mmcu=attiny2313 -Os /tmp/avr-switch-test.c -o /tmp/avr-switch-test.o avr-objcopy -j .text -j .data -O ihex /tmp/avr- switch-test.o /tmp/avr-switch-test.hex avrdude -c usbasp -p t2313 -P usb -U flash:w:/tmp/avr-switch-test.hex
Les commandes moustache peuvent être complètement (avec un peu de noms de fichiers) identiques à celles que nous avons corrigées pour les personnalisations Geany.
Indépendamment de la simplicité de l'expérience, j'ai également essayé de mettre en évidence certains des moments techniques les plus importants du travail avec les ports, la connaissance de ces informations sera similaire à la formation continue des robots avec des microcontrôleurs ATMEL.
Parfois, il peut être fait même une petite pièce jointe, par exemple un ordinateur de vélo. Mais la conception ne permet pas le placement d'un grand nombre de boutons. Zagal nous avons un bouton pour l'introduction et rien de plus.
Esprit spartiate, mais ici, vous pouvez lancer le menu riche et fonctionnel et d'autres accessoires de la vie. à la fois je montrerai une des implémentations d'un tel contrôle.
Otzhe, quel est notre bouton ?
Pas épais, mais rien. Pour un bouton, s'il vous plaît. La tête zatik lors de l'écriture de ceci est de ne pas gaspiller beaucoup de ressources système (heure processeur, minuteries et rangements) pour la production d'un bouton malheureux. Aja, il nous arrive de voir le fait de l'assaut, le fait de l'assaut, l'heure de l'assaut, le dernier de l'assaut à l'aube. Je suis friand de telles pédales pour la mise en œuvre de cette interface, que j'ai été simplement étonné de voir comment il est possible d'entasser des imbéciles et des galles sur un pin, et aussi de regarder toutes les minuteries :)
De plus, TK se présente :
Algorithme
Nous faisons tout sur la machine terminale. Le nouveau aura trois camps :
Et il y aura aussi une procédure de service, de sorte que via mode_time (2c) après la première action avec le bouton de sauvegarde, tous les résultats seront sauvegardés avec eux. Ce qui n'a plus d'importance. Les programmes Vіd se couchent.
Et tout ce bruit tournera par cycles, s'appelant à travers le répartiteur (ou comme s'il s'agissait d'un rang) toutes les 20 ms.
En haut
Entrer.
Chi le bouton n'est pas enfoncé? Yakscho pas - apparemment. S'il est enfoncé, la machine automatique est déplacée à la position Dn
Chi perevіryaєmo vpershe pour l'intervalle mi ici? En tant que premier, nous mettrons ensuite notre procédure de service au début du lancement (en 2s), nous lèverons le drapeau indiquant que le processus est terminé.
Apparemment.
Dn
Entrer.
Avez-vous déjà appuyé ? Si ce n'est pas le cas, le bouton est déjà relâché, tombant dans le camp dans Up et sécurisant un court assaut, plus que quelques courts assauts cnt_s. Dès qu'il est pressé, alors on l'appelle un lichnik à l'heure de la timidité de l'assaut du Temps. La trivalité vimiryuvannya nous allons dans les itérations de la machine. Une itération 20ms. La limite de l'assaut à long terme est de 20 itérations, ce qui donne environ 400 ms. Tout ce qui est supérieur à 0,4 s est important pour un assaut de longue durée. S'il frappe plus de 20 itérations, alors un jour de frappe est garanti et la machine est jetée au camp d'Al. Apparemment.
Al
Entrer.
Ils ne vous ont pas encore laissé entrer ? Si non, alors apparemment. Une fois le bouton relâché, nous passons à Up, laissant tomber le changement d'heure.

En une heure, mode_time, en deux secondes, le ciel peut être poussé - tout est à nous. La procédure d'analyse des données collectées et de ratissage du naticane va commencer. Tout y est simple. Banal case'om robimo nous avons besoin d'action. Je suis l'axe, par exemple, je place les enseignes comme si elles changeaient l'ordre. Golovne n'a pas bloqué l'ordre avec quoi que ce soit d'important, afin de ne pas laisser passer la combinaison offensive.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 | #inclure |
#inclure
Le code est écrit de telle manière que littéralement quelques lignes y sont liées sur l'AVR. Acceptez le bouton pressant au code de l'interprète. Toutes les fixations sur le fairway vont près de la tête, mais il n'y a rien là :
| 1 2 3 4 5 6 7 8 9 10 11 | #inclure |
#inclure Otzhe, portuvati tse pour l'autre architecture à droite, changez deux rangées. Eh bien, vous devrez peut-être modifier le mécanisme d'exécution automatique et le démarrage de la fonction de recherche. Comment allez-vous gagner en tant que répartiteur, système d'exploitation, ou bien en tant que système d'organisation du micrologiciel. Ale tse deux lignes dans le code à corriger. Tout ce qui est décrit dans l'article est dans deux fichiers bouton.cі bouton.h Vidéos robots
Dribniak Choix Eh bien, j'ai compris que la même machine finale peut être mise sur un rozbіr de quelque chose à tout moment. Par exemple, à l'occasion de toute autre enseigne, sous forme de clavier matriciel, ou d'extension de signal. Sur mes machines à microcontrôleur, j'ai un bouton vicoriste permanent. Tom a écrit conducteur simple travailler avec eux. Dans la version actuelle, le conducteur a été emprisonné sous les boutons, et il est facile d'en faire trop. Dans cet article, je décrirai les fichiers du pilote, et dans l'analyse offensive, il y a un mégot pratique. Le schéma de connexion des boutons est traditionnel, un contact du bouton est connecté à la sortie du microcontrôleur, l'autre est à zéro. Tirer les résistances internes. Les boutons sont connectés aux interrupteurs principaux du microcontrôleur, afin de ne pas interférer avec les fonctions des interrupteurs externes. Fichier d'en-tête pour supprimer les noms symboliques des registres et des connexions au port auquel le bouton est connecté. Cody, qui sera écrit dans le tampon lors de l'appui sur les boutons. Prototypes de fonctions. Nalashtovy vysnovki à certains boutons de connexion sur l'entrée et allumez les résistances qui tirent. Appelez en épi main`a. Activation unique du bouton Viconu. La fonction de mise en œuvre de la protection anti-écrasement est que le numéro du bouton sera entré dans le tampon, il est coupable d'être pressé par l'étirement d'un nombre donné de cycles d'itération. Le numéro du bouton est entré une fois dans la mémoire tampon, de sorte que le bouton sera supprimé pendant une longue période. Cette fonction est appelée en interrompant le temporisateur. Ce fichier doit remplacer l'implémentation de toutes les fonctions. Parmi eux, l'intérêt n'est peut-être qu'une fonction de l'éducation. Le bouton de l'horloge zvichayna peut être changé dans deux camps - celui enfoncé et celui relâché (le troisième camp est mauvais, ne nous appelez pas immédiatement). Dans un vipadka idéal, le bouton se déplace d'une station à l'autre, mais en réalité, lorsqu'il est pressé, les contacts clignotent et s'ouvrent, le premier se penche en arrière dans une station fermée. C'est ce qu'on appelle un bryazkale de contacts, et il est puissant pour tous les interrupteurs mécaniques. Le microcontrôleur fonctionne à une fréquence de mégahertz, et pendant qu'il bourdonne, vous pouvez réinitialiser le bouton du sprat une fois. Si vous ne vous habituez pas à de tels appels, les contacts bryazkit seront «pris» par le microcontrôleur comme un assaut riche. Pour certains programmes, ce n'est pas critique, par exemple, car le bouton allumera la lampe. Ale zdebіlshgo tse nebazhane. Les contacts Dribnennya peuvent être utilisés matériellement, à l'aide d'un filtre passe-bas passif. Mais il est beaucoup plus facile de surmonter le bryazkit, après avoir rendu le programme du microcontrôleur inacceptable pour le nouveau. Une variante de l'implémentation similaire à l'algorithme de la fonction BUT_Debrief() #define SEUIL 20 caractère volatile non signé touche enfoncée = 0 ; annuler MAIS_Debrief( annuler
) //quelle est l'heure du changement temporel ? //et ainsi le bouton disparaîtra longtemps } Sur l'épi de la fonction, il y a une expérimentation ultérieure de visnovkiv. Dès que le bouton est enfoncé, le code de la clé sera entré dans la clé de Timchas. Revoyons la signification de la composition de changement, afin que vous sachiez combien de temps le bouton est dans le camp pressé. Tant que comp n'atteint pas une certaine valeur de seuil THRESHOLD, il incrémentera. Dès que la valeur de comp devient égale à THRESHOLD, la touche sera copiée dans la mémoire tampon du bouton pressedKey. Avec cette comp, une nouvelle valeur est supprimée, de sorte que lorsque les boutons sont enfoncés, le microcontrôleur n'incrémente pas le changement et n'écrit pas dans le tampon. De cette manière, tant que le bouton n'a pas été appuyé longtemps, le microcontrôleur enregistrera le fait qu'il n'a été appuyé qu'une seule fois. Pour finir souvent, les boutons sont victorieux pour régler toutes les valeurs changeant linéairement. De cette façon, vous pouvez modifier manuellement un tel algorithme - une courte pression sur le bouton modifie correctement la valeur, une pression rapide est rapide. Soumettez une partie de la fonction à l'expérience et prenez une variante simple de l'implémentation de l'algorithme. #définir SEUIL2 300 si(comp == SEUIL) Maintenant, dès que le bouton est réduit pendant plus de 300 cycles, le microcontrôleur écrira encore et encore le code dans le tampon. Sur tsimu, tout est immobile, mais le sujet des boutons n'est pas clos. Dali être... Tâche : Élargissons le programme de soins avec une seule lumière. Lorsqu'on appuie sur le bouton, la lumière s'allume, lorsqu'elle s'éteint, elle s'éteint. Pour l'épi, je vais ajouter un schéma important. Pour la connexion au microcontrôleur, qu'il y ait des pièces jointes externes, il y a des ports et des E/S. Cuir des ports du bâtiment pratsyuvati yak à l'entrée et à la sortie. Nous allumons la lumière sur l'un des ports et le bouton sur l'autre. Pour qui nous confirmerons le contrôleur Atmega8. La puce a 3 ports pour les E/S, peut-être 2 temporisateurs/horloges à huit bits et 1 à seize bits. Un PWM à 3 canaux, une conversion analogique-numérique 10 bits à 6 canaux et bien plus encore sont également intégrés. À mon avis, le microcontrôleur est merveilleusement adapté pour apprendre les bases de la programmation. Pour connecter la diode électroluminescente au vicoriste, nous utilisons la ligne PB0, et pour lire les informations des boutons, nous utilisons la ligne PD0. Le schéma est illustré à la Fig.1. Mal. un À travers la résistance R2, une tension positive est appliquée à l'entrée PD0, ce qui donne un signal d'une unité logique. Lorsque le bouton est fermé, la tension tombe à zéro, ce qui s'apparente à un zéro logique. Nadal R2 peut éteindre les circuits, en le remplaçant par une résistance de tension interne, en introduisant les ajustements nécessaires dans le programme. Connexions légères au port de sortie PB0 via la résistance R3, qui entoure la strum. Pour allumer la lumière, vous devez envoyer un signal d'unité logique à la ligne PB0. Réglez le générateur d'horloge pour qu'il vicore en interne à 4 MHz, car le module complémentaire n'a pas de hautes fréquences tant que la fréquence n'est pas stable. Nous écrivons maintenant un programme. Pour l'écriture des programmes, j'utilise un support logiciel vicorist Studio AVRі winavr. Ouvrez AVR Studio, fusionnez à la fin du bain, appuyez sur le bouton "Créer un nouveau projet" (Nouveau projet), sélectionnez le type de projet - AVR GCC, écrivez le nom du projet par exemple "cod1", remettez les cases à cocher "Créer un dossier pour le projet" et "Créer un fichier "bouton d'initialisation", appuyez sur le bouton "Dalі", sélectionnez "AVR Simulator" dans la fenêtre de gauche et le type de microcontrôleur "Atmega8" dans la fenêtre de droite, cliquez sur le " Terminer", ouvrez l'éditeur et l'arborescence de la catégorie de projet - l'installation est terminée. Pour la première fois, ajoutez le texte standard des descriptions Atmega8 pour l'aide de l'opérateur pour recevoir les fichiers téléchargés : #inclure syntaxe des directives #inclure #inclure<имя_файла.h> Arches de Kutovі< и >pour indiquer au compilateur quels fichiers inclure, il est nécessaire de rechercher dans le dossier standard WinAvr avec les noms d'inclusion. Déplacez les pattes et demandez au compilateur de lancer une recherche du répertoire dans lequel le projet est enregistré. Pour le microcontrôleur de type skin, il existe un fichier d'en-tête séparé. Pour ATMega8, ce fichier s'appelle iom8.h, pour ATtiny2313 - iotn2313.h. Sur l'épi du programme skin, connectez le fichier d'en-tête du microcontrôleur, qui est un peu clin d'œil. Et puis il y a le gros fichier d'en-tête io.h. Le préprocesseur traite ce fichier et inclut le fichier d'en-tête requis dans notre programme. Pour nous, la première ligne du programme peut être vue comme l'axe comme ceci : #inclure Si le programme de mon Cі est coupable d'obov'yazkovo revenge one head function. Vaughn maє im'ya main. La programmation est toujours démarrée à partir de la fonction principale. Fonction maє en-tête - int main(void) et body - il est entouré d'arcs bouclés (). int principal (vide) Au corps de la fonction, nous ajoutons notre code. Les noms de fonction sont précédés du type de valeur à faire pivoter. Si la fonction ne fait pas tourner la valeur - la touche annuler. entier- nombre entier à 2 octets, plage de valeurs - 32768 à 32767 Après le nom de la fonction aux arches (), les paramètres sont spécifiés, car les fonctions sont passées à la fonction pour l'heure de la semaine. Comme une fonction sans paramètres - le mot clé est choisi annuler. Une fonction principaleà retirer de votre propre ensemble de commandes, pour améliorer le système et le cycle principal du programme. Nous a donné un port réà l'entrée Le mode de port du robot est défini dans le registre local DDRD(Registre pour la transmission directe d'informations). Le nombre "0x00" est écrit dans ce registre (0b0000000 - pour la double-vue), à l'exception du bouton auquel rien n'est connecté, puis tout le port D est affecté à l'entrée. Vous pouvez définir le port petit à petit en écrivant le numéro 0 ou 1 (0-input, 1-out) dans le bout en cuir du registre, par exemple DDRD = 0x81 (0b10000001) - la première ligne du reste du port D est appliqué à la sortie, reshta à l'entrée. Il est également nécessaire de connecter une résistance de tension interne. Notez que le contournement des résistances internes efface le registre PORTx afin que le port soit en mode d'entrée. Écrivons-le tout seul. Configurer un port B en vacances. Le mode de port du robot est défini dans le registre local DDRB. Rien, lumière vive à bâbord B n'est pas connecté, le port entier peut être configuré pour s'ouvrir. Tse vole un record au registre DDRB numéro "0xFF". Dans l'ordre, lorsque la lumière est allumée pour la première fois, sans brûler, nous écrivons sur le port B zéros logiques. Tse se précipite pour enregistrer PORTB= 0x00 ; Pour affecter une valeur, le symbole "=" est utilisé et s'appelle l'opérateur d'affectation, il est impossible de le confondre avec le signe "égal" Le réglage des ports ressemble à ceci : DDRD=0x00 ; Nous écrivons le cycle principal du programme. tandis que( "encore" de l'anglais) - cette équipe organise un cycle, répétant à plusieurs reprises le corps du cycle jusqu'au dernier sapin, jusqu'à ce que l'esprit gagne, c'est-à-dire jusqu'à ce que le viraz aux bras soit vrai. Il est admis dans la langue de Cі que c'est vrai, comme si le vin n'était pas égal à zéro, et c'est mauvais, comme si c'était bon. La commande ressemble à ceci : tandis que (umova) Notre façon de penser est que le cycle principal est composé de moins d'une commande. L'équipe Tsya donne un registre PORTB valeur de registre à inverser PORTD. PORTB = ~PIND ; //Obtenir la valeur du port D, l'inverser et l'affecter à PORTB (écrire sur PORTB) // virazi mon Cі lu de droite à gauche NIP registre des informations d'entrée. Afin de lire les informations de la vue actuelle du contrôleur, il est nécessaire de basculer la décharge requise du port en mode d'entrée. Tobto écrire dans le registre de bits vіdpovіdny DDRx zéro. Quelques jours plus tard seulement, il est possible d'envoyer un signal numérique à l'ensemble du visnovok depuis le bâtiment extérieur. Laissez le microcontrôleur lire l'octet du registre PINx. Au lieu d'un bit sortant, il envoie un signal au port d'origine. Notre programme est prêt et ressemble à ceci : #inclure Movі Сі a largement confirmé les commentaires. Il y a deux manières d'écrire. /*Commenter*/ Si tel est le cas, le compilateur ne respecte pas ceux qui sont écrits dans les commentaires. Comment utiliser le programme et se connecter au microcontrôleur 8 boutons et 8 diodes lumineuses, comme indiqué dans le petit 2, alors vous comprendrez que le port du mors en cuir ré répondez à votre port bit B. En appuyant sur le bouton SB1 - HL1 s'allume, en appuyant sur le bouton SB2 - HL2 s'allume lentement. Maliounok 2 L'article a rassemblé des éléments du livre de Belova A.V. "L'auto-lecteur du revendeur de dépendances sur l'AVR" L'ATMega16 MK dispose de trois temporisateurs/appelants - deux de 8 bits (Timer/Counter0, Timer/Counter2) et un de 16 bits (Timer/Counter1). La peau doit être remplie de registres spéciaux, l'un d'eux est le registre personnel TCNTn (n est le nombre entier 0, 1 chi 2). Ainsi, si le processeur bat une commande, au lieu de ce registre, il sera augmenté d'un (skin 8, 64, 256, 1024 cycles). C'est pourquoi le vin s'appelle Rakhunkov. Nouveau, encore un autre registre OCRn (Output Compare Register), dans lequel nous pouvons écrire nous-mêmes un tel nombre. Un lіchilnik 8 bits a des registres 8 bits. Dans le monde, les programmes à la place de TCNTn se développent et à un moment donné, il sera possible de sortir de la place de l'OCRn. Ensuite (en plus de spécifier des paramètres spéciaux) dans le registre d'indicateurs TIFR (Timer/Counter Interrupt Flag Register) l'un des processeurs, le processeur est invité à redémarrer, il est immédiatement vérifié pour la fin d'un cycle non arrêté et le temporisateur est desservis. Chaque fois que le processus est répété. Vous trouverez ci-dessous le graphique horaire pour le mode CTC (Clear Timer on Compare). Dans ce mode, le registre d'ouverture est effacé au moment de la journalisation au lieu de TCNTn et OCRn ; C'est loin d'être le seul mode du minuteur/refroidisseur robotique. Il est possible de ne pas effacer le registre personnel au moment du démarrage, alors le mode de génération de la modulation de largeur d'impulsion, qui est un article mondain offensant, le sera. Vous pouvez modifier le compte directement, c'est-à-dire qu'au lieu du registre de compte, vous changerez le programme dans le monde. Il est également possible de travailler les fenêtres non pas pour le nombre de commandes passées par le processeur, mais pour le nombre de changements de niveau de tension sur le T0 ou T1 "inférieur" (mode lanceur), vous pouvez automatiquement, sans la participation de processeur, modifiez le paramètre OCn bas dans la minuterie d'inactivité. Timer/Lichilnik1 tout en travaillant en parallèle avec deux canaux - A chi W. Pour démarrer la minuterie, vous devez définir le deuxième bit dans le registre de contrôle avec la minuterie TCCRn (Timer/Counter Control Register), après quoi vous commencez immédiatement votre travail. Nous pouvons regarder les modes robotiques actuels de la minuterie. Si vous avez besoin d'un robot dans un mode différent, alors lisez la Datasheet jusqu'à ATMega16 - tout y est écrit en anglais, il est donné d'appliquer des programmes en C et en assembleur (ce n'est pas pour rien qu'il faut 357 faces d'un texte rédigé ! ). Voyons maintenant les boutons. Nous choisissons de sélectionner un petit nombre de boutons (jusqu'à 9 pièces), de les connecter entre la «masse» et les boutons de n'importe quel port du microcontrôleur. Si vous souhaitez ajouter un certain nombre d'entrées, pour lesquelles vous devez installer les bits d'entrée dans le registre DDRx et activer la résistance interne pour prendre en charge l'installation des bits dans le registre PORTx. Avec cela, une tension de 5 V apparaît sur ces "fonds". Lorsque le bouton est enfoncé, l'entrée du MK est verrouillée sur GND et la tension tombe à zéro sur un nouveau (et peut-être aussi bien - vysnovok MK de courts-circuits au sol dans le camp vijatom). Lorsque le registre PINx est modifié, dans quel port est sélectionné (sur la vue PORTx, dans quel port est défini pour la fréquence du trafic, de sorte qu'il n'y ait pas de boutons à appuyer). En lisant périodiquement PINx, vous pouvez savoir si le bouton est enfoncé. UVAGA ! Si le dernier bit du registre DDRx est défini sur 1 pour votre bouton, la pression sur le bouton peut entraîner un petit effet pyrotechnique - faible sur le MK. Naturellement, le MK du suivant se trouve être pile au vent pour la mort... Passons à la partie pratique. Créez un nouvel espace de travail dans IAR et un nouveau projet avec un nom, par exemple TimerButton. Définissez les options du projet comme décrit dans l'article précédent. Et maintenant tapons un petit code. Voyons voir comment ça fonctionne. Dans les fonctions init_timern, des bits sont définis dans les registres TCCRn, OCRn et TIMSK, et cette manière peut être étrange ou inconnue de quiconque. Veuillez expliquer au début ce que signifie l'entrée "(1 de a est le nombre, dont deux manifestations doivent être détruites, et b indique combien de batailles vous devez détruire. Si tel est le cas, il est possible de gaspiller la valeur enregistrée dans a (vous ne pouvez donc pas toujours vous souvenir de celles qui étaient dans a). Regardons l'exemple : Ce qui doit apparaître dans la ligne suivante C = (22 2 pour le code 2 bits ressemblera à 00010110, et après le changement vers la gauche pour 3 bits, C = 10110000 est pris. De même, іsnuє і zsuv droitier. Un autre exemple: L'arrière de la tête est cassé au niveau des arcades intérieures (0xFF - tse 255 dans le code hexadécimal), s 11111111 ressemble à 111111100, puis il va se casser à droite et prendre C \u003d 00111111. Comme Bachimo, il y en a deux ensemble. deux temps. Soogo a disparu, yakby a été remplacé par le type int, de sorte que int prend 16 bits. Nous pouvons maintenant examiner deux autres opérateurs de bits largement utilisés lors de la programmation de MK. Le même opérateur est "bit à bit" (&) et "bit à bit" (|). Comment tu pues, je suppose, je serai au courant des applications: Dia : Résultat (pour code double) : С = 0 ; // C = 00000000 C = (1 // C = 00100101 C | = (1 // C = 00101101 C & = (0xF0 >> 2)); // C = 00101100 C = (C je 4) | 3 ; // C = 00000111
Petit n'a pas oublié! Є sche "désactiver au niveau du bit abo" (^). Il s'avère être en nombre égal, et même s'ils sont identiques, tournez 0, sinon un. Passons à notre programme. Il est écrit "(1 Lors de la compilation du programme, l'entrée WGM01 est simplement remplacée par le chiffre 3, et le résultat est une entrée correcte. WGM01 s'appelle une macro et ne prend pas de place dans la mémoire (c'est dans la mémoire du programmeur :-). Jetez maintenant un coup d'œil à la fiche technique, mais peu importe si vous savez que WGM01 est le troisième bit du registre TCCR0. Ces mêmes représentent d'autres batailles du même registre. Tsej zbіg not vypadkovo in vіdnositsya à tous les MK enregistrés (ou mayzhe à tous). Autrement dit, en écrivant "(1 Ensemble, d'affilée signifie que le mode STS est activé, lorsque le timer0 est activé, le camp OS0 «inférieur» (Won PB3) est modifié, au lieu du lichnik, le cycle skin 1024 est augmenté. De même pour timer2 : TCCR2 = (1 Le registre TIMSK (Timer/counter Interrupt MaSK register) est mis en mode interruption. Mi a écrit qu'est-ce que timer2 se réinitialise après l'augmentation de TCNT2 et OCR2. La fonction restante est la fonction actuelle de neutralisation de la minuterie2. Pererivannya être stupéfait par le rang à venir : de VECTOR - la macro du vecteur de la récursivité (derrière le changement se trouve juste un nombre qui caractérise la récurrence); tsі macros dans l'ordre de diminution de la priorité de reprotection dans le fichier iom16.h. TYPE - le type de la valeur que la fonction transforme en notre type vide (rien). Ім'я - plus de fonctions ім'я цієї. Avec des interruptions, il est toujours possible de s'éloigner du futur. En cas d'échec de notre fonction, il est de notre responsabilité de faire clignoter la lumière, de se connecter à PB0 et PB1. À toutes fins utiles, la fréquence est 11059200/(256*1024) = 42 Hz. Tse shvidko, mais on s'en souviendra d'un œil non obstrué. Avant le discours, zastosuvannya timerіv daє mozhlivіst vіdrahovuvaty exact hrіvі invalі, scho de ne pas mentir dans la complexité de votre programme et de commander її vykonannya (alternativement, vous n'avez pas plus d'une interruption). Ensuite, prenez le fichier comme "TimerDebug.c", ajoutez-le au projet, compilez, flashez le MK. Qu'est-ce que nous faisons? Lumière, connexions jusqu'à l'introduction de PB3, activement morgatime, et il n'y a pas de changements quotidiens sur PB0 et PB1. Pourquoi est-il à droite ? N'est-ce pas? Shchob tse z'yasuvati, arrive à améliorer notre programme. Il n'y a pas de débogueurs dans IAR, vous devez pirater AVR Studio. La partie centrale de la production peut être obtenue sur le site Web du constructeur http://atmel.com. Je suppose que les problèmes de vstanovlennyam ne sont pas à blâmer maisi. Avant de démarrer AVR Studio, sélectionnez le mode Débogage pour IAR et créez un fichier cof personnalisé (toutes les options du projet peuvent être définies, comme décrit dans l'article précédent). Bienvenue dans AVR Studio, nous vous souhaitons la bienvenue, veuillez sélectionner Ouvrir. Maintenant, allez dans le dossier avec le projet, là Debug \ Exe, sélectionnez "TimerDebug.cof" là-bas, créez le projet là-bas, deproponuyut, sélectionnez le périphérique ATMega16 et le mode de configuration du simulateur. Après tout, si tout a été fait correctement, je vais commencer le processus de récupération Le milieu du lagodzhennya ici est beaucoup plus difficile, car. permet de parcourir tous les registres du MK, et de régler manuellement les valeurs en cliquant sur la souris. Par exemple, pour définir un indicateur de redéploiement dans le registre TIFR au bit 7 (sous le carré noir à TIMSK), puis à l'étape suivante du programme (en appuyant sur F10 ou F11), vous pouvez avoir un processus de redistribution (l'indicateur sera être automatiquement défini lorsque vous modifiez les registres TCNT2 et OCR2). Ale, sur notre podiv, il n'y aura pas de réparation ! Poste alimentaire : pourquoi ? Registre Vіdcriєmo CPU, SREG. Ce registre est affecté au robot du processeur, le bit le plus important (I-bit, Interrupt bit) est chargé de traiter toutes les modifications dans le MC. Nous n'avons pas installé de yoga. Varto yogo vistaviti, comme dans le sillage de la résurrection (puisque le septième bit a été inséré immédiatement dans le TIFR). Vous pouvez noter une particularité : dès que le processeur entre dans le processus de reconstruction, ce bit (le drapeau de la distribution du bâtiment du traitement) est pris, et lorsque vous quittez la fonction, le processus sera automatiquement restauré encore. Tse ne permet pas au processeur, sans avoir terminé un réarrangement, de se rassembler pour un autre (même s'il est orienté dans le programme lui-même dans un tel rang - par enseigne). Plus tard, il est nécessaire d'ajouter une ligne au code pour définir ce bit dans un seul camp. Dodamo mi yogo à la fonction init_timer2. Viide arrive : Maintenant, après avoir fait la configuration Release et flashé le MK, appuyé sur F7 et lancé AVReal32.exe, c'est une bonne chose que tout fonctionne comme suit. Noter: lorsque le programme est ajusté, les intervalles des minuteries doivent être modifiés, comme s'il puait trop longtemps, de sorte que lors du processus de mise à niveau dans AVR Studio, le programme soit mis à jour mille fois plus, abaissez le milieu du MC, et vous ne vérifiez pas le fonctionnement de la minuterie. Zagalogodzhennya à nouveau similaire à celle d'autres systèmes de programmation, tels que Visual C ++. Maintenant, après avoir appris à ajuster le programme, créons un nouveau fichier dans IAR (et sauvegardons l'ancien du projet) et tapons le code suivant : Je vais commencer par prendre un fichier de firmware préparé (fichiers avant l'article, le dossier Release, le fichier TimerButton.hex ou compiler le texte) et écrire du yoga au MK. Après avoir changé le câble du micrologiciel, connectez-vous aux boutons PC0 et PC1 et essayez d'appuyer sur їх. Il est à noter qu'en appuyant sur l'un des boutons, le registre PORTB est augmenté (s'allume) et lorsqu'on appuie sur un autre, il change. Si cela ne fonctionne pas - essayez d'appuyer sur un bouton, en maximisant l'autre - d_yatime. À droite, dans le fait que j'allume les boutons dans l'ordre d'avancement: lorsqu'on appuie sur le bouton des moustaches, le MK "s'incline" à la porte, et lorsqu'il est relâché, il scintille jusqu'au sol. Comme vous avez connecté les boutons d'une manière différente, il faudra moins d'un peu pour moderniser le programme. Jetons un coup d'œil au code. Ici, le robot avec la minuterie est organisé trohi inakshe. Vіn spratsovuє kozhnі 11072 tact (tobto koіnі 1,001175 ms) Il existe également une fonction delay (long unsigned int Pause_ms), car elle prend le paramètre Pause_ms nombre de millisecondes, réinitialise le compteur et vérifie si le compteur atteint la valeur de Pause_ms, après quoi le robot MK continue. De cette façon, en écrivant delay(1500), nous formerons un retard dans le programme en 1,5 secondes. Ceci est particulièrement pratique pour former des intervalles horaires. Avec une minuterie, tout compris. Ale navіscho vіn vikoristovuєtsya? Jetons un coup d'œil à la boucle while(1) inépuisable de main(). Dans ce cycle, le montant du bouton est changé par analyse à la place du registre PINB. Et y a-t-il un fondu de 50 ms ? Tse usunennya t. « claquement de clés ». A droite, en appuyant sur le bouton, un coup porté à un contact est frappé contre l'autre, et, éclats de contacts métalliques, le coup est ressort. Contacts, ressorts, zamikayutsya qui rozmikayutsya kіlka razіv, ne respectant pas ceux qui doigtent zrobiv plus d'une poussée. Tse à produire avant que le MK ne fixe le sprat sur la pression. Jetons un coup d'œil au calendrier de la tension de retombée à la sortie PC0 par heure. Vin peut ressembler à ceci : Le point A est le moment où le bouton est enfoncé. Vin peut être en train de réparer MK. Alors allons-y sprats de zamikan et rozmikan (ils peuvent ne pas l'être, ou ils peuvent être 12 pièces - vous pouvez prendre la vue avec vipadkovym). Au point B, le contact est déjà superficiellement fixé. Mіzh A et B sont en moyenne proches de 10 ms. Nareshti, au point D il y a un romarin. Comment puis-je me débarrasser de cette manifestation inacceptable? Cela semble tout aussi facile. Il faut fixer le moment d'appuyer sur le bouton (point A), après une certaine heure, par exemple, 50 ms (point C) vérifier que le bouton est effectivement appuyé, pour s'assurer, que le bouton est appuyé à ce moment de libération (point D). Tobto doit faire une pause de A à C, de sorte que toute la "ronce" apparaisse au milieu de la pause. Et maintenant, essayez d'utiliser une rangée qui forme un repli, composez le programme et cousez-le dans MK. En appuyant simplement sur les boutons, vous pouvez facilement traverser, de sorte que toute la farine n'était pas merveilleuse. Et qu'en est-il du travail, si vous devez connecter, disons, 40 boutons à MK? Aje dans la nouvelle laisse 32 visnovkas. Ça aurait été mieux, pas question. En effet, c'est possible. Parfois algorithme vikoristovuyut, titres par gating. Pour lequel vous avez besoin de boutons pour vous connecter à la matrice, comme indiqué dans le petit (les petits sont tirés du livre de Morton "MK AVR, un cours d'introduction", où il est écrit sur la programmation AVR en assembleur). Lors de la soumission d'un journal visnovka PB0. 1 (+5V), et sur les bobinages PB1 et PB2 log. 0, il est permis d'éditer les boutons 1, 4 et 7. Vous pouvez déterminer quel type de cuir parmi eux en modifiant la tension de l'un des commutateurs PB3..PB5. Dans cet ordre, en donnant consécutivement les logs PB0..PB2. 1, vous pouvez attribuer le standard des boutons. J'ai réalisé que les broches PB0..PB2 peuvent être utilisées comme sorties et PB0..PB2 comme entrées. Pour déterminer le nombre de touches dont vous avez besoin pour un tableau de X boutons, vous devez connaître une paire de X multiplicateurs dont la somme est la plus faible (pour notre exemple de 40 boutons, les chiffres 5 et 8 seront nécessaires). Cela signifie que jusqu'à 256 boutons peuvent être connectés à un MK (et encore plus à partir des décodeurs, mais sur les décodeurs plus tard). Il est préférable de créer moins de sorties visnovkіv et plus d'entrées. Dans ce cas, l'expérimentation de toutes les lignes de la matrice prendra moins d'une heure. Un mode de connexion similaire (stroboscope) n'est pas moins puissant que les boutons. Vous pouvez y connecter divers appareils, en commençant par une matrice de diodes lumineuses et en terminant par des puces à mémoire flash. © Kiselov Roman
Se battre avec de la boue n'est plus obov'yazkovo ici. Parce que la fréquence de balayage est faible, de sorte que le bouton du modèle TM2 n'a pas émis de son sale - il s'est terminé plus tôt, diminuez le début du balayage. Et l'axe de ce qui peut être fumé ici, alors c'est tse zahist de la meilleure façon possible dans le résultat. Adzhe varto à l'avant pousse la ligne au moment de la lecture et sécurise l'assaut ponctuel. Il est possible de s'évader, après avoir fait le tour de l'automate. Disons qu'après avoir ajouté la dernière itération à Up, disons, deux ou trois itérations confirment que le bouton est toujours enfoncé et passent à Dn.
A vrai dire, j'ai un peu changé l'habillage de mon projet. Parce que si je n'avais pas besoin de beaucoup plus de pressions, alors j'ai mis l'enseigne "Dovge pressure" devant l'obrobnik AL i, contagieusement, en rangeant le nombre d'anciennes pressions. Ce qui a permis de déplacer l'étrangeté de l'interface robotique de l'accessoire, préjudiciable à l'assaut de l'entrée zdіysnyuvavsya à l'élément de menu, et la combinaison de deux longs assauts n'a pas vikoristovuvalis vzagalі. Schème
En tête de fichier
void BUT_Init(void);
void BUT_Debrief(void);
caractère non signé BUT_GetKey(void);
Tournez le bouton au lieu du tampon, lorsque le tampon est vidé. Appelé depuis la boucle principale du programme.
void BUT_SetKey(clé de caractère non signée);
Écrire dans la valeur du tampon. Vikoristovuetsya pour appuyer sur le bouton. Fichier actuel
caractère non signé comp = 0 ;
{
caractère non signé clé;
//Tests de suivi de visnovkіv mk
si(BitIsClear(PIN_BUTTON, ENTER))
clé = KEY_ENTER ;
sinon si(BitIsClear(PIN_BUTTON, ANNULER))
clé = KEY_CANCEL ;
sinon si(BitIsClear(PIN_BUTTON, UP))
clé=KEY_UP ;
sinon si(BitIsClear(PIN_BUTTON, DOWN))
clé = KEY_DOWN ;
autre{
clé = KEY_NULL ;
}
si(clé) (
//écrit її nombre dans le tampon
si(comp == SEUIL) (
comp = SEUIL + 10 ;
pressedKey = clé ;
retourner
;
}
sinon si(comp< (THRESHOLD+5)) comp++;
autre comp=0 ;
}
...
si(clé)
{
si(comp > SEUIL2)
{
comp = SEUIL2 - 40 ;
pressedKey = clé ;
retourner
;
}
autre comp++;
{
pressedKey = clé ;
retourner;
}
}
autre comp=0 ;
...
#include "mon_nom_fichier.h"
{
corps de fonction
}
PORTD=0xFF ;
DDRB=0xFF ;
PORTB = 0x00 ;
{
cycle corporel
}
// Commenter






Cherven 2007