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

C Discussion :

P8055 pilotage des sorties digitales


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2008
    Messages
    289
    Détails du profil
    Informations personnelles :
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2008
    Messages : 289
    Par défaut P8055 pilotage des sorties digitales
    bonjour,
    je travaille en C avec Mandriva 2011 via VirtualBox supporté par Windows 8.1
    Je dois piloter une carte Velleman P8055-1, ses sorties digitales (leds) pour l'instant. Velleman fournit tous les fichiers nécessaires à l'installation.
    J'avais écrit au début:
    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
     
    int adresse;
     
    adresse = OpenDevice(0);
    if(adresse < 0)
    {
      printf("OpenDevice: echec (%d).\n", adresse);
      _exit(-1);
    }
    WriteAllDigital(1);  //allumer led 1
    usleep(500000);
    WriteAllDigital(2);  //allumer led 2
    usleep(500000);
    WriteAllDigital(4);  //allumer led 3
    usleep(500000);
    ClearAllDigital();
    CloseDevice();
    led 1 s'allume systématiquement, led2 de temps en temsp et led 3 jamais. Et elles ne s'éteignent jamais à la fin.
    J'en suis venu à écrire cela (désolé):
    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
     
    nt adresse;
     
    adresse = OpenDevice(0);
    WriteAllDigital(1);  //allumer led 1
    CloseDevice(0);
    usleep(500000);
    adresse = OpenDevice(0);
    WriteAllDigital(2);  //allumer led 2
    CloseDevice(0);
    usleep(500000);
    adresse = OpenDevice(0);
    WriteAllDigital(4);  //allumer led 3
    CloseDevice(0);
    usleep(500000);
    adresse = OpenDevice(0);
    ClearAllDigital();
    CloseDevice();
    Et ça fonctionne. Si quelqu'un a utilisé ce genre de matériel et a été confronté au pb, je veux bien un avis.

    Pour finir, j'ai placé mon code dans une boucle infinie et là, OpenDevice() échoue systématiquement mais de façon aléatoire.
    Je n'arrive pas à déterminer si c'est un pb matériel, d'installation ou autres...

    Merci

  2. #2
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    Essaie d'intercaller un ClearAllDigital() avant chaque write.
    Essaie WriteAllDigital(0) pour éteindre les leds

    Par ailleurs, il y a certainement une fonction WriteDigital(i) qui permettrait de ne s'occuper que d'un seul digital, c'est à dire une seule led.
    J'ai l'impression que WriteAllDigital attend un masque désignant l'état de toutes les sorties.
    WriteDigital(5) allumerait les leds 0 et 2 (en numérotant à partir de 0, donc) car 5 == 1+4 == (1<<0) + (1<<2)

  3. #3
    Membre éclairé
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2008
    Messages
    289
    Détails du profil
    Informations personnelles :
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2008
    Messages : 289
    Par défaut
    bonjour,
    il y a effectivement d'autres fonctions comme : SetDigitalChannel(channel) mais ça ne résoud pas le pb.
    J'ai testé tes suggestions --> idem.

    J'ai mis à jour ma version de VirtualBox et je vais tester avec une distribution plus récente (Mint) qui assure mieux prendre en compte l'USB.

    A+, merci.

  4. #4
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    J'ai peur que ca ne change rien, si ca passe déjà, le problème est a priori ailleurs.

Discussions similaires

  1. Redirection des sorties EXP sous Unix
    Par Alain B. dans le forum Import/Export
    Réponses: 3
    Dernier message: 11/02/2008, 13h57
  2. Comment faire des entrées et des sorties
    Par adam.gobe dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 30/08/2007, 06h02
  3. Réponses: 2
    Dernier message: 27/10/2006, 17h07

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