IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Embarqué Discussion :

Xbee API PWM


Sujet :

Embarqué

  1. #1
    Candidat au Club
    Femme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Octobre 2012
    Messages : 7
    Points : 2
    Points
    2
    Par défaut Xbee API PWM
    Bonsoir,
    J'ai un projet à réaliser avec la carte Xbee S8 et j'ai besoin d'aide à propos.
    j'utilise l'API de Xbee (en java) pour communiquer avec la carte, le problème que j'ai rencontré c'est au niveau d'envoie d'une commande AT.
    je veux tester PWM alors j envoie : xbee.sendAtCommand(new AtCommand("P0",2) et ça marche bien,mais lorsque je veux modifier le Duty Cycle de pwm et j le met en max par exemple: xbee.sendAtCommand(new AtCommand("M0",0x3FF)) je reçois le problème suivant : input value [1023] is larger than a byte
    Merci d'avance

  2. #2
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 679
    Points
    13 679
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    0x3FF (hexadécimal) = 1023 (décimal). Or, un byte est composé de 8 bits donc la valeur maximale représentable (en non signé) est àxFF = 255. 255 < 1023 donc tu ne peux pas représenter 1023 avec un byte. C'est clairement ce que dit le message d'erreur.

    Il faut mettre une valeur en 0x00 et 0xFF.

  3. #3
    Candidat au Club
    Femme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Octobre 2012
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    Merci pour votre réponse.
    oui vous avez raison mais ce que je demande c'est est-ce qu'il y a pas une solution pour envoyer 3FF comme duty cycle pour arriver à 100% de pwm?

  4. #4
    Membre confirmé
    Avatar de deletme
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2011
    Messages : 257
    Points : 519
    Points
    519
    Par défaut
    Bonjour,

    Dans la documentation de ton module il précise en effet que la valeur max correspond à 0x3FF. Cependant, tu ne peux émettre que octet par octet, il te faut donc envoyer 0x3F puis 0xF0. Regarde page 62 de ta documentation, une trame type est présentée.

    Peut-être que tu n'utilises pas la bonne méthode Java pour émettre plus d'un octet de données.

    En espérant t'avoir éclaircie.
    "Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live."
    - Martin Golding
    Traduction obligatoire : "Toujours écrire du code en gardant en tête que le mec qui en assurera la maintenance est un psychopathe violent qui connait votre adresse"

  5. #5
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 679
    Points
    13 679
    Billets dans le blog
    1
    Par défaut
    Peux-tu nous donner un lien vers l'API que tu utilises stp ?

  6. #6
    Membre confirmé
    Avatar de deletme
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2011
    Messages : 257
    Points : 519
    Points
    519
    Par défaut
    Je pense que c'est celle-ci :

    http://code.google.com/p/xbee-api/wiki/DevelopersGuide

    Pour envoyer plusieurs octets de données, il faudrait passer par un tableau car la méthode ne prendrait qu'un argument de "datas" (après une lecture rapide de la documentation).
    "Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live."
    - Martin Golding
    Traduction obligatoire : "Toujours écrire du code en gardant en tête que le mec qui en assurera la maintenance est un psychopathe violent qui connait votre adresse"

  7. #7
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 679
    Points
    13 679
    Billets dans le blog
    1
    Par défaut
    Je pense aussi à celle là car c'est elle qui sort le plus avec Google ^^

    Ce qui m'étonne un peu, c'est que cette API possède un constructeur de commande AT qui prend en paramètre un int, donc 32 bits signés en Java : http://xbee-api.googlecode.com/svn/t...va.lang.String, int)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    AtCommand
    
    public AtCommand(java.lang.String command,
                     int value)
    @tataniyato : quand obtiens-tu l'erreur ? A la compilation dans Eclipse ou à l’exécution de l'application Java ?

  8. #8
    Candidat au Club
    Femme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Octobre 2012
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    Bonjour ,
    je vous remercie pour votre réponse.
    voila le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    
    public PWM() throws XBeeException {
           try {	
                 xbee.open("COM33", 9600);
    	     // allumer la LED
                 log.info("P0 is " + xbee.sendAtCommand(new AtCommand("P0",2)));
    	log.info("M0 is " + xbee.sendAtCommand(new AtCommand("M0",0x3FF)));
    			
    	} catch (Exception e) {
    		log.error("at command failed", e);
    	} finally {
    		xbee.close();
    		}
    	}
    en fait l'erreur est au niveau compilation , j'ai essayé même d'envoyer la commande dans un tableau mais ça marche pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    
    log.info("M0 is " + xbee.sendAtCommand("M0",new int[]{0x3F ,0xF0})));
    dans ce cas je ne reçois pas d'erreur de compilation mais plutôt d'exécution :

    [com.rapplogic.xbee.examples.PWM] M0 is command=M0
    status=ERROR
    value= apiId=AT_RESPONSE (0x88),length=5,checksum=0xf8,error=false,frameId=0x01

  9. #9
    Membre confirmé
    Avatar de deletme
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2011
    Messages : 257
    Points : 519
    Points
    519
    Par défaut
    Bonjour,

    D'après la doc de l'API (en supposant que tu utilises bel et bien celle que j'ai citée), la méthode sendAtCommand est dépréciée, à ne pas utiliser donc.

    Il faudrait utiliser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sendSynchronous(command, timeout);
    Ton retour ne semble pas être forcément une erreur d'exécution, c'est juste ton log qui affiche le retour de la méthode sendAtCommande.
    "Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live."
    - Martin Golding
    Traduction obligatoire : "Toujours écrire du code en gardant en tête que le mec qui en assurera la maintenance est un psychopathe violent qui connait votre adresse"

  10. #10
    Candidat au Club
    Femme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Octobre 2012
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    Bonjour,
    J'ai essayé sendSynchronous() et je reçois le même problème

  11. #11
    Membre confirmé
    Avatar de deletme
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2011
    Messages : 257
    Points : 519
    Points
    519
    Par défaut
    Pourrait-on voir ton code ?

    Et avec ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    	
    
    
    log.info("M0 is " + xbee.sendSynchronous(new AtCommand("M0",new int[]{0x3F ,0xF0}), 5000));
    Sinon, qu'est ce qui te fais dire que ça ne fonctionne pas ? tu as un oscilloscope de brancher sur la PWM ?
    "Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live."
    - Martin Golding
    Traduction obligatoire : "Toujours écrire du code en gardant en tête que le mec qui en assurera la maintenance est un psychopathe violent qui connait votre adresse"

  12. #12
    Candidat au Club
    Femme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Octobre 2012
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    le voila mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    package com.rapplogic.xbee.examples;
    
    import org.apache.log4j.Logger;
    import org.apache.log4j.PropertyConfigurator;
    
    import com.rapplogic.xbee.api.AtCommand;
    import com.rapplogic.xbee.api.XBee;
    import com.rapplogic.xbee.api.XBeeException;
    
    public class PWM {
    
    //	TODO split class in to WPAN class
    	 
    	private final static Logger log = Logger.getLogger(PWM.class);
    	
    	private XBee xbee = new XBee();
       // String port = DisplayAutPort.portcom() ;
    	@SuppressWarnings("deprecation")
    	public PWM() throws XBeeException {
    		
    		try {	
    			// replace with port and baud rate of your XBee
    			
    			xbee.open("COM33", 9600);
    			// allumer la LED
    			
    			log.info("P0 is " + xbee.sendAtCommand(new AtCommand("P0",2)));
    			log.info("M0 is " + xbee.sendSynchronous(new AtCommand("M0",new int[]{0x3F ,0xF0}), 5000));
    			
    		} catch (Exception e) {
    			log.error("at command failed", e);
    		} finally {
    			xbee.close();
    		}
    	}
    	
    	public static void main(String[] args) throws XBeeException {
    		
    		PropertyConfigurator.configure("log4j.properties");
    		
    		new PWM();
    	}
    }
    même ce code ne fonctionne plus ,il m'affiche la même erreur de status de la commande AT. Sinon pour le tester je branche une LED

  13. #13
    Membre confirmé
    Avatar de deletme
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2011
    Messages : 257
    Points : 519
    Points
    519
    Par défaut
    Ok, quelle est la fréquence de la PWM ?
    Une erreur typique est qu'elle soit trop élevée pour que l'oeil humain ne perçoive le clignotement.
    "Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live."
    - Martin Golding
    Traduction obligatoire : "Toujours écrire du code en gardant en tête que le mec qui en assurera la maintenance est un psychopathe violent qui connait votre adresse"

  14. #14
    Candidat au Club
    Femme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Octobre 2012
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    Non c'est pas du tout problème de clignotement parce que lorsque j'envoie 3FF par le logiciel X-CTU la différence de l'éclairage de la LED se voit très clairement

  15. #15
    Candidat au Club
    Femme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Octobre 2012
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    Bonjour ,
    j'ai arrivé à résoudre le problème
    on fait c'était au niveau d'envoie du commande AT , il fallait l'envoyer de cette façon :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    
    log.info("M0 is " + xbee.sendAtCommand(new AtCommand("M0", new int[] {0x3,0xFF})));

  16. #16
    Membre confirmé
    Avatar de deletme
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2011
    Messages : 257
    Points : 519
    Points
    519
    Par défaut
    Bonjour,

    Merci de ton retour. En effet, en relisant mon premier post je m'aperçois de l'énormité que j'ai écrite... désolé il fallait bien, comme tu le précises envoyer 0x03 puis 0xFF et non 0x3F et 0xF0...

    PS : n'oublies pas de passer en résolu
    "Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live."
    - Martin Golding
    Traduction obligatoire : "Toujours écrire du code en gardant en tête que le mec qui en assurera la maintenance est un psychopathe violent qui connait votre adresse"

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Envoi des trames API entre modules xbee
    Par Rawend dans le forum C
    Réponses: 6
    Dernier message: 21/07/2014, 01h35
  2. Documentation gratuite sur l'API Windows, COM, DCOM, OLE, etc.
    Par Community Management dans le forum Windows
    Réponses: 1
    Dernier message: 16/11/2006, 15h28
  3. FOnction api specifiant la position de la souris
    Par florent dans le forum C++Builder
    Réponses: 4
    Dernier message: 15/05/2002, 20h07
  4. faire un selection dans une image aves les APIs
    Par merahyazid dans le forum C++Builder
    Réponses: 3
    Dernier message: 30/04/2002, 10h44
  5. Une petite aide pour les API ?
    Par Yop dans le forum Windows
    Réponses: 2
    Dernier message: 04/04/2002, 21h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo