Communication entre AVR et PC à l'aide du port série virtuel

Olga Weis

Ce sera une manière très complète. Il est facile de suivre l’interface et le PC, l’interface RS232 via les ports COM. Comment écrire une interface RS232 sur l'ordinateur et l'AVR. Plus précisément, cet article comprend:

Contenu


  1. Broches de port sur l'ordinateur. Circuit AVR vers PC via le port COM.
  2. Créez un port COM virtuel pour le PC à des fins de simulation.
  3. Utilisez les fonctions de la bibliothèque d’exportation C standard telles que printf, scanf ... dans WinAVR.
  4. Écrire un programme de port COM sur PC (Visual C ++, Visual Basic)

1. Vue d'ensemble du port COM


C'est une forme de PC, d'ordinateur de bureau et d'ordinateur portable. Le port du port USB est celui qui a été adopté. Comment ça marche nouvel article.

La communication par port COM est RS232 communication en série. Cette norme est assez lente comparée à l'USB. Cependant, ce ralentissement. Les ports COM des ordinateurs existants (le cas échéant) sont principalement des connecteurs mâles à 9 broches. Cependant, il existe un port COM à 25 broches, qui est une femme, tandis que le port LPT est une femme.

Besoin de comprendre points principaux sur les modems nuls et brochage RS 232.

La figure 1 illustre deux types de ports et le tableau 1 récapitule les fonctions des ports.

9-pin COM et 25-pin COM Port
Figure 1.

broches sur le port COM
Tableau 1

Le plus notable dans le broches du port COM est le 3 broches 0V SG (masse du signal), les broches d'émetteur de données TxD et les broches de réception de données RxD. Ce sont trois broches de base pour la communication RS232 et compatibles UART sur l’AVR. Les broches restantes peuvent également être utilisées si l'utilisateur a une connaissance de l'organisation du registre du PC. Dans la plupart des cas, cependant, seules trois broches sont utilisées.

Comme indiqué dans AVR5-UART, les normes RS232 et UART sont généralement identiques en termes de transmission, de débit en bauds ... mais varient en tension et en polarité. Reportez-vous à l'exemple de comparaison de la figure 2.

Comparer UART et RS232
Figure 2.

En standard UART (sur AVR), le niveau 1 correspond à une haute tension (5V, TTL), tandis que pour RS232, le niveau 1 correspond à une basse tension (tension négative, par exemple -12 V). De toute évidence, un "convertisseur" entre les deux.

Heureusement, nous n'avons pas besoin de concevoir ce pont nous-mêmes, car il existe des CI dédiés. Le MAX232 est l’un des CI de commutateur UART-RS232 les plus utilisés. Bien sûr, vous pouvez créer un circuit simple avec seulement quelques composants tels que des condensateurs, des résistances, des diodes et des transistors mais la stabilité n'est pas garantie.

La figure 3 montre comment utiliser le CI Max232 pour se connecter entre UART sur AVR et le port COM de PC.

Connecter l'AVR au PC via Max232
Figure 3.

Le circuit ci-dessus a uniquement pour effet de faire varier le niveau de tension entre RS232 et UART. Cela ne change pas le mode de communication de ces normes et donc la programmation sur PC et AVR ne remplace pas, change. En fait, Max232 a deux impostes.

Sur la figure 3, nous n'utilisons que l'émetteur-récepteur 1. La broche TxD (broche 3) du port COM connecté au R1IN (entrée Receive 1) de Max232 correspond à la sortie R1OUT (réception) 1 doit être connectée au récepteur RX de l'AVR. Idem pour T1IN et T1OUT. La valeur des condensateurs 10uF est relativement standard, mais lorsque vous remplacez le condensateur par 1uF, le circuit reste actif, mais la distance de transmission (connecteur de la cabine) sera plus courte (si elle est trop longue, une erreur de communication sera générée). Les résistances de la figure 3 ne fonctionnent que pour protéger les ports COM et les circuits intégrés. Il est donc possible que vous ne deviez pas utiliser ces résistances sans affecter le fonctionnement du circuit. Vcc et GND sont des sources de circuits AVR.

Remarque: Si vous voulez communiquer entre deux ordinateurs ensemble via le port COM, vous devez utiliser 1 câble croisé (PLes broches TxD de Cx connectées au RxD de PC2 et vice versa) pour connecter 2 ports COM ensemble.

