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])
-----
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])
Bonjour,
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.Apparament sa concerne mon #define mais je ne suis pas sur
au début de ton programme il y a :
Code:#define PORT_BASCULE_V_VITESSE RB7; #define PORT_BASCULE_E_VITESSE RB5;ce qui donne :Code:PORT_BASCULE_V_VITESSE = 0; PORT_BASCULE_E_VITESSE = 1;
Tu vois l'erreur ?Code:RB7; = 0; RB5; = 0;
Tout dépend de comment tu lui dis de stocker les 48 bits. C'est à quelle ligne ?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 ? )
oui je voit l'erreur ( les ; )
j'ai modifier et la j'ai 3 erreur qui apparaisse :
Ce qui correspond ( dans l'ordre a )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
RC1 =1;t_eau =ADRESH:ADRESL ;essence=ADRESH:ADRESL;je doit changer les expression mais par quoi ?t_huile=ADRESH:ADRESL;
Voici le code ici
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;
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
Utilise un type signé alors : signed short ou simplement short (équivalent à int)
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)
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
Merci j'avait oublier de prendre sa sur le site ou je l'avait trouver !
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 )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! **************
Je vais essayer de le simuler avec mon montage
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é
je ne comprend pas pourquoi sa ne fonctionne pas
j'ai reverifier mon code sa devrait marché :s
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
Le programme ne fonctionne pas est je n'arrive pas a trouver les erreurCode:#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 }
Pensez vous que j'ai meilleur temps de tous recommencer mon programme ?
merci
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
Bonjour
Personne n'a d'information sur le mode CCP
Merci
Bonjour
Le mode CCP n'inspire personne ? ^^
Merci
Bonjour
Le mode ccp est-il un mystere pour l'homme ?
Merci