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 :

[débutant][circuit integré]multiple problemes


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 46
    Par défaut [débutant][circuit integré]multiple problemes
    Bonjour a tous,
    Après un passage par le forum C# (ou je vais sûrement retourner) j’ai maintenant un problème avec le C…
    J'ai un TPE a faire je vous passe les détails (a moins que ça vous intéresse mais j'en doute) mais en gros je dois contrôler un moteur via le port série de mon ordinateur et l'arrêter quand il arrive a un certain capteur infrarouge.
    J'ai trouvé de la documentation sur le sujet mais je suis complètement perdu entre les USR, UDR, UCR, BAUD, USART, UART et j'en passe j’ai essayé de coder tout cela mais je n’y arrive pas du tout. J’ai des erreurs à la compilation.
    Voici 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
    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
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
     //port série
     
     
     
    /* Bibliothèque utilisée */
     
    #include <avr/io.h>
    #include <avr/interrupt.h>
    #include <C:/winavr/examples/stdiodemo/uart.c>
    /* Définition des variables d'entrées */
     
    #define Aucun_Capteur					(0x00)
    #define Capteur_Fin_Course_Contact_1	(0x01)
    #define Capteur_Fin_Course_Conact_6		(0x02)
    #define Capteur_Ir_2					(0x04)
    #define Capteur_Ir_3					(0x08)
    #define Capteur_Ir_4					(0x10)
    #define Capteur_Ir_5					(0x20)
    #define BAUD 9600 // vitesse du port série --> 9600bit/s
    #define UCR 							(0x18)
    #define UBRR 25
    #define USR								(0x80)
    /* Définitions des variables de sorties */
     
    #define Aucun_Moteur					(0x00)
    #define Marche_Arret_Moteur				(0x01)
    #define Sens_Rotation_Moteur			(0x02)
    #define Marche_Et_Sens					(0x04)
     
    /* Fonction d'initialisation des périphériques   */  
    unsigned char COMMANDE_PC; //variable contenant la valeur du port série
     
    void Init_Periph(void)
    {
    	PORTA= 0x00; 	
    	DDRA= 0xFF;
    	PORTB= 0xFF;
    	DDRC= 0x00;
     
    }
     
    /* ************************************************* */
    /*                Programme Commande PC              */
    /* ************************************************* */
       void recoit_commande_pc(void)
       {
         if((USR & 0x80) == 0x80)         //Si une donnée vient d'arriver...
         {
          COMMANDE_PC = UDR;      //Sauvegarde donnée reçue
          USR = 0x80;                           //RAZ bit RXC
         }
         else
         {
          COMMANDE_PC = 0x00;       //Si pas de donnée reçue "00" servira signaler au programme principal que il n'y a rien à faire.
         }
       }	
     
    /* ************************************************* */
    /*                Programme A		                 */
    /* ************************************************* */
    void programme_A(void)
    {
    	if((Capteur_Fin_Course_Contact_1 & 0x01)== 0x01)
    	{
    	PORTB = Marche_Arret_Moteur;			/*mise en marche moteur*/
    	}
     
    	if((Capteur_Ir_2 & 0x04) == 0x04)
    	{
    	PORTB = Aucun_Moteur;
    	}
    }
     
     
    /* ************************************************* */
    /*                Programme B		                 */
    /* ************************************************* */
    void programme_B(void)
    {
    	if((Capteur_Fin_Course_Contact_1 & 0x01)== 0x01)
    	{
    	PORTB = Marche_Arret_Moteur;			/*mise en marche moteur*/
    	}
     
    	if((Capteur_Ir_3 & 0x08) == 0x08)
    	{
    	PORTB = Aucun_Moteur;
    	}
     
    }
     
    /* ************************************************* */
    /*                Programme C		                 */
    /* ************************************************* */
    void programme_C(void)
    {
    	if((Capteur_Fin_Course_Contact_1 & 0x01)== 0x01)
    	{
    	PORTB = Marche_Arret_Moteur;			/*mise en marche moteur*/
    	}
     
    	if((Capteur_Ir_4 & 0x10) == 0x10)
    	{
    	PORTB = Aucun_Moteur;
    	}
     
    }
     
    /* ************************************************* */
    /*                Programme D		                 */
    /* ************************************************* */
    void programme_D(void)
    {
    	if((Capteur_Fin_Course_Contact_1 & 0x01)== 0x01)
    	{
    	PORTB = Marche_Arret_Moteur;			/*mise en marche moteur*/
    	}
     
    	if((Capteur_Ir_5 & 0x20) == 0x20)
    	{
    	PORTB = Aucun_Moteur;
    	}
     
    }
    /* ************************************************* */
    /*                Programme principale               */
    /* ************************************************* */
     
    void main(void)
    {
    Init_Periph();
    char a=2;
    	while(1)
    	{
    		recoit_commande_PC();
    		if(COMMANDE_PC == 0x30)/*mémoire tampon rs232*/
    		{
    		programme_A();
    		}
     
    		if(a == 2) /*mémoire tampon rs232*/
    		{
    		programme_B();
    		}
    		if(a == 3)/*mémoire tampon rs232*/
    		{
    		programme_C();
    		}
    		if(a == 4)/*mémoire tampon rs232*/
    		{
    		programme_D();
    		}
     
    	}		/*fin du while(1) */
     
    }			/* fin du main*/
    En gros j’aimerais bien que vous m’expliquer ou je fais des erreurs parce que la je bute complètement cela fait bientôt 3 heures de suite que je travaille sur ce programme et je n’y arrive pas du tout…
    Si cela peut vous aider le µC est un AT90S85355 et la carte une STK-200.

  2. #2
    Membre éprouvé Avatar de BainE
    Inscrit en
    Mai 2004
    Messages
    1 327
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 1 327
    Par défaut
    Bonjour,

    peux tu nous montrer la sortie complete des erreurs du compilo.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 46
    Par défaut
    Bien entendu merci de vous intéresser a mon problème
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    rm -rf tpe.o  tpe.elf dep/* tpe.hex tpe.eep
    Build succeeded with 0 Warnings...
    avr-gcc.exe  -mmcu=atmega8535 -Wall -gdwarf-2 -O0 -MD -MP -MT tpe.o -MF dep/tpe.o.d  -c  ../tpe.c
    ../tpe.c: In function `recoit_commande_pc':
    ../tpe.c:50: error: invalid lvalue in assignment
    ../tpe.c: At top level:
    ../tpe.c:130: warning: return type of 'main' is not `int'
    ../tpe.c: In function `main':
    ../tpe.c:135: warning: implicit declaration of function `recoit_commande_PC'
    make: *** [tpe.o] Error 1
    Build failed with 1 errors and 2 warnings...

  4. #4
    Membre éprouvé Avatar de BainE
    Inscrit en
    Mai 2004
    Messages
    1 327
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 1 327
    Par défaut
    alors la ligne 50 c'est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    USR = 0x80;                           //RAZ bit RXC
    Or, USR est un define, ce qui veut dire qu on ne peut pas lui assigner de valeur.
    Pour rappel un define c'est un bout de phrase remplacer par un autre par le pré-compilateur avant la compilation en elle meme, en aucun cas une declaration de variable. Du coup va falloir revoir un peu ta conception.

    voila, bon courage.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 46
    Par défaut
    euh désolé mais je ne comprends pas ta réponse....mais connaissance en C sont encore plus basse quand C# (et elles était pas bien hautes....)
    en gros faut que je remplace le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    USR = 0x80;                           //RAZ bit RXC
    par autre chose ou alors que je remplace le define?

  6. #6
    Membre éprouvé Avatar de BainE
    Inscrit en
    Mai 2004
    Messages
    1 327
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 1 327
    Par défaut
    oui c est ca.

    un define c'est juste un remplacement de texte.
    Avant la compilation, le pré-compilo va remplacer toutes les occurences de "USR" par l autre membre du define, ici "(0x80)".

    Donc la, le compilo essaye de faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    (0x80) = 0x80;                           //RAZ bit RXC
    Or on ne peut pas affecter un valeur a une valeur.
    Tu peux remplacer
    #define USR (0x80)
    par
    unsigned char USR = (0x80);

    ca le fera mieux (idem pour tout ce que utilise en tant que variable.

    Pour voir ce que fait le prprocesseur tu peux recompiler ton code avec l option -p :
    avr-gcc.exe -mmcu=atmega8535 -p -Wall -gdwarf-2 -O0 -MD -MP -MT tpe.o -MF dep/tpe.o.d -c ../tpe.c

    Ca te genere le fichier avec passage du préprocesseur, avant la "vrai" compilation, mais ca c'est juste de la curiosité et ca pourra peut etre t aider a comprendre ce que je dit.

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

Discussions similaires

  1. [Débutant] Require et multiples répertoires
    Par Rakken dans le forum Langage
    Réponses: 3
    Dernier message: 17/03/2009, 17h21
  2. Comment faire une integration multiple
    Par kchiheb dans le forum MATLAB
    Réponses: 4
    Dernier message: 17/10/2008, 22h11
  3. [Débutant][XSLT] Tri "multiple"
    Par hobotalker dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 07/09/2007, 16h32
  4. MFC Multiple problemes
    Par wilfried_42 dans le forum Excel
    Réponses: 1
    Dernier message: 06/06/2007, 20h56
  5. [Débutante][Struts] Actions multiples
    Par BiM dans le forum Struts 1
    Réponses: 6
    Dernier message: 30/09/2005, 10h22

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