2. Créer un port COM virtuel pour la simulation


Pour établir une communication entre l’AVR et le PC via le port COM, vous avez évidemment besoin d’un port COM, vous devez également créer un circuit AVR et relier le Max232. Malheureusement, tous les ordinateurs n’ont pas ce port. Si vous souhaitez simplement apprendre à communiquer avec AVR-PC ou simplement tester un algorithme particulier, il est peut-être préférable de simuler la solution. Dans le but de simuler la communication RS232, Proteus est à nouveau utile pour simuler des transmissions de données avec des ports COM.

Le problème est donc de savoir comment créer des ports COM virtuels sur l’ordinateur et les connecter ensemble pour effectuer des simulations de communication . En raison de la nature du port COM, il n’est "ouvert" (ouvert) qu’une seule fois, ce qui signifie que les deux logiciels ne peuvent pas ouvrir le même port.

Notre idée est de créer deux ports COM virtuels qui sont "croisés" ensemble (par exemple, COM2 et COM3). La sortie Proteus de l'UART est connectée à COM2. Dans le logiciel PC (par exemple, HyperTerminal), nous nous connectons à COM3. De cette façon, nous avons pu communiquer entre l’AVR (modèle Proteus) et le PC (logiciel HyperTerminal).

Certains bons logiciels peuvent créer des ports COM virtuels et des connexions virtuelles entre eux, exactement comme nous le souhaitons. Dans cette section, je présenterai un logiciel Eltima (Virtual Serial Port Driver).

Virtual Serial Port Drive (VSPD) émule des ports série virtuels et les connecte par paires via un câble null modem virtuel. Les applications situées aux deux extrémités de la paire pourront échanger des données de manière à ce que tout ce qui est écrit sur le premier port apparaisse sur le second et inversement.

VSPD est facile à utiliser et stable. Après téléchargement continuez l'installation, recherchez et exécutez le fichier "Ajouter une paire".

Interface du VSPD comme indiqué à la figure 4.

Virtual Serial Port interface logicielle
Figure 4.

Dans l'onglet "Ports du gestionnaire", le logiciel suggère automatiquement la création de deux ports COM virtuels. Vous pouvez les sélectionner à nouveau et cliquer sur "Ajouter une paire" pour créer ces deux ports COM. Le port COM virtuel créé par VSPD apparaît dans la liste "Périphériques" de Windows et n'est pas perdu lorsque l'utilisateur désactive le logiciel VSPD. Exécutez le Gestionnaire de périphériques de Windows. Dans la section Ports (COM & LPT), vous verrez les ports COM virtuels créés (voir exemple à la figure 5).

Ports COM virtuels et connexions créées entre eux par VSPD
Figure 5.

3. Utiliser la bibliothèque d’export standard stdio.h dans WinAVR


Quiconque a déjà appris le langage de programmation C n'oubliera pas son premier programme "Bonjour le monde":

Bonjour le monde

Ce programme fait simplement le travail de taper "bonjour, monde" à l'écran. La lettre est imprimée par le"printf" commande en ligne 3. La printf commande est dans le stdio bibliothèque appelée bibliothèque d'entrée / sortie standard. La commande printf dans stdio n'est pas seulement destiné à l'impression à l'écran, mais peut imprimer sur n'importe quel périphérique de sortie, même imprimer un fichier sur le disque dur de l'ordinateur ...

Pour AVR, si vous utilisez le compilateur lorsque vous appelez printf, la chaîne est imprimée (sortie) sur le module UART (bien sûr, vous devez d'abord installer les registres UART pour activer l'UART).

