[Programmation] Mon envoi de données par USB reset le code de ma carte de programmation
Répondre à la discussion
Affichage des résultats 1 à 8 sur 8

Mon envoi de données par USB reset le code de ma carte de programmation



  1. #1
    PierreBoss

    Mon envoi de données par USB reset le code de ma carte de programmation


    ------

    Bonjour,

    Tout est dans le titre...
    J'envoie des données avec un code python par câble USB à ma carte de programmation (en utilisant le port USB de programmation de ma carte). J'ai vérifié avec Wireshark et mes données sont biens envoyées.
    Par contre dès que je compile mon code python pour envoyer les données cela fait reset mon code qui tourne dans ma carte de programmation (je le vois car ce code gère un écran).

    Est ce que c'est normal ? Y'a-t-il une méthode permettant l'envoi de données par USB sans reset le programme de sa carte de programmation ?

    Voici mon code python :
    Code:
    #Python imports:
    import struct
    import socket
    import numpy as np
    import time
    import sys
    import math
    from serial import Serial
    
    BAUD_RATE = int(115200)
    
    ################################################################################
    # SendData Class #
    ################################################################################
    
    class SendData:
        def __init__(self, mode, address):
            """Initialize the SendData"""
            self.is_usb = (mode == 'USB')
            self.connect(address)
            print('Initialized at address {}'.format(address))
    
        def __del__(self):
            try:
                self.close()
            except Exception as err:
                pass
    
        ############################################################################
        # Communication protocol #
        ############################################################################
    
        def connect(self, address):
            self.serial_address = address
            self.open_serial_connection(self.serial_address, BAUD_RATE)
    
    
        def open_serial_connection(self, port, baud_rate):
            """Open the serial connection to the 2DMOT.
    
            Args:
                port (str): COM port used by the arduino
                baud_rate (int): baud rate for the serial communication
            """
            try :
                self.serial = Serial(port,baud_rate)
                self.serial.timeout = 2.
                self.serial.writeTimeout = 2.
                self.serial.readline() # remove setup bytes
                # self.serial.flushInput()
                # self.serial.flushOutput()
                print('Connected to port',port)
            except IOError as e:
                print(e)
    
    
        def close(self):
            self.serial.close()
    
    
        def send_Coils(self, msg):
            if(int(msg) >= 32768):
                print("Valeur a envoyer trop grande (coil)")
            else:
                """Send a message to the 2DMOT through the USB."""
                message = int(msg) + 32768
                self.send_serial_message(str(message).encode())
    
    
        def send_Wire(self, msg):
            if(int(msg) >= 32768):
                print("Valeur a envoyer trop grande (wire)")
            else:
                """Send a message to the 2DMOT through the USB."""
                self.send_serial_message(msg.encode())
    
    
        def send_serial_message(self, msg):
            """Send a message to the arduino through va serial communication.
    
            Args:
                msg (bytes): message to send to the arduino
            """
            # print("Send serial message")
            try:
                if self.serial :
                    # self.serial.flushInput()
                    # print(msg)
                    self.serial.write(msg)
    
                    flag = self.serial.read(4)
                    self.serial.flushOutput()
                    self.serial.flushInput()
                    print('flag: ', flag)
                    if flag == b'':
                        print('The 2DMOT encountered some issue while treating '
                            ' flag ', msg[0])
    
            except Exception as err:
                print(err)
    
    
    ###########################################
    # Constants #
    ###########################################
    
    MODE = 'USB'
    BOX_SERIAL_ADDRESS = 'COM7'
    
    ################################################################################
    # Initialize #
    ################################################################################
    
    CTRL_SendData = CTRL_SendData.SendData(MODE, BOX_SERIAL_ADDRESS)
    
    ################################################################################
    # Send values #
    ################################################################################
    
    if __name__ == '__main__':
    
        CTRL_SendData.send_Coils('400');
        CTRL_SendData.send_Wire('450');

    -----

  2. #2
    PierreBoss

    Re : Mon envoie de données par USB reset le code de ma carte de programmation

    Et voici ce que je vois avec Wireshark :
    .Envoie de la data avec send_coils : (400+32768 = 33168)
    Envoie_Coil.jpg

    .Envoie de la data avec send_wire :
    Envoie_Wire.jpg

  3. #3
    umfred

    Re : Mon envoie de données par USB reset le code de ma carte de programmation

    ta carte est uniquement alimentée par l'USB ? si oui, essai de l'alimenter par une alimentation externe.

  4. #4
    PierreBoss

    Re : Mon envoie de données par USB reset le code de ma carte de programmation

    Oui elle est seulement alimentée par l'USB. Je vais essayer cela merci !
    Il y'a une autre piste que je vais essayer de creuser : utiliser l'autre port USB pour faire l'envoi des données. J'ai remarqué que à chaque fois que j'utilise mon port USB de programmation (avec Putty, mon program python, ...) cela reset le code qui tourne sur ma carte. Le truc c'est que lorsque je fais l'envoi avec l'autre port USB, l'envoi ne marche pas et j'ai des messages d'erreur que j'ai du mal à interprété :

    Nom : Capture d’écran 2021-06-16 091513.png
Affichages : 137
Taille : 13,4 Ko
    Dernière modification par PierreBoss ; 16/06/2021 à 08h16.

  5. A voir en vidéo sur Futura
  6. #5
    umfred

    Re : Mon envoie de données par USB reset le code de ma carte de programmation

    il faut que le code arduino soit adapté pour utiliser ce port usb

  7. #6
    PierreBoss

    Re : Mon envoie de données par USB reset le code de ma carte de programmation

    Ce n'est pas une carte Arduino mais une carte faites par mon tuteur de stage (qui est en vacance justement). Le microcontrôleur qui se trouve sur la carte est le Atmel SAM3X8E.
    J'utilise Microchip studio. Dans le code je ne fais rien pour spécifier quel port USB utiliser ou non...
    Dernière modification par PierreBoss ; 16/06/2021 à 09h16.

  8. #7
    PierreBoss

    Re : Mon envoie de données par USB reset le code de ma carte de programmation

    J'ai essayé en branchant ma carte avec une autre alimentation mais cela ne change pas le code reset. Je pense que l'erreur vient du fait que j'utilise le port USB de programmation. Mais je ne comprend pas pourquoi j'ai un message d'erreur quand j'essaye d'utiliser l'autre port USB

  9. #8
    polo974

    Re : Mon envoi de données par USB reset le code de ma carte de programmation

    Sauf erreur, j'ai lu quelque part que la lib python serial joue avec les signaux de contrôle RS232 et que soyvent, lun d'eux est connecté au reset du micro...

    Perso, je pilote en python une tetra-palanquée de périphs série et usb/série sans passer par cette lib (bon, c'est sous linux, et je configure le port avec une bonne vieille commande stty).
    Jusqu'ici tout va bien...

Discussions similaires

  1. Envoi de données via l'uart d'un PIC16F877A
    Par invite639d7aaf dans le forum Électronique
    Réponses: 7
    Dernier message: 05/06/2014, 14h46
  2. arduino programmation vitesse puis transfert données sur carte SD
    Par invite4efb3780 dans le forum Électronique
    Réponses: 0
    Dernier message: 29/01/2013, 08h22
  3. envoi de données par GPRS
    Par invite9e01463d dans le forum Électronique
    Réponses: 3
    Dernier message: 06/02/2010, 08h55
  4. Envoi de données midi ave un pic
    Par LTHOMAS dans le forum Électronique
    Réponses: 7
    Dernier message: 09/08/2008, 10h30
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...