Programation PIC16F87X - Page 4
Répondre à la discussion
Page 4 sur 4 PremièrePremière 4
Affichage des résultats 91 à 107 sur 107

Programation PIC16F87X



  1. #91
    invitee9e0f92f

    Re : Programation PIC16F87X


    ------

    le lien du code a été décalé et je voulais dire 0x1005 pas 0x1006
    en fait je n'est plus cette erreur de pointeur ( grâce au char donnees[6])

    -----

  2. #92
    sdec25

    Re : Programation PIC16F87X

    Bonjour,
    Apparament sa concerne mon #define mais je ne suis pas sur
    Le compilateur ne fait que remplacer un define par sa valeur, donc même si apparemment il n'y a pas d'erreur de syntaxe dans ton code, après remplacement des chaînes define il peut y en avoir une.

    au début de ton programme il y a :
    Code:
    #define PORT_BASCULE_V_VITESSE  RB7;
    #define PORT_BASCULE_E_VITESSE  RB5;
    Code:
    PORT_BASCULE_V_VITESSE = 0;
    PORT_BASCULE_E_VITESSE = 1;
    ce qui donne :
    Code:
    RB7; = 0;
    RB5; = 0;
    Tu vois l'erreur ?

    Est ce que mon raisonnement de décalage est juste ? ( si je dit de stocker une valeur de 48 bit a l'adresse 0x1000 elle va s'étendre jusqu'en 0x1006 ? )
    Tout dépend de comment tu lui dis de stocker les 48 bits. C'est à quelle ligne ?

  3. #93
    invitee9e0f92f

    Re : Programation PIC16F87X

    oui je voit l'erreur ( les ; )
    j'ai modifier et la j'ai 3 erreur qui apparaisse :
    Error [712] C:\Documents and Settings\Carl\Mes documents\Visual Studio 2008\Projects\projet1\projet1\ main.c; 46. ne peut pas générer le code pour cette expression
    Error [712] C:\Documents and Settings\Carl\Mes documents\Visual Studio 2008\Projects\projet1\projet1\ main.c; 84. ne peut pas générer le code pour cette expression
    Error [712] C:\Documents and Settings\Carl\Mes documents\Visual Studio 2008\Projects\projet1\projet1\ main.c; 98. ne peut pas générer le code pour cette expression
    Error [712] C:\Documents and Settings\Carl\Mes documents\Visual Studio 2008\Projects\projet1\projet1\ main.c; 112. ne peut pas générer le code pour cette expression
    Ce qui correspond ( dans l'ordre a )
    RC1 =1;
    t_eau =ADRESH:ADRESL ;
    essence=ADRESH:ADRESL;
    t_huile=ADRESH:ADRESL;
    je doit changer les expression mais par quoi ?
    Voici le code ici

  4. #94
    sdec25

    Re : Programation PIC16F87X

    Tu es sûr pour les : ?
    Essaie déjà de modifier le type double en unsigned short.
    Ensuite essaie ça (on affecte le contenu octet par octet) :
    Code:
    t_eau = ADRESL;
    *((unsigned char*)&t_eau+1) = ADRESH;

  5. #95
    invitee9e0f92f

    Re : Programation PIC16F87X

    Cela m'eneleve l'erreur mais me rajoute celle la :
    Warning [765] C:\Documents and Settings\Carl\Mes documents\Visual Studio 2008\Projects\projet1\projet1\ main.c; 88. comparaison non signée (unsigned) dégénérée
    Warning [765] C:\Documents and Settings\Carl\Mes documents\Visual Studio 2008\Projects\projet1\projet1\ main.c; 103. comparaison non signée (unsigned) dégénérée
    Warning [765] C:\Documents and Settings\Carl\Mes documents\Visual Studio 2008\Projects\projet1\projet1\ main.c; 117. comparaison non signée (unsigned) dégénérée

  6. #96
    sdec25

    Re : Programation PIC16F87X

    Utilise un type signé alors : signed short ou simplement short (équivalent à int)

  7. #97
    invitee9e0f92f

    Re : Programation PIC16F87X

    le short ne va pas poser un problème vu que j'ai besoin de nombre a virgule ?
    sinon j'ai remplace par short est c'est bon mais j'ai toujours une erreur ( daccord c'est déjà bien par rapport au 21 du début ^^ )
    Error [500] ; 0. symbols non définis:
    _EcritureFlash(projet1.obj) _LectureFlash(projet1.obj)

  8. #98
    sdec25

    Re : Programation PIC16F87X

    Citation Envoyé par x-vodka-limee-x Voir le message
    le short ne va pas poser un problème vu que j'ai besoin de nombre a virgule ?
    Si, tu n'auras plus de nombres à virgule mais on t'a déjà dit que le PIC n'était pas fait pour ça.

    Pour les symboles, il faut le fichier objet (ou le fichier source .c) qui contient les fonctions LectureFlash et EcritureFlash

  9. #99
    invitee9e0f92f

    Re : Programation PIC16F87X

    Merci j'avait oublier de prendre sa sur le site ou je l'avait trouver !
    Memory Summary:
    Program space used 292h ( 658) of 2000h words ( 8.0%)
    Data space used 1Ch ( 28) of 170h bytes ( 7.6%)
    EEPROM space used 0h ( 0) of 100h bytes ( 0.0%)
    Configuration bits used 0h ( 0) of 1h word ( 0.0%)
    ID Location space used 0h ( 0) of 4h bytes ( 0.0%)

    Loaded C:\Documents and Settings\Carl\Mes documents\Visual Studio 2008\Projects\projet1\projet1\ projet1.cof.

    ********** Build successful! **************
    Le code BETA est ici ( je l'est mis en BETA car je n'est pas mis toutes les comparaison et les valeurs de calcule ne sont pas sur )
    Je vais essayer de le simuler avec mon montage

  10. #100
    invitee9e0f92f

    Re : Programation PIC16F87X

    Bonjour
    Est ce que la simulation avec ISIS sous MPLAB est fiable ?
    Car j'otient un état iderteminé sur une sortit qui devrait etre mis a 0 est dès que j'aplique une frequence mes DATA passe en etat indéterminé

  11. #101
    invitee9e0f92f

    Re : Programation PIC16F87X

    je ne comprend pas pourquoi sa ne fonctionne pas
    j'ai reverifier mon code sa devrait marché :s

  12. #102
    sdec25

    Re : Programation PIC16F87X

    Citation Envoyé par x-vodka-limee-x Voir le message
    je ne comprend pas pourquoi sa ne fonctionne pas
    j'ai reverifier mon code sa devrait marché :s
    Qu'est-ce qui ne fonctionne pas ? En C un programme ne fonctionne jamais la première fois. Utilises un simulateur et exécute le programme pas à pas.

  13. #103
    invitee9e0f92f

    Re : Programation PIC16F87X

    Bonjour a tous
    Je ne postait plus car le temps ma manquait
    Pour tous dire je suis presque repartit a 0
    Pour mieux comprend ma réalisation voila un Fichier PDF expliquant tous sur mon projet , il sera bientôt complété
    disponible ici
    Voici le programme actuel
    Code:
    #include <htc.h>
    #define PORT_BASCULE_D_VITESSE RB1
    #define PORT_BASCULE_D_TOUR  RB2
    #define PORT_BASCULE_D_JAUGE  RB3
    #define PORT_BASCULE_V_VITESSE  RB7
    #define PORT_BASCULE_V_TOUR  RC1
    #define PORT_BASCULE_V_JAUGE  RC4
    #define PORT_BASCULE_E_VITESSE  RB5
    #define PORT_BASCULE_E_TOUR  RB7
    #define PORT_BASCULE_E_JAUGE  RC2
    #define NOP asm("nop");
    
    
    short frequence;
    short vitesse;
    char taille;
    int a;
    int b;
    short t_eau;
    short essence;
    short t_huile;
    void EcritureFlash(int iAdresse,char cOctet); 
    char LectureFlash(int iAdresse);
    char donnees[6]; 
    
    
    void main (void)
    {
    TRISA=255;  //Configuration Port A
    TRISB=0;  // Config Port B
    TRISC=0b100000011; // configuration port C
    TRISD=255; //Configuration port D 
    PORTA=0;           // Mise a 0 Port A
    PORTB=0;           // Mise a 0 port B
    PORTC=0;          // Mise a 0 PORT C
    OPTION=0b11101000;  // Timer 0 configuration
    T1CON=0b00000111;     // Timer 1 Configuration
    T2CON=0b00000101;     // Timer 2 Configuration
    ADCON1=0b10000100;   // CAN Configuration Port et alignement 
    
    
    for (;;)
    {
    RB5 =0;
    RB7 =0;
    RC2 =0;
    RB6 =1;
    RC1 =1;
    RC4 =1;
    
    a=0;             // Mise a 0 de A
    TMR0 =0;        // Mise a 0 du timer 0
    frequence =0;   // Mise a 0 de frequence
    while (TMR0<1)  { 
    a++;
    }
    b=0;             // Mise a 0 de B
    TMR1L =0;        // Mise a 0 de Timer1
    vitesse =0;     // Mise a 0 de vitesse
    while (TMR1L<1){  // Boucle jusqu'a que TRM1 = 1 ( Detection d'un front montant )
    
    b +=1;         // Incrémentation de B
    }
    
    // Definition du coeficien diviseur en fonction de la taille des pneumatiques (valeur non réel )  
    if (RD7==1 && RD6==1 && RD5==1 && RB4==1 && RD3==1 && RD2==1 && RD1==1 && RD0==1 )
    taille = 1000;
    
    
    frequence = 1000/a; // exemple Calcule Frequence non definitif 
    vitesse = 1000/taille; // exemple Calcule Vitesse non definitif 
    
    if (frequence < 1000) // exemple Comparaison Fréquence non definitif 
     EcritureFlash(0x1000,0b000000000000000000000000000000000000000000000000); // exemple ecriture memoire valeur binnaire a envoyer
    if (frequence > 1000 && frequence < 1010) // exemple Comparaison Fréquence non definitif 
     EcritureFlash(0x1000,0b000000000000000000000000000000000000000000000001);
    
     if (vitesse < 1000) 
    EcritureFlash(0x1006,0b000000000000000000000000000000000000000000000000); // exemple ecriture memoire valeur binnaire a envoyer.
    
       ADCON0 = 0b01011001; // Fosc/8(01), Chanel : RA3 (011) , GO/DONE : No (0) , Bit non définie (0) , ADON : oui (1)   
       TMR2 = 0;     // Mise a 0 du timer 2 pour la temporisation 
       while (TMR2!=6); // Temporisation permetant au convertisseur de chager la valeur analogique 
       GODONE = 1; // Go/DONE = 1 Début conversion 
       while(GODONE!=0) ; // Temporisation pour laisser le temps au micro de convertir  
        t_eau = ADRESL;
       *((unsigned char*)&t_eau+1) = ADRESH;
     // definition de la valeur essence 
       ADIF = 0; 
       if (t_eau < 0 ) { // Exemple de comparaison 
       EcritureFlash(0x1012,0b00000000); // exemple ecriture memoire valeur binnaire a envoyer
       }
       if ( t_eau > 0b0000000000100000 && essence < 0b0000000000100000 ){// Exemple de comparaison 
       EcritureFlash(0x1012,0b00000001);// exemple ecriture memoire valeur binnaire a envoyer
       }
    
       ADCON0 = 0b01100001; // Fosc/8(01), Chanel : RA1 (100) , GO/DONE : No (0) , Bit non définie (0) , ADON : oui (1)   
       TMR2 = 0;     // Mise a 0 du timer 2 pour la temporisation 
       while (TMR2!=6) ;// Temporisation permetant au convertisseur de chager la valeur analogique        // 1us de temporisation par sécurité !
       GODONE = 1; // Go/DONE = 1 Début conversion 
       while(GODONE!=0) ; // Temporisation pour laisser le temps au micro de convertir 
        essence = ADRESL;
       *((unsigned char*)&essence+1) = ADRESH; // definition de la valeur essence 
       ADIF = 0; 
        
       if (essence < 0 ){ // Exemple de comparaison 
       EcritureFlash(0x1013,0b00000000); // exemple ecriture memoire valeur binnaire a envoyer
       }
       if ( essence > 0b0000000000100000 && essence <  0b0000000000100000 ){// Exemple de comparaison 
       EcritureFlash(0x1013,0b00000001);// exemple ecriture memoire valeur binnaire a envoyer
       }
       ADCON0 = 0b01001001; // Fosc/8(01), Chanel : RA3 (011) , GO/DONE : No (0) , Bit non définie (0) , ADON : oui (1)   
       TMR2 = 0;     // Mise a 0 du timer 2 pour la temporisation 
       while (TMR2!=6) // Temporisation permetant au convertisseur de chager la valeur analogique 
       GODONE = 1; // Go/DONE = 1 Début conversion 
       while(GODONE!=0) ; // Temporisation pour laisser le temps au micro de convertir 
       t_huile=ADRESL;
       *((unsigned char*)&t_huile+1) = ADRESH; // definition de la valeur essence 
       ADIF = 0;
        
       if (t_huile < 0 ){ // Exemple de comparaison 
       EcritureFlash(0x1014,0b00000000); // exemple ecriture memoire valeur binnaire a envoyer
       }
       if ( t_huile > 0b0000000000100000 && essence < 0b0000000000100000 ){// Exemple de comparaison 
       EcritureFlash(0x1014,0b00000001);// exemple ecriture memoire valeur binnaire a envoyer
       }
       // Envoit donné vitesse au registre 
    
    
    donnees[0] = LectureFlash(0x1005); // donne 0 = adresse memoire
    donnees[1] = LectureFlash(0x1004);
    donnees[2] = LectureFlash(0x1003);
    donnees[3] = LectureFlash(0x1002);
    donnees[4] = LectureFlash(0x1001);
    donnees[5] = LectureFlash(0x1000);
    a = 0;
    PORT_BASCULE_V_VITESSE = 0;
    PORT_BASCULE_E_VITESSE = 1;    
    for(a=0; a<6; ++a) { 
    PORT_BASCULE_D_VITESSE = donnees[a]; // envoit des donné 0 a 5
    }
    PORT_BASCULE_E_VITESSE = 0;
    PORT_BASCULE_V_VITESSE = 1;
    
    // envoit des donné compte tour
    donnees[0] = LectureFlash(0x1011); // donne 0 = adresse memoire
    donnees[1] = LectureFlash(0x1010);
    donnees[2] = LectureFlash(0x1009);
    donnees[3] = LectureFlash(0x1008);
    donnees[4] = LectureFlash(0x1007);
    donnees[5] = LectureFlash(0x1006);
    a = 0;
    PORT_BASCULE_V_TOUR = 0;
    PORT_BASCULE_E_TOUR = 1; 
    for(a=0; a<6; ++a) { 
    PORT_BASCULE_D_TOUR = donnees[a]; // envoit des donné 0 a 5
    }
    PORT_BASCULE_E_JAUGE = 0;
    PORT_BASCULE_V_JAUGE = 1;
    
    // envoit des donné jauge
    donnees[0] = LectureFlash(0x1014);// donne 0 = adresse memoire
    donnees[1] = LectureFlash(0x1013);
    donnees[2] = LectureFlash(0x1012);
    a = 0;
    PORT_BASCULE_V_TOUR = 0;
    PORT_BASCULE_E_TOUR = 1;  
    for(a=0; a<3; ++a) { 
    PORT_BASCULE_D_JAUGE = donnees[a]; // envoit des donné 0 a 5
    }
    PORT_BASCULE_E_JAUGE = 0;
    PORT_BASCULE_V_JAUGE = 1;
    
    }
    }
     void EcritureFlash(int iAdresse,char cOctet)
    	{
    	EEADRH=((iAdresse)>>8);	// Extraction des 8 bits de poids fort de iAdresse et les placent dans EEADRH
    	EEADR=((iAdresse)&0xff);	// Extraction des 8 bits de poids faible de iAdresse et les placent dans EEADR
    	EEDATA=((cOctet)&0xff);	// place la valeur à écrire dans le registre interne EEDATA
    	EEPGD=1;                         	
    	WREN=1;				
    	GIE=0;			// dévalide les interruptions
    	EECON2=0x55;		// ces 2 valeurs doivent être écrites dans EECON2 pour
    	EECON2=0xAA;		// valider l'écriture dans la mémoire flash
    	WR=1;			
    	NOP;
    	NOP;	                                 
    	GIE=1;			// restitution du contexte d'interruptions
    	WREN=0;			
    	}
    
     char LectureFlash(int iAdresse)
    	{
    	EEADR=((iAdresse)&0xff);	// Extraction des 8 bits faible de iAdresse et les placent dans EEADR
    	EEADRH=((iAdresse)>>8);	// Extraction des 8 bits fort de iAdresse et les placent dans EEADRH	                
    	WREN=0;
    	EEPGD=1;                		
    	RD=1;			
    	NOP;		
    	NOP;	
    	return EEDATA;		// renvoie la valeur contenue dans EEDATA, pointée par adresse
    	}
    Le programme ne fonctionne pas est je n'arrive pas a trouver les erreur
    Pensez vous que j'ai meilleur temps de tous recommencer mon programme ?
    merci

  14. #104
    invitee9e0f92f

    Re : Programation PIC16F87X

    Bonsoir
    Je pense recommencer le programme a 0 pour faire un programme plus stable avec un cahier des charges bien défini !
    Pour éviter les erreurs d'acquisition je pense accès mon choix sur le mode CCP ( Compare ) Du pic16F877 mais je voudrai une confirmation :
    Je doit paramétré mon Timer 1 pour qu'il agisse comme un compteur a chaque front d'horloge , est dès que le CCP a détecter tout une période il charge la valeur obtenu dans ces registres CCPRxH:CCPRxL et remet le timer1 a 0 .
    Est ce bien sa ?
    Doit-je effectuer une commande particulière or mis le paramétrage des registres et la lecture des registres CCPRxH:CCPRxL ? Une commande pour démarrer la détection de front ?
    Car je vais utiliser les 2 CCP si aucune commande n'est a effectuer les 2 CCP s'exécute chacun leur tour ?
    Merci

  15. #105
    invitee9e0f92f

    Re : Programation PIC16F87X

    Bonjour
    Personne n'a d'information sur le mode CCP
    Merci

  16. #106
    invitee9e0f92f

    Re : Programation PIC16F87X

    Bonjour
    Le mode CCP n'inspire personne ? ^^
    Merci

  17. #107
    invitee9e0f92f

    Re : Programation PIC16F87X

    Bonjour
    Le mode ccp est-il un mystere pour l'homme ?
    Merci

Page 4 sur 4 PremièrePremière 4

Discussions similaires

  1. programation aquaflow
    Par inviteee745aac dans le forum Électronique
    Réponses: 2
    Dernier message: 08/06/2010, 14h15
  2. programation java
    Par invite200dac76 dans le forum Logiciel - Software - Open Source
    Réponses: 14
    Dernier message: 10/10/2007, 16h46
  3. programation
    Par invite1687c371 dans le forum Électronique
    Réponses: 2
    Dernier message: 10/09/2007, 20h03
  4. programation orientée
    Par invite7eca6007 dans le forum Logiciel - Software - Open Source
    Réponses: 2
    Dernier message: 31/08/2007, 12h59
  5. Alim programmable avec AD5231 et PIC16F87X
    Par invite9d069ed7 dans le forum Électronique
    Réponses: 8
    Dernier message: 29/08/2006, 11h08
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...