CodevisionAVR lui-même comprend UART en tant que périphérique d'entrée / sortie par défaut pour les commandes de la bibliothèque stdio (printf, scanf ...). Cependant, avec WinAVR (avr-gcc), tout le reste est différent. Pour utiliser l'entrée et la sortie standard, nous devons déclarer un périphérique d'entrée et une fonction d'entrée "de base". La fonction de base est une fonction définie par l'utilisateur, dont la tâche est d'exporter (ou d'importer) un caractère vers un périphérique de saisie.

Par exemple, dans AVR5 - communication UART, nous définissons une fonction "uart_char_tx" caractères de sortie à UART comme suit:

uart_char_tx

Ou dans TextLCD nous regardons la fonction "putChar_LCD" pour afficher un caractère sur l’écran LCD comme ci-dessous:

putChar_LCD

Tous les deux "uart_char_tx" et "putChar_LCD" comme l'exemple ci-dessus peut être utilisé comme une fonction d'importation "de base" pour des fonctions telles que printf ... en standard sdtio bibliothèques d'exportation. Assumer la fonction "uart_char_tx" est utilisé lors de l'appel du printf fonction, la chaîne est exportée vers le UART.

En revanche, si le "putChar_LCD" fonction est utilisée comme fonction de base, la stdio printf La fonction affichera la chaîne de données sur l'écran LCD. Avec cette méthode, le traducteur avr-gcc nous permet d’accéder à la bibliothèque stdio de manière plus flexible. Vous pouvez utiliser les fonctions stdio pour exporter / importer des données vers n’importe quel périphérique, tel que terminal UART, TextLCD, LCD graphique ou même carte SD, MMC vous définissez la fonction d'entrée "de base".

Pour illustrer comment utiliser des fonctions dans le Pour illustrer comment utiliser les fonctions dans le stdio bibliothèque, je vais montrer un exemple de sortie de données vers TextLCD et uart en utilisant stdio's printf .... La simulation de circuit pour cet exemple est illustrée à la figure 6 ci-dessous.

Simuler l'exemple de sortie exemple avec la bibliothèque stdio
Figure 6.

Toutes les données affichées sur l’écran LCD et le terminal uart de la figure 6 sont effectuées via le printf et fprintf les fonctions. Dans cet exemple également, l’utilisateur peut entrer un caractère du clavier et le mot Code ASCII. de la clé sera imprimé sur le terminal. Le code affiché dans List1.

Exporter des données vers LCD et UART avec la bibliothèque d’export standard stdio
Liste 1.

Pour utiliser les fonctions de la bibliothèque de sortie standard, nous devons inclure le fichier d’en-tête de la bibliothèque comme à la ligne 4. "#include ".

Remarque lorsqu’on utilise avr-gcc, les fonctions liées à avr -libc sont situées dans le sous-répertoire "/avr/" du répertoire include.

Par exemple, l'en-tête io.h ou interruption.h contient des fonctions spéciales pour avr. Lorsque vous attachez ces fichiers, vous spécifiez quelque chose comme "#include " ... Cependant, le langage C standard (tel que stdio.h, math.h, ...) se trouve directement dans le répertoire include. Lorsque vous attachez ces fichiers, vous devez écrire directement comme dans la ligne de code 4. En outre, cet exemple utilise vous devez copier et inclure la bibliothèque myLCD.h comme à la ligne 5 (révision de TextLCD).

Comme indiqué ci-dessus, pour utiliser les fonctions de stdio, nous avons besoin de fonctions d'entrées / sorties de base. Les lignes 7 à 11 sont des fonctions de sortie nommées "uart_char_tx", qui servira de fonction de base pour les fonctions de sortie de stdio. le "uart_char_tx" la fonction a été discutée dans la leçon UART, où un petit changement a été apporté à la ligne 8 "if (chr == '\ n') uart_char_tx ('\ r')", cette ligne signifie que lorsque l'utilisateur veut afficher le caractère "\ n", la fonction " uart_char_tx " affichera le personnage '\ r'.

Donc si vous rencontrez un '\ n' (avec ASCII code 10, called Line Feed - LF) à la fin de la phrase, une combinaison de '\ r' + '\ n' (code '\ r' = 13 appelé retour chariot - CR) sera envoyé au flux. Pour mieux comprendre ce problème, vous en apprendrez plus sur le flux de retour de ligne (CRLF) dans Windows.

Deux lignes de code 13 et 14 sont très importantes lorsque vous utilisez la bibliothèque stdio. La signification de ces deux lignes est de créer deux "FICHIERS" virtuels (également appelés flux) pour l'exportation de données. Nous examinons la ligne 14: créer un flux pour l’UART.

statique FILE uartstd = FDEV_SETUP_STREAM (uart_char_tx, NULL, _FDEV_SETUP_WRITE);

Nous créons une variable nommée uartstd (nom d'utilisateur auto-nommé) de type FILE (type d'équipement virtuel), puis utilisons la macro "FDEV_SETUP_STREAM" pour initialiser et définir les paramètres de uartstd. Cette macro a pour fonction d’ouvrir une fdevopen et d’attribuer des "outils" d’importation dans le périphérique.

#define FDEV_SETUP_STREAM (mettre, obtenez, rwflag)

Le paramètre attaché "FDEV_SETUP_STREAM" se compose d'une fonction de base appelée "mettre", une fonction de base appelée "obtenir" et un drapeau indiquant la fonction de sortie ou d'entrée du dispositif en cours d'ouverture. Plus précisément, à la ligne 13, la variable uart std est un "périphérique virtuel" utilisé pour la sortie des données (en raison du _FDEV_SETUP_WRITE paramètre).

L’outil de sortie uartstd est le "uart_char_tx" fonction que nous avons créée ci-dessus. Il n'y a pas de fonction pour obtenir des données de uartstd (get = NULL parameter). Vous pouvez l’imaginer: la variable uartstd est une feuille de papier, la fonction "uart_char_tx" est un "tampon" qui permet d’imprimer un caractère sur une feuille de papier. Nous assignons "uart_char_tx" à usrtstd puis toutes les impressions sur du papier uartstd seront effectuées par "uart_char_tx". La fonction "uart_char_tx" s'appelle donc la fonction de base.

De même, à la ligne 13, nous créons un autre "papier" nommé lcdstd et sa fonction de base laisse la fonction "putChar_LCD", qui est déjà défini dans le myLCD.h bibliothèque.

Les lignes du programme principal des lignes 17 à 25 commencent par UART et TextLCD. Vous pouvez consulter les articles associés pour mieux comprendre. Après le démarrage, l'UART et l'écran LCD sont prêts pour l'exportation de données. Maintenant, nous pouvons utiliser les fonctions de la bibliothèque stdio comme printf ou sprint ... exporter les données. Vous verrez la figure 6 car je vais l'utiliser pour comparer les lignes de code suivantes. Ligne 27 "printf (" In lan 1 "), le but est d'imprimer la chaîne "In lan 1" sur l'écran LCD à l'aide de la fonction printf. Cependant, comme le montre la figure 6, cette chaîne ne s'affiche pas.

Maintenant, regardez la ligne 28 "fprintf (& lcdstd,"www.eltima.com")" et regardez à nouveau la figure 6, cette fois, vous avez vu la chaîne "www.eltima.com/fr/" apparaît sur l'écran LCD, avec succès avec la fonction fprintf. Le fprintf fonction est une fonction qui transmet des données à un périphérique virtuel, le premier paramètre de la fonction pointant sur le périphérique et le second paramètre à la chaîne de données à imprimer. Dans ce cas, nous avons utilisé fprintf pour exporter le "www.eltima.com/fr/" ficelle au lcdstd machine virtuelle et a réussi. Qu'en est-il de la fonction printf à la ligne 27? Regardons les lignes de 30 à 32. La ligne 30 utilise encore une fois la fonction printf "printf (" En lan 3 ")" pour imprimer le "lan 3" sur l’écran LCD mais toujours sans succès (voir LCD sur la Figure 6). À la ligne 31, nous assignons "stdout = & lcdstd" où stdout est une variable (en fait un flux ou un périphérique virtuel) du langage C, qui définit le périphérique par défaut pour la saisie de données. Lors de l'attribution de stdout à lcdstd en tant que ligne 31, nous déclarons que LCD est le périphérique d'entrée par défaut. Donc, à la ligne 32, nous appelons printf "printf (" Lan lan 4:% i ", x)" nous avons réussi.

Cette fois, regardez sur l'écran LCD la ligne "Lan Lan 4: 8205". Ici 8205 est la valeur de la variable x dans l’énoncé de la ligne 32. En résumé, le fprintf fonction permet d’imprimer directement sur un périphérique virtuel spécifié tout en utilisant le printf Nous devons assigner le périphérique d’entrée Precedes pour la variable stdout. Examinez le code des lignes 34 à 37 et les trois premières lignes du terminal de la figure 6, que vous connaissez probablement déjà.

Enfin, le serveur d’interruption de données UART se trouve dans les lignes de code 41 à 44. Dans cet exemple, nous exécutons simplement " Ma ASCII: " ligne avec la valeur reçue de "L'UART est contenu dans le registre UDR: "fprintf (& uartstd," Ma ASCII:% i \ n ", UDR)".

Pour bien comprendre le stdio Dans la bibliothèque WinAVR, vous devez lire la documentation du "Manuel avr-libc", section Fonctions standard IO.

4. Programmation avec le port COM à l'aide de Visual Basic et Visual C ++


Dans de nombreux cas, les exigences en matière de communication exigent un degré de complexité plus élevé, tel que le stockage de données ou la représentation graphique de variables, de sorte que les utilisateurs doivent écrire leurs propres programmes. Ce didacticiel explique comment écrire sur un ordinateur des programmes permettant de transmettre et de recevoir des données d'un port COM dans Visual Basic et Visual C ++ 6.0. Notez que l'objectif de cet article étant AVR, l'application écrite sous Windows Je viens de vous présenter un moyen simple de comprendre le principe. Pour développer des applications plus sophistiquées, les lecteurs doivent s’équiper de connaissances en programmation Windows. Dans tous les tutoriels ci-dessous, je suppose que le moins de lecteurs sait comment créer un projet dans Visual Basic ou / et Visual C ++.

1. Écrire un programme de port COM à l'aide de Visual Basic 6.0


Depuis les dernières versions de Windows 2000, la communication avec Windows, comme les ports LPT, était relativement difficile. Cependant, avec les ports COM, il est heureux que Microsoft fournisse un outil (en fait un contrôle) appelé "Microsoft Communication Control" ou MSComm en abrégé. MSComm est apparu dans les logiciels de programmation MS populaires tels que Visual Basic ou Visual C ++ en tant que "contrôle". En tant que "contrôleur" conçu pour les ports COM, MSComm contient tous les outils nécessaires pour communiquer avec ce port, le travail du programmeur est simplement de déclarer et d’utiliser. Pour illustrer l’utilisation de MSComm dans Visual Basic, suivez les instructions ci-dessous.

Exécutez Visual Basic 6, accédez au menu "Fichier / Nouveau projet" et créez un "EXE standard". Vous verrez un projet nommé "Projet1" avec une boîte de dialogue en arrière-plan nommée Form1. Vous pouvez nommer n'importe quel projet et formulaire principal. Dans la barre d’outils de la Boîte à outils, cliquez sur le contrôle "zone de texte" et tracez deux zones principales appelées txtOuput et txtInput (renommer les zones de texte dans la fenêtre Propriétés. en bas à droite, à droite) .Avec txtOutput, définissez le paramètre Multiple sur True et ScrollBars sur "3 - Les deux"

Ensuite, placez le contrôle MSComm dans le formulaire principal. Par défaut, le contrôle MSComm n'est pas disponible dans la boîte à outils Visual Basic, nous devons l'ajouter à la boîte à outils avant de l'utiliser. Pour ajouter MSComm à la Boîte à outils, sélectionnez le menu "Projet / Composants". Vous verrez une boîte de dialogue nommée Composants. Recherchez et cliquez sur "Microsoft Comm Control 6.0" comme indiqué dans l'image, puis cliquez sur OK. Maintenant, dans la Boîte à outils de VB, l’icône de MSComm apparaît. Cliquez sur cette icône et dessinez un objet MSComm sur le formulaire principal. Conservez le nom par défaut de cet objet est MSComm1.

Ecrire un code:

Le but de cet exemple est le suivant: Les données reçues du port COM sont affichées sur le txtOutput zone de texte, et lorsque l'utilisateur tapez 1 caractères dans le txtInput caractère sera transmis sur le port COM.

Tout d'abord, double-cliquez sur le formulaire principal, écrivez le code suivant dans le Form_Load () un événement:

Form_Load

Le but de ce code est de définir les paramètres pour MSComm1.

  • CommPort paramètre = 3 signifie que nous voulons nous connecter au port COM3. Ce paramètre varie en fonction du port COM avec lequel nous souhaitons communiquer.

    Paramètre Réglage = "38400, N, 8.1" signifie débit en bauds = 38400, pas de bit de parité, la longueur de trame est 8 et 1 bit d’arrêt
  • RThreshold = 1 signifie que lorsqu'il y a 1 caractère sur le port COM, une interruption de réception de données se produit.
  • InputLen = 1 Cela signifie que lors de la lecture des données depuis le tampon de réception, nous lirons un caractère (1 octet).
  • PortOpen = True permettant aux ports COM "ouverts" d'être prêts à communiquer.


  • Double-cliquez ensuite sur l’icône MSComm1 du formulaire principal pour écrire le code dans le répertoire. MSComm1_onComm () un événement:
MSComm1

Le onComm() l'événement est essentiellement un Gestionnaire d'interruptions MSComm. Lorsqu'il y a un octet de données envoyé au tampon du port COM (le nombre d'octets spécifié par le RThreshold), onComm événement se produira, dans ce cas nous écrirons le code pour recevoir et traiter les données. qu'il s'agisse. Ligne 2, nous déclarons une variable temporaire nommée InputText avec type de données chaîne. Notez que l’événement onComm peut se produire pour diverses raisons. Lorsque nous nous préoccupons uniquement du cas des données entrantes, la ligne 3 est une sorte d’événement "filtre". est récupéré):

