Répondre à la discussion
Affichage des résultats 1 à 12 sur 12

programmation ST7



  1. #1
    mokermann

    programmation ST7


    ------

    Bonjour à tous. Je suis en fin de deuxième année de DUT, et en ce moment, j'effectue mon stage de fin d'étude.
    Mon sujet de stage est la commande d'un onduleur par micro-contrôleur ST7. Je sais que la plupar d'entre vous me diront d'utiliser un pic (merci flowcode!!) mais là, c'est le ST7 obligatoirement.

    Les logiciels qui sont mis à ma disposition sont STM Visual programmer ST7 et COSMIC ST7.

    J'utilise un langage que mon maître de stage a fait lui même basé sur des #define. Ainsi, la programmation se fait par des mots simples tels que WRITE_PORT_PA0, READ_ANALOG...

    J'aimerai savoir quelle est la fonction équivalente en C à l'écriture sur une broche du micro-contrôleur. J'ai réussi à écrire sur le port tout entier, mais n'y arrive pas sur une seule broche.
    Quand je parle d'écrire, ce n'est pas une mise à 1 ou à 0; je lis une information sur une entrée et je veux écrire cette info sur une broche (j'espère que j'ai été clair).

    Je vous remercie d'avance; si vous avez des lien pour de la programmation ST7, n'hésitez pas.

    -----

  2. Publicité
  3. #2
    Jack
    Modérateur

    Re : programmation ST7

    Si ton compilateur ne l'a déjà pas prévu, tu peux te créer tes propres fonctions ou macro BitTest(), SetBit ou ClrBit().

    Sinon, je te recommande de bien lire un bon cours de C en t'attardant sur les champs de bits.

    de cette manière, tu pourras écrire des choses telles que:

    PORTA.Bit0 = 1;
    ou
    if (PORTA.Bit5) ....
    else ...

    A+

  4. #3
    mokermann

    Re : programmation ST7

    J'ai déjà une fonction SetBit/ClearBit.
    C'est juste que je cherche comment faire : exemple Write_Port_A0 = Read_Port_B3;
    Le #define du read fonctionne, je l'ai déjà testé.
    J'arrive à écrire sur tout le port, mais si je veux le faire seulement sur une broche, ça ne fonctionne pas.
    #define Write_Port_A0 ChgBit(PADR,PA0) ne fonctionne pas. La fonction ChgBit(x,y) ne fonctionne pas dans ce cas; je vais continuer de chercher des fonction C.

    Merci de ton aide.

  5. #4
    Jack
    Modérateur

    Re : programmation ST7

    Et en utilisant les champs de bits comme je te l'ai proposé, ça fonctionne?

    A+

  6. A voir en vidéo sur Futura
  7. Comparatifs

    Gagnez du temps et de l'argent grâce à nos comparatifs de produits. Parmi nos sujets :
  8. #5
    mokermann

    Re : programmation ST7

    Pour être franc, je ne sais pas ce qu'est un champ de bit. Je suis en train de regarder des cours sur le C en ce moment. Si tu as une définition simple, ça sera sympa!!
    merci

  9. #6
    Jack
    Modérateur

    Re : programmation ST7

    C'est pourtant du C standard. Et pour les µcontrôleur, c'est un aspect indispensable du langage. Voici comment l'utiliser par exemple:
    http://www.tastalian.org/scar/article-100.html

    En utilisant la structure de type union du C, on peut même faire cohabiter l'accès au port en tant que bit ou comme byte.

    A+

  10. Publicité
  11. #7
    mokermann

    Re : programmation ST7

    Si j'ai bien compris, un champ de bit agit un peu comme un tableau. Est-ce-qu'on peut le faire seulement pour un seul bit?

    Sinon, je viens de découvrir un truc important, la fonction que j'ai nommé plus haut ChgBit(x,y) et elle-même issue d'un #definie.
    #define ChgBit(VAR,Place) ( VAR ^= (1<<Place) )
    où VAR est le port du micro-contrôleur et Place le numéro du bit

    a priori, c'est au niveau du masquage qu'il y a un problème.

  12. #8
    Jack
    Modérateur

    Re : programmation ST7

    Si j'ai bien compris, un champ de bit agit un peu comme un tableau. Est-ce-qu'on peut le faire seulement pour un seul bit?
    oui! 1, 2, 3, ... ce que tu veux.

    #define ChgBit(VAR,Place) ( VAR ^= (1<<Place) )
    Ce n'est pas une fonction mais une macro. Celle-ci me semble correcte. Attention Place doit être comprise entre 0 et 7.

    A+

  13. #9
    Jack
    Modérateur

    Re : programmation ST7

    Voici un extrait du fichier d'entête pour le port A:

    Code:
    /*** PTAD - Port A Data Register; 0x00000000 ***/
    typedef union {
      byte Byte;
      struct {
        byte PTAD0       :1;                                       /* Port A Data Register Bit 0 */
        byte PTAD1       :1;                                       /* Port A Data Register Bit 1 */
        byte PTAD2       :1;                                       /* Port A Data Register Bit 2 */
        byte PTAD3       :1;                                       /* Port A Data Register Bit 3 */
        byte PTAD4       :1;                                       /* Port A Data Register Bit 4 */
        byte PTAD5       :1;                                       /* Port A Data Register Bit 5 */
        byte PTAD6       :1;                                       /* Port A Data Register Bit 6 */
        byte PTAD7       :1;                                       /* Port A Data Register Bit 7 */
      } Bits;
    } PTADSTR;
    extern volatile PTADSTR _PTAD @0x00000000;
    #define PTAD                            _PTAD.Byte
    #define PTAD_PTAD0                      _PTAD.Bits.PTAD0
    #define PTAD_PTAD1                      _PTAD.Bits.PTAD1
    #define PTAD_PTAD2                      _PTAD.Bits.PTAD2
    #define PTAD_PTAD3                      _PTAD.Bits.PTAD3
    #define PTAD_PTAD4                      _PTAD.Bits.PTAD4
    #define PTAD_PTAD5                      _PTAD.Bits.PTAD5
    #define PTAD_PTAD6                      _PTAD.Bits.PTAD6
    #define PTAD_PTAD7                      _PTAD.Bits.PTAD7
    C'est pour du freescale (motorola), mais c'est facilement transposable.

    Ainsi, si j'écris:
    PTAD_PTAD1 = 0;

    c'est traduit en asm par:
    bclr 1, PTAD

    Il n'y a pas plus efficace.

    A+
    Dernière modification par Jack ; 15/04/2008 à 15h38. Motif: orthographe

  14. #10
    mokermann

    Re : programmation ST7

    Merci, j'ai trouvé une alternative; je passe par une autre variable et ensuite j'écris sur le port (c'est un peu fouilli dans les registre que mon maître de stage à fait^^). J'ai essayé ta solution et elle fonctionne (un grand merci à toi Jack!). Je vais exposer les deux solutions à mon maître de stage, la tienne et plus "encombrante" mais au moins elle est universelle; car le but final, c'est de pouvoir adapter ce langage à tout type de micro-contrôleur (ST7, PIC, DSP,...)
    Merci de ton aide; votre forum m'a toujours été utile dans tous mes projets!

  15. #11
    Jack
    Modérateur

    Re : programmation ST7

    a tienne et plus "encombrante"
    Il faut évidemment mettre toutes ces déclarations dans un fichiers d'entête *.h.

    Merci de ton aide; votre forum m'a toujours été utile dans tous mes projets!
    Tu n'as pourtant que 5 messages au compteur

  16. #12
    mokermann

    Re : programmation ST7

    Oui, mais avant, je lisais juste les sujets, sans intervenir dans les conversations. Il faillait bien que je m'inscrive un jour de toute façon, c'est super utile. Enfin je vais arrêter là, parce que je pense que je fais du flood la. Alors merci encore et à bientôt.

  17. Publicité

Discussions similaires

  1. programmer le microcontroleur ST7
    Par habibo dans le forum Électronique
    Réponses: 8
    Dernier message: 27/02/2008, 22h42
  2. Programmation avec le st7
    Par Juto76 dans le forum Électronique
    Réponses: 2
    Dernier message: 09/04/2007, 13h58
  3. aide en ST7
    Par jkiol78 dans le forum Électronique
    Réponses: 7
    Dernier message: 07/06/2006, 14h00
  4. besoin d'aide en programmation ST7
    Par jkiol78 dans le forum Électronique
    Réponses: 2
    Dernier message: 07/06/2006, 12h02
  5. micro ST7
    Par CCCP dans le forum Électronique
    Réponses: 2
    Dernier message: 26/01/2006, 21h57
Découvrez nos comparatifs produits sur l'informatique et les technologies.