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 :

Introduire du C dans flowcode


Sujet :

C

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 6
    Par défaut Introduire du C dans flowcode
    Bonjour

    Je voudrai savoir comment pouvais-t-on introduire du C dans flowcode ?
    Il y a un "block" nomme "insérer du code C) pour .... introduire du code C, mais ensuite, comment coder à l'intérieur ?
    Car dans flowcode on a facilement accès aux bits pour leur introduire des valeur (par exemple 1 -> PORT A bit unique : 1)
    Alors, comment convertir cela en C ?

    Merci d'avance

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 486
    Par défaut
    Citation Envoyé par geogeo46 Voir le message
    Je voudrai savoir comment pouvais-t-on introduire du C dans flowcode ?

    Il y a un "block" nomme "insérer du code C) pour .... introduire du code C, mais ensuite, comment coder à l'intérieur ?
    Je ne connais pas Flowcode mais il me semble qu'il s'agit de deux questions différentes. Pour insérer du code C, tu viens de répondre toi-même.

    Pour manipuler des bits, en C ou dans n'importe quel autre langage lorsque que l'on ne peut pas descendre directement au-dessous du niveau de l'octet, on utilise des opérations logiques ET, OU, NON, OU Exclusif, etc. Tu disposes également des opérateurs de décalage « << » et « >> ».

    Par exemple, pour mettre à « un » le bit 5 d'un entier x, tu feras :


    Par contre, pour communiquer avec Flowcode lui-même, et savoir comment récupérer les valeurs initiales des registres que l'on souhaite modifier, il faudra voir dans la doc.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 6
    Par défaut
    Alors j'ai chercher un peu et j'ai trouvé ceci :

    http://www.datasheetcatalog.org/data.../189381_DS.pdf

    A la page 14 on trouve les adresses des différents ports.
    Donc par exemple, si je souhaite mettre une certaine valeur dans le bit 3 du "PORT A", comment cela pourrai se traduire en C ?
    Il manque des données pour le faire ?

    Merci d'avance ^^

  4. #4
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 486
    Par défaut
    Citation Envoyé par geogeo46 Voir le message
    Alors j'ai chercher un peu et j'ai trouvé ceci :

    http://www.datasheetcatalog.org/data.../189381_DS.pdf
    Okay ! Donc tu travailles sur PICxxxxx, et Flowcode est un outil de génération de code par contraintes pour ce type de processeur entre autres. Cela fait beaucoup d'informations essentielles, que tu aurais dû nous donner dès le départ. Sans ça, difficile d'aller bien loin.

    A la page 14 on trouve les adresses des différents ports.
    Donc par exemple, si je souhaite mettre une certaine valeur dans le bit 3 du "PORT A", comment cela pourrai se traduire en C ?
    Il faut lire l'adresse concernée, la modifier avec une opération logique, et réécrire le tout à la même adresse. Si l'on en croit les spécifications, PORTA se trouve à l'adresse 5.

    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #include <stdint.h>
    #define PORTA 0x05
     
    int main (void)
    {
        uint8_t * p = (uint8_t *) PORTA;
     
        *p |= 8; /* Pour mettre le bit 3 à « 1 » */
     
        return 0;
    }

    Pour remettre le bit à zéro, c'est presque pareil, mais je te laisse chercher.

    Si ton environnement ne dispose pas de stdint.h et que uint8_t ne passe pas, remplace ce type par unsigned char. Il y a de fortes chances pour qu'il corresponde à un octet sur ton micro-contrôleur aussi.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 6
    Par défaut
    Je viens d'essayer ton code, mais sa ne marche pas
    J'ai trouver une fonction sous flowcode pour qu'il me montre ce que je lui demande en langage C et sa donne ça :

    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
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    #define MX_PIC
     
    //Définir pour microcontrôleur
    #define P16F88
    #define MX_EE
    #define MX_EE_TYPE2
    #define MX_EE_SIZE 256
    #define MX_SPI
    #define MX_SPI_B
    #define MX_SPI_SDI 1
    #define MX_SPI_SDO 2
    #define MX_SPI_SCK 4
    #define MX_UART
    #define MX_UART_B
    #define MX_UART_TX 5
    #define MX_UART_RX 2
    #define MX_I2C
    #define MX_I2C_B
    #define MX_I2C_SDA 1
    #define MX_I2C_SCL 4
    #define MX_PWM
    #define MX_PWM_CNT 1
    #define MX_PWM_TRIS1 trisb
    #define MX_PWM_1 0
    #define MX_PWM_TRIS1a trisb
    #define MX_PWM_1a 3
     
    //Fonctions
    #define MX_CLK_SPEED 19660800
    #ifdef _BOOSTC
    #include <system.h>
    #endif
    #ifdef HI_TECH_C
    #include <pic.h>
    #endif
     
    //Données de Configuration
     
    //Fonctions internes
    #include "C:\Program Files\Matrix Multimedia\Flowcode V4\FCD\internals.h"
     
    //Déclarations de fonction Macro
     
     
    //Déclarations de Variable
     
     
     
    //Implémentations Macro
     
    void main()
    {
     
    	//Initialisation
    	ansel = 0;
    	cmcon = 0x07;
     
     
    	//Code d'initialisation d'Interruption
    	option_reg = 0xC0;
     
     
    	//Sortie
    	//Sortie: 1 -> A2
    	trisa = trisa & 0xfb;
    	if (1)
    		porta = (porta & 0xfb) | 0x04;
    	else
    		porta = porta & 0xfb;
     
     
    	mainendloop: goto mainendloop;
    }
     
    void MX_INTERRUPT_MACRO(void)
    {
    }

    J'ai donc essayer de reprendre la partie du code qui mettait le bit 2 du PORT A à 1, donc sa me donne ceci :

    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
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    #define MX_PIC
     
    //Définir pour microcontrôleur
    #define P16F88
    #define MX_EE
    #define MX_EE_TYPE2
    #define MX_EE_SIZE 256
    #define MX_SPI
    #define MX_SPI_B
    #define MX_SPI_SDI 1
    #define MX_SPI_SDO 2
    #define MX_SPI_SCK 4
    #define MX_UART
    #define MX_UART_B
    #define MX_UART_TX 5
    #define MX_UART_RX 2
    #define MX_I2C
    #define MX_I2C_B
    #define MX_I2C_SDA 1
    #define MX_I2C_SCL 4
    #define MX_PWM
    #define MX_PWM_CNT 1
    #define MX_PWM_TRIS1 trisb
    #define MX_PWM_1 0
    #define MX_PWM_TRIS1a trisb
    #define MX_PWM_1a 3
     
    //Fonctions
    #define MX_CLK_SPEED 19660800
    #ifdef _BOOSTC
    #include <system.h>
    #endif
    #ifdef HI_TECH_C
    #include <pic.h>
    #endif
     
    //Données de Configuration
     
    //Fonctions internes
    #include "C:\Program Files\Matrix Multimedia\Flowcode V4\FCD\internals.h"
     
    //Déclarations de fonction Macro
     
     
    //Déclarations de Variable
     
     
     
    //Implémentations Macro
     
    void main()
    {
     
    	//Initialisation
    	ansel = 0;
    	cmcon = 0x07;
     
     
    	//Code d'initialisation d'Interruption
    	option_reg = 0xC0;
     
     
    	//Code C
    	//Code C:
    	/*Entrer le code C après ces commentaires
    	Par ailleurs, pour entrer du code assembleur,
    	utiliser l'opérateur asm devant chaque instruction, par exemple
    	asm movlw 5
    	ou imbriquer plusieurs instructions dans un bloc asm comme ci-dessous :
    	asm
    	{
    		movlw 8
    		movlw4
    	}
    	*/
     
     
    	trisa = trisa & 0xfb;
    		if (1)
    			porta = (porta & 0xfb) | 0x04;
    		else
    			porta = porta & 0xfb;
     
     
     
     
     
    	mainendloop: goto mainendloop;
    }
     
    void MX_INTERRUPT_MACRO(void)
    {
    }



    Donc c'est sensé faire la même chose, non ?
    Cependant lorsque j'assigne le bit 2 du PORT A à une LED (sous flowcode) elle ne s'allume pas lorsque je met le code en langage C ....
    Etrange ....

  6. #6
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 486
    Par défaut
    (Indice : le ç se trouve sur la touche 9).

    Ça veut dire quoi "ça ne marche pas" ?

    Les ports A et B fonctionnent en mode bi-directionnel. Il faut d'abord configurer en sortie le bit en question. Est-ce que cette étape est menée à bien auparavant, que ce soit par Flowcode ou par ton programme en C ?

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 6
    Par défaut
    Hé bien sous Flowcode j'ai insérer une LED qui s'allume selon la valeur du bit concerné.
    Donc si je le fait avec des "block" output : 1 -> PORT A bit 5
    La Led va s'allumée.

    Tandis que lorsque je le fait avec le "block" pour intégrer du C, la Led ne s'allume pas.

    Sinon je n'ai pas compris ceci :
    "Il faut d'abord configurer en sortie le bit en question"

  8. #8
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 486
    Par défaut
    Citation Envoyé par geogeo46 Voir le message
    Hé bien sous Flowcode j'ai insérer une LED qui s'allume selon la valeur du bit concerné.
    Donc si je le fait avec des "block" output : 1 -> PORT A bit 5
    La Led va s'allumée.
    Autrement dit, tu ne pilotes pas vraiment un 16F84, mais tu l'émules sous Flowcode.

    Tant que tu nous diras pas en détails ce que tu fais et dans quel environnement tu travailles, on ne pourra pas t'aider.

    Tandis que lorsque je le fait avec le "block" pour intégrer du C, la Led ne s'allume pas.
    À priori, c'est normal, puisque ton circuit n'existe pas vraiment. Il faut communiquer avec le module installé pour lui faire comprendre que tu veux changer son état. Ce n'est pas la doc du PIC qu'il fallait consulter, mais celle de Flowcode.

    Sinon je n'ai pas compris ceci : "Il faut d'abord configurer en sortie le bit en question"
    Les broches d'entrées-sorties du PIC peuvent servir aussi bien à lire une donnée en entrée qu'à écrire une donnée en sortie. Mais pas en même temps. Pour cela, il faut utiliser un autre registre, un peu plus loin, pour indiquer dans quel sens on veut faire fonctionner chaque bit.

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 6
    Par défaut
    Je vais détailler le tout au complet ^^ :
    Je suis élève en S:SI
    Je travail en cours sous Flowcode pour programmer des PIC (16F84).
    On crée notre programme sous Flowcode, on simule des LED avec Flowcode qu'on relie avec les différents bits utilisé pour voir si notre programme fonction.
    Une fois que notre programme fonctionne correctement, on l'envoie sur le PIC et on vois ce que notre programme fait réélement.
    Ce que je voudrai faire, au lieu de programmer avec des "blocks" de Flowcode, je voudrai insérer juste le block pour introduire du C et écrire tout le programme en C.

    J'espère que se sera plus clair comme cela ^^

    Je vais essayer de trouver la doc de Flowcode ....

  10. #10
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 486
    Par défaut
    Citation Envoyé par geogeo46 Voir le message
    Ce que je voudrai faire, au lieu de programmer avec des "blocks" de Flowcode, je voudrai insérer juste le block pour introduire du C et écrire tout le programme en C. Je vais essayer de trouver la doc de Flowcode ....
    Méa maxima culpa, j'ai fait une faute dans mon code ! Ce n'est pas « |= 1 » qu'il fallait mettre mais « |= 8 ». J'étais fatigué. Essaie de voir si ça marche, mais il est possible que non.

    En fait, après avoir jeté un œil au code que tu avais posté, il apparaît que Flowcode utilise des variables ordinaires pour maintenir l'état de ses registres et que c'est par elles qu'il faut communiquer. Ce n'est pas terrible parce qu'un code C authentique hors environnement spécial tel que Flowcode utiliserait des pointeurs.

    Donc, il faut que tu remettes les entêtes en vert et que tu fasses des opérations sur la bonne variable, « porta » en l'occurrence. Remarque aussi que le code que tu as extrait change auparavant (et une fois pour toutes) l'état de « trisa », qui est le registre indiquant dans quel sens un bit du port A doit fonctionner.

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 6
    Par défaut
    J'ai l'impression que Flowcode ne lis pas le block C
    On dirai qu'il le passe, comme s'il n'y avait pas de block :
    j'ai essayer de mettre un simple "delay_s(10);" à l'intérieur, pour voir s'il le faisai, et je n'ai pas eu de délai de 10 secondes ....

Discussions similaires

  1. introduire du c dans du C++
    Par panda_fonfon dans le forum MFC
    Réponses: 7
    Dernier message: 26/04/2006, 23h08
  2. Introduire une image dans la base de données
    Par ghassenus dans le forum Bases de données
    Réponses: 4
    Dernier message: 04/04/2006, 10h09
  3. Introduire une variable dans une propriété
    Par priest69 dans le forum Access
    Réponses: 7
    Dernier message: 21/10/2005, 17h31
  4. Introduire du text dans une div
    Par 10-nice dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 01/09/2005, 11h50
  5. Introduire une condition dans une requete
    Par DeezerD dans le forum Langage SQL
    Réponses: 9
    Dernier message: 12/10/2004, 18h13

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