Si Me.MSComm1.CommEvent = comEvReceive Ensuite. La seule chose importante à lire dans les données envoyées à COM est de lire le tampon d'entrée de MSComm comme indiqué dans la ligne 4: InputText = MSComm1.Input. Après cette commande, les données seront contenues dans la variable temporaire InputText. Ensuite, nous incrémentons les caractères reçus dans le contenu de la zone de texte txtOutput à afficher à l'écran (ligne 5): txtOutput.Text = txtOutput.Text + InputText. La ligne 6 est responsable d’amener le curseur à la fin du contenu de txtOutput pour une visualisation facile des données.

comEvReceive

Enfin, double-cliquez sur la zone de saisie de texte et recherchez l'événement KeyPress pour écrire les lignes de code suivantes:

Le txtInput_KeyPress événement se produit lorsqu'un utilisateur appuie sur une touche txtInput. La ligne Me.MSComm1.Output = Chr (KeyAscii) effectue l'envoi de la valeur de KeyAscii sur le port COM, où KeyAscii est le ASCII code de la touche enfoncée.

Vous avez fini d'écrire le port COM via Visual Basic. Pour tester votre programme, effectuez la simulation suivante:

  • Utilisez le logiciel VSPD pour créer deux ports COM virtuels COM2 et COM3, croisez-les (voir la section Port COM). virtuel).
  • Rechercher dans le dossier contenant le AVR_STD exemple et exécutez le fichier de simulation en utilisant Proteus AVR_STD_Terminal.DSN logiciel.
  • Retour à Visual Basic, cliquez sur le bouton Exécuter ou F5 pour exécuter le nouveau projet.
  • Cliquez sur Exécuter dans Proteus pour simuler le circuit. AVR_STD_Terminal.DSN. Yvous verrez du texte apparaître txtOutput. Cliquez sur txtInput et tapez une touche pour voir le résultat. Vous avez donc réussi à écrire une application COM avec un port COM dans Visual Basic.

