Bonjour,
J'ai un projet qui est de rendre un chariot de golf automatique, c'est a dire que il suis le joueur sur le green.
Je rencontre un problème quand je veux rentrer des paramètres fixe dans l'EEPROM (gain moteurs, consigne, limite sup, ect), en effet soit le programme n’écrit pas dans l'EEPROM soit il ne lit pas les infos. Quoi que ce soit tout mes paramètres restent à 0 alors que ils devrais être ceux que je met dans l'EEPROM.
J'utilise comme compilateur MikroC PRO et mon Pic est un 18f4550
Voici le morceau de programme qui gère l’écriture/lecture dans l'EEPROM:
Code:Gain_Gauche=1; Gain_Droite=1; Gain_Avance=1,9; Gain_Rotation=13; consigne=35; Limite_Sup=200; Const_Avance=65; rotation_forte=30; poids=0; retard=0; memorise_float(0,Gain_Gauche); memorise_float(4,Gain_Droite); memorise_float(8,Gain_Avance); memorise_int(12,Gain_Rotation); memorise_int(14,consigne); // En dessous le robot est à l'arrêt memorise_int(16,Limite_Sup); // Au dessus le robot s'arrête memorise_int(18,Const_Avance); // quand distance=consigne, avance=Const_Avance memorise_int(20,rotation_forte); memorise_int(22,poids); memorise_int(24,retard); lecture_float(0,&Gain_Gauche); // Lecture des paramètres en mémoire EEPROM lecture_float(4,&Gain_Droite); lecture_float(8,&Gain_Avance); lecture_int(12,&Gain_Rotation); lecture_int(14,&consigne); lecture_int(16,&Limite_Sup); lecture_int(18,&Const_Avance); lecture_int(20,&rotation_forte); lecture_int(22,&poids); lecture_int(24,&retard); Limite_Inf=consigne;
et la librairie utilisée:
Code:// Librairie mémoire EEPROM void memorise_float(unsigned short adresse,float var) { eeprom_write(adresse,lo(var)); eeprom_write(adresse+1,hi(var)); eeprom_write(adresse+2,higher(var)); eeprom_write(adresse+3,highest(var)); } void lecture_float(unsigned short adresse,float *var) { unsigned short tab[4]; float *p; tab[0]=eeprom_read(adresse); tab[1]=eeprom_read(adresse+1); tab[2]=eeprom_read(adresse+2); tab[3]=eeprom_read(adresse+3); p=&tab[0]; *var=*p; } void memorise_int(unsigned short adresse,int var) { short *p; p=&var; eeprom_write(adresse,*p); p++; eeprom_write(adresse+1,*p); } void lecture_int(unsigned short adresse,int *var) { unsigned short tab[2]; int *p; tab[0]=eeprom_read(adresse); tab[1]=eeprom_read(adresse+1); p=&tab[0]; *var=*p; }
Voila, je ne sais pas pourquoi ça ne marche pas, si quelqu'un sais ou a le même problèmes =).
Si vous avez des questions ou des réponses merci de les poser.
Je vous remercie d'avance =).
-----