2. Écrire un programme de port COM à l'aide de Visual C ++ 6.0


Cette partie du didacticiel explique comment utiliser un port COM comme dans l'exemple ci-dessus, mais utilise Microsoft Visual C ++ (VC ++). Le but principal est de vous expliquer comment utiliser MSComm dans VC ++. Je vais donc présenter des éléments très sommaires comme la création d’un projet dans VC ++. Les lecteurs doivent s’équiper davantage de connaissances sur la programmation VC ++. L'un des meilleurs didacticiels pour débutants est "Apprenez vous-même Visual C ++ 6 en 21 jours" de Sams Teach Yourself, que vous pouvez lire si nécessaire.

De VC ++, allez dans le menu "Fichier / Nouveau" pour créer un nouveau projet. Sélectionnez le type de projet comme "MFC AppWizard (exe)", Dans la zone Nom du projet, le projet est AVR_PC, cliquez sur OK. Dans la deuxième boîte de dialogue, sélectionnez "Basé sur la boîte de dialogue" pour le type de projet, puis cliquez sur Terminer pour créer le projet (les autres étapes sont celles par défaut).

Lorsque le nouveau projet est créé, une boîte de dialogue contenant les boutons "OK" et "Annuler" apparaît. Utilisez l'outil "Modifier" pour ajouter 2 "Zones d'édition" et réorganiser l'interface. Cliquez avec le bouton droit de la souris sur la boîte de dialogue Edit et sélectionnez Proterties dans le menu Popup, puis modifiez l’ID des 2 boîtes de IDC_OUTPUT est IDC_INPUT.

Comme dans VB, Control MSComm n'apparaît pas par défaut dans la boîte à outils VC ++, que nous devons ajouter lorsque nous voulons utiliser ce contrôle. Allez dans le menu "Projet / Ajouter au projet / Composants et contrôles ...". Lorsque la boîte de dialogue "Composants et Galerie de contrôles" apparaît, sélectionnez le dossier "Contrôles ActiveX enregistrés", accédez au fichier "Microsoft Communications Control, Version 6.0", cliquez sur le bouton Insérer, puis cliquez sur OK lorsque vous avez des questions. Cliquez sur le bouton Fermer pour fermer la boîte de dialogue. À ce stade, l'icône de MSComm apparaîtra dans la boîte à outils VC ++. Cliquez sur l'icône de MSComm et tracez un contrôle sur la boîte de dialogue principale du projet. Par défaut, ce contrôle est nommé IDC_MSCOMM1.

La programmation en VC ++ est plus difficile que VB (pour les débutants). Les propriétés des contrôles tels que la zone de saisie ne sont pas directement accessibles en tant que Textbox en VB. Par exemple, pour affecter et afficher une chaîne ou un numéro dans la zone de saisie, nous devons assigner et mettre à jour des données via des variables intermédiaires. Dans cette étape, nous créons deux variables pour les 2 zones d'édition.

Clique le "Vue / ClassWizard" menu ou le "Ctrl + W" combinaison de touches, dans le "MFC ClasWizard" Dans la boîte de dialogue, sélectionnez l’onglet "Variables membres". Cliquez sur la ligne IDC_OUTPUT, clique le "Ajouter une variable ..." bouton et entrez le nom de la variable "m_txtOutput" avec le type est CString.

Répétez les étapes ci-dessus pour créer une variable nommée "m_txtInput" pour "IDC_INPUT". Enfin, créez une variable nommée "m_comm" pour IDC MSCOMM1. Cliquez sur OK pour fermer la boîte de dialogue MFC ClassWizard. A partir de maintenant, il ne reste plus qu'à retenir les 3 variables "m_txtOutput", "m_txtInput", "m_comm" quand on veut accéder aux boîtes d'édition et à MSComm en écrivant du code.

Écrire un code:

Appuyez sur Ctrl + W pour rouvrir. ClassWizard, cette fois choisir le "Cartes de message" onglet, dans le "Nom du cours" boîte s'assurer que "CAVR_PCDlg" est sélectionné. Dans Object IDS, sélectionnez "CAVR_PCDlg" Messages" trouver et sélectionner "WM_INITDIALOGS" puis clique "Modifier le code".

Maintenant, vous pouvez écrire du code pour le "OnInitDilaog ()" un événement, événement qui se produit lorsque vous exécutez le programme et que la boîte de dialogue principale est lancée. Nous allons donc définir les paramètres pour m_comm ici (m_comm est le nom de la variable représentant le IDC_MSCOMM1 contrôle que nous avons créé dans les étapes ci-dessus). Ajouter les lignes suivantes après la "// TODO: Ajouter une initialisation supplémentaire ici" line:

Ces cinq lignes de code correspondent aux cinq lignes de la section Form_Load () de the VB project we have covered earlier, so I do not need to elaborate on these lines of code.

Form_Load

Ensuite, nous écrirons le code pour le onComm événement du contrôle MSComm, avant d’écrire le code, appuyez sur Ctrl + W pour afficher la boîte de dialogue ClassWizard et effectuer les six étapes pour ajouter l'événement onComm au projet.

Écrivez le code sa dans le onComm un événement:

onComm

Comme mentionné ci-dessus, m_comm est une variable qui représente MSComm. La gestion des ports COM est maintenant effectuée via la variable m_comm. En ligne 4, nous déclarons une sous-variable strInput du type CString qui contient la valeur de ce dernier. Comme en VB, l’événement onComm peut se produire pour plusieurs raisons.

Nous nous soucions seulement du cas où il y a des données dans la mémoire tampon, la ligne 5 permet de filtrer l'événement: si (m_comm. GetCommEvent () == 2). Ligne 6 on déclare une sous variable nommée in_dat avec le COleVariant type. COleVariant est la classe de MFC, son nom est une combinaison de C + OLE + UNE VARIANTE dans lequel OLE est "Liaison d'objets incorporée""Si un type d'objet "incorporé" n'est pas disponible, MSComm est un type OLE.

UNE VARIANTE est un type de variable inconnu. Quand vous avez un x ​​variable, vous voulez parfois assigner une valeur numérique à x, mais parfois, vous voulez attribuer une chaîne à x. Puis déclarer x est VARIANT. Dans le cas de MSComm, les données d'entrée et de sortie de cet objet sont "inconnu" ou "VARIANT".

À la ligne 7, nous obtenons simplement la valeur de m_comm sur la variable in_dat: in_dat = m_comm.GetInput(). La ligne suivante "extrait" l'élément string de la variable in_dat et lui assigner la variable strInput: strInput = in_dat.bstrVal (de manière relative, vous pouvez changer in_dat en CString et l’affecter à strInput).

Nous devons extraire CString parce que la boîte d'édition montre seulement CString. Pour afficher les données reçues dans la zone d'édition ( IDC_OUTPUT ) nous avons incrémenté la variable m_txtOutput (représenté par la boite d'édition IDC_OUTPUT ) avec la ligne 9: m_txtOutput + = strInput. Enfin, pour que la valeur de la m_txtOutput variable à mettre à jour dans la zone d'édition, nous devons appeler la fonction UpdateData avec le paramètre FALSE sous la forme de la ligne 10: UpdateData (FALSE) (voici comment fonctionne Visual C ++).

Les lignes 12 à 14 servent à placer le curseur à la fin de la ligne de la boîte Edi après la fin du processus de réception des données. Vous pouvez l'ignorer si ce n'est pas nécessaire.

Enfin, écrivez le code pour la zone d'édition ci-dessous (IDC_INPUT) de sorte que lorsque nous tapons, le caractère sera envoyé au port COM. presse Ctrl + W et suivez les étapes ci-dessous pour ajouter à la onChange un événement.

Ajouter un événement onChange pour IDC_INPUT
Figure 7.

Écrivez le code suivant dans la boîte d'édition onChange un événement:

onChange

Lorsque l'utilisateur tape un caractère dans la zone d'édition, le onChange événement se produit. Nous extrayons ensuite le dernier caractère du texte de la zone d'édition ci-dessous qui représente la variable m_txtInput avec la ligne de commande 11: tmpStr = m_txtInput.Right (1).

tmpStr est une variable temporaire déclarée à la ligne 9. Notez qu'il est important de lire le contenu de la boîte de dialogue Edition. Nous devons appeler UpdateData avec le précédent TRUE paramètre comme dans la ligne 10. Enfin, appelez la méthode SetOutput de l'objet MSComm pour envoyer la valeur du port COM: m_comm.SetOutput (COleVariant (tmpStr)).

Pour envoyer un caractère (ou une chaîne de caractères) au port COM, nous devons d’abord COleVariant car, comme indiqué, MSComm ne fonctionne qu'avec COleVariant. Paragraphe COleVariant (tmpStr) est ce que ca.

Après avoir écrit le code de l'événement onChange, vous pouvez appuyer sur Ctrl + F5 pour exécuter le programme. Utilisez le AVR_STD_Terminal. DSN et exécutez la simulation comme dans la programmation avec VB. Le résultat est présenté à la figure 8..

Communication entre AVR et Visual C ++
Figure 8.

Virtual Serial Port Driver

Exigences: Windows (32 bits et 64 bits): XP(seulement Standard)/2003(seulement Standard)/2008/ Vista/7/8/10, Windows Server 2012, Windows Server 2016 , 5.46MB taille
Dernière version 9.0.567 (le 5 Août, 2017) Notes de version
Catégorie: Serial Port Software