Inclinomètre - Boussole - Thermomètre digital

Bidouilles & bricolages qui facilitent la vie...

Modérateurs : LØLØ, The Pater

Règles du forum
En naviguant sur le site http://www.landroverfaq.com vous reconnaissez avoir lu ses Conditions d’Utilisation, vous déclarez les comprendre et vous acceptez d’y être lié de manière inconditionnelle. Si tel n'est pas le cas, merci de quitter immédiatement ce site.

Vous pouvez joindre autant d'images que nécessaire à vos messages A LA CONDITION EXPRESSE d'utiliser l'hébergement fourni par le site.

L'administrateur effacera systématiquement tout message contenant des photos hébergées chez Imageschack, Casimage, Wistiti ou tout autre hébergeur tiers sans sommation ni justification.
Répondre
Avatar du membre
bisnouk
Habitué
Messages : 2142
Enregistré le : 21/11/2005 14:53
Localisation : Avignon

Inclinomètre - Boussole - Thermomètre digital

Message non lu par bisnouk »

Ayant déjà réalisé une boussole pour ma 4L, j'ai eu envie de rajouter l'appareillage utile en TT (quoi que vu mon niveau en TT, mon trouillomètre est bien plus sensible !), c'est à dire un inclinomètre.

Pour batir ce montage, je suis parti d'un afficheur graphique 128 x 64 à adressage parallèle http://action2003.free.fr/gif/tab/128x64.jpg,
d'un micro-controleur PIC 18LF2620 (16 bits - 64 Ko EEPROM).
Pour les dispositifs d'entrée-sortie, j'ai mis en oeuvre un module compas électronique CMPS03 http://action2003.free.fr/gif/tab/Module1.jpg,
un module accéléromètre 2 axes (MEMSIC 2125 de chez Parallax http://action2003.free.fr/gif/tab/SICMemsicTut.pdf
et deux sondes de température DS1731 de chez Dallas (pas le film :D )http://action2003.free.fr/gif/tab/DS1631-DS1731.pdf

L'avantage de ces interfaces vient de leurs protocoles de communication qui sont en I2C (une sorte de comminication série normalisé) [sauf l'accéléromètre qui est en PWR]... Voici donc le premier DEF avec un faisceau électrique multiplexé :lol:

Le schema de principe est http://action2003.free.fr/gif/tab/Calimeter.BMP
Le typon (en résumé !) : http://action2003.free.fr/gif/tab/calimeter_typon.jpg

Attention, ce schema comporte surement quelques erreurs car il s'agit du premier dessiné et mon prototype a un peu évolué après le premier branchement.

Le connecteur S9 sert pour raccorder le module boussole
Le connecteur S3 le module memsic
Le connecteur H10 pour programmer la mémoire du processeur
le connecteur H6 pour l'alimentation et le raccordement des sondes de température
RV1 règle le contraste de l'afficheur
Le bouton poussoir permet de rentrer dans le menu d'étalonnage.

Si la partie électronique ne présente pas de surprise ni de grande difficultés. Le programme est beaucoup plus élaboré surtout au niveau du calcul du cap pour obtenir une moyenne juste.
Afficher un cap qui bouge 10 fois pas seconde est facile mais calculer la moyenne d'une valeur qui peut passer de 359° à 0 ° ou de 1 ° à 358 ° sur le simple fait de la diversité des mesures est plus difficile qu'il n'y parrait... là il n'est pas question de faire une simple addition/division :roll:

S'il y a des interressés, j'étofferai ce post en vérifiant les schémas, précisant les valeurs des composants et en diffusant non pas le source (en C++) du programme (du moins pas dans son intégralité) mais le fichier compilé.

Voila pour une première présentation du Calimeter :P
Modifié en dernier par bisnouk le 23/01/2007 9:53, modifié 3 fois.
Avatar du membre
phy
Habitué
Messages : 454
Enregistré le : 09/10/2004 11:35
Localisation : LE FOLGOET 29260

Message non lu par phy »

Suis très curieux de voir la suite :wink:
apprenti mécano.
Avatar du membre
Klug
BOFH
Messages : 1757
Enregistré le : 06/05/2004 12:57
Localisation : Beaucaire
Contact :

Message non lu par Klug »

Moi je veux bien monter un Trac pour la gestion de la doc (wiki), des bugs, du source et des interventions diverses.

Par contre, l'éternelle question : pourquoi ne pas distribuer le source ?
Avatar du membre
bisnouk
Habitué
Messages : 2142
Enregistré le : 21/11/2005 14:53
Localisation : Avignon

Message non lu par bisnouk »

Klug a écrit : Par contre, l'éternelle question : pourquoi ne pas distribuer le source ?
Pour 3 raisons :

- Celui qui n'y connait pas grand chose et qui prend le montage tel quel, le fichier HEX lui suffit pour programmer le µP,

- Celui qui connait peut utiliser les sources partielles et se faire plaisir à comprendre comment ça marche et personnaliser son programme. Dans ce cas, il est d'ailleur évident que plus la discussion sera interéssée et plus je diffuserai le programme source,

- J'ai eu par le passé la désagréable surprise de voir une tentative utilisation commerciale d'un développement perso que j'avais trop librement mis en ligne.

En fait, je suis contre le gars qui bêtement copie une source, ne cherche pas à comprendre et se l'approprie. Par contre, le gars qui comme moi, adore se creuser la tête et qui fait l'effort de chercher un peu.... là je suis pour partager les sources. Je n'ai aucune prétention d'avoir inventé quelque chose, mais j'ai passé beaucoup d'heures pour mettre au point notamment les routines graphiques pour gérer les écrans de GSM et j'aimerai les partager avec de vrais amateurs :wink:

La question maintenant, il a t'il sur cette FAQ des amateurs de développement à base de µP ou seulement des bricoleurs qui souhaitent réaliser un montage en suivant des plans :?:
Avatar du membre
bisnouk
Habitué
Messages : 2142
Enregistré le : 21/11/2005 14:53
Localisation : Avignon

Message non lu par bisnouk »

Pour commencer,

Avant d'envisager la programmation du module, il faut pouvoir interfacer l'afficheur. Le modèle retenu est très classique (vendu chez tout bon revendeur à des prix aussi très divers (de 28 à 65 € !!). Les controleurs doivent être de type KS0108

L'adressage du module est en mode parallèle, il demande donc 14 fils de données et signaux.

Comme, il s'agit de module classique, de nombreuses libraries existent, j'ai donc optimisé et simplifié une librairie existante sous le logiciel qui me permet de développer les programmes en C++ (PCWH).
Toutes les procédures inutiles ont été supprimées mais surtout pour accélérer l'affichage, j'utilise la méthode suivante.
L'image à afficher est calculée dans la mémoire vivre du PIC, et quand le traitement interne est terminé le programme transfère (grace à la procédure glcd_update()) la totalité du cette image (128 x 64 bits) soit 1 Ko vers l'afficheur.

C'est infiniment plus rapide de copier en masse la totalité de l'écran que de dire à l'ecran : sélectionne le bon côté, puis sélectionne le bon octet, puis selectionne le bon pixel, puis affiche la bonne couleur du pixel, puis recommence pour le pixel suivant.....

Pour l'affichage des images, c'est la même méthode : d'abord copie de l'image dans le tableau mémoire puis transfert vers l'écran. Une limitation du compilateur C que j'utilise m'impose de décrire une procédure pour chaque zone image d'ou la présence des procédures quasiment identiques intro, menu...

Les images sont dessinées sur un logiciels classique (taille 128 x 64 mode 1 couleur) et sauvegardées en format BMP, j'utilise ensuite un logiciel gratuit qui me transforme le BMP en un fichier data texte où ou chaque octet correspond un octet à afficher. Il suffit alors de placer ce fichier de données dans une zone donnée du programme.
Donc pour l'image d'intro ou le menu général, l'image fait 1 Ko, pour les images tels que la pentes, le dévers ou la boussole, j'utilise comme un dessin animé différentes images en fonction de la valeur.
Pour la pente par exemple, les données de l'images sont en fait la concaténation de 25 images de 132 octets [33 x 32 pixels]. Chaque goupe de 132 octets représente le dessin du profil du Def sous un angle donné.

Code source de la routine graphique que j'ai écrite

Code : Tout sélectionner

/////////////////////////////////////////////////////////////////////////
//// Routine en partie d'origine (C) Copyright 1996, 2004 Custom     ////
//// Computer Services                                               ////
//// modifiées, développées et mise au point par :                   ////
////                Thierry ABRARD-PARIZET (C) 2006                  ////
/////////////////////////////////////////////////////////////////////////



#ifndef GLCD_WIDTH
#define GLCD_WIDTH   128
#endif

#ifndef GLCD_CS1
#define GLCD_CS1     PIN_A5   // Chip Selection 1
#endif

#ifndef GLCD_CS2
#define GLCD_CS2     PIN_A4   // Chip Selection 2
#endif

#ifndef GLCD_DI
#define GLCD_DI      PIN_A1   // Data or Instruction input
#endif

#ifndef GLCD_RW
#define GLCD_RW      PIN_A2   // Read/Write
#endif

#ifndef GLCD_E
#define GLCD_E       PIN_A3   // Enable
#endif

#ifndef GLCD_RST
#define GLCD_RST     PIN_C0   // Reset
#endif

#define GLCD_LEFT    0
#define GLCD_RIGHT   1

#define GLCD_D0      PIN_B0
#define GLCD_D1      PIN_B1
#define GLCD_D2      PIN_B2
#define GLCD_D3      PIN_B3
#define GLCD_D4      PIN_B4
#define GLCD_D5      PIN_C5
#define GLCD_D6      PIN_C6
#define GLCD_D7      PIN_C7



#ifndef ON
#define ON           1
#endif

#ifndef OFF
#define OFF          0
#endif


///////////////////////////////////////////////////////////////////////////////
////                                                                       ////
////                    Fonctions                                          ////
////                                                                       ////
///////////////////////////////////////////////////////////////////////////////
////                                                                       ////
void glcd_init(int1 mode);
void glcd_pixel(int8 x, int8 y, int1 color);
void glcd_fillScreen(int1 color);
void glcd_writeByte(int1 side, BYTE data);
int1 glcd_pixel_test(int8 x, int8 y);
void glcd_update(void);
void glcd_menu(void);
void glcd_intro(void);
void glcd_pente(signed int16 tilt);
void glcd_devers(signed int16 tilt);
void glcd_boussole(signed int16 val_cap);
void glcd_inv_pixel(int8 x, int8 y);
void glcd_vid_inv(int8 x1, int8 y1, int8 x2, int8 y2);
void glcd_roll(int1 mode,dir,int8 x_d,y_d,x_f,y_f);
////                                                                       ////
///////////////////////////////////////////////////////////////////////////////

struct
{
   int8 left[512];
   int8 right[512];
} displayData;

//                                                                            //
////////////////////////////////////////////////////////////////////////////////
//                                                                            //
//        Initialisation de l'afficheur                                       //
//                                                                            //
//        Param : OFF - Eteind l'afficheur                                    //
//                ON  - Allume l'afficheur                                    //
//                                                                            //
//                                                                            //
////////////////////////////////////////////////////////////////////////////////
//                                                                            //
void glcd_init(int1 mode)
{
   output_high(GLCD_RST);
   output_low(GLCD_E);
   output_low(GLCD_CS1);
   output_low(GLCD_CS2);

   output_low(GLCD_DI);                 // Set for instruction
   glcd_writeByte(GLCD_LEFT,  0xC0);    // Specify first RAM line at the top
   glcd_writeByte(GLCD_RIGHT, 0xC0);    // of the screen
   glcd_writeByte(GLCD_LEFT,  0x40);    // Set the column address to 0
   glcd_writeByte(GLCD_RIGHT, 0x40);
   glcd_writeByte(GLCD_LEFT,  0xB8);    // Set the page address to 0
   glcd_writeByte(GLCD_RIGHT, 0xB8);

   if(mode == ON)
   {
      glcd_writeByte(GLCD_LEFT,  0x3F); // Turn the display on
      glcd_writeByte(GLCD_RIGHT, 0x3F);
   }
   else
   {
      glcd_writeByte(GLCD_LEFT,  0x3E); // Turn the display off
      glcd_writeByte(GLCD_RIGHT, 0x3E);
   }

   glcd_fillScreen(OFF);                // Clear the display

   glcd_update();
}

//                                                                            //
////////////////////////////////////////////////////////////////////////////////
//                                                                            //
//        Met à jour la RAM de l'afficheur                                    //
//        avec les données contenue dans les tableaux displayData (left&right)//
//                                                                            //
////////////////////////////////////////////////////////////////////////////////
//                                                                            //
void glcd_update(void)
{
   int8 i, j;
   int8 *p1, *p2;

   p1 = displayData.left;
   p2 = displayData.right;

   for(i = 0; i < 8; ++i)
   {
      output_low(GLCD_DI);                      // Set for instruction
      glcd_writeByte(GLCD_LEFT, 0x40);          // Set horizontal address to 0
      glcd_writeByte(GLCD_RIGHT, 0x40);
      glcd_writeByte(GLCD_LEFT, i | 0xB8);      // Set page address
      glcd_writeByte(GLCD_RIGHT, i | 0xB8);
      output_high(GLCD_DI);                     // Set for data

      for(j = 0; j < 64; ++j)
      {
         glcd_writeByte(GLCD_LEFT, *p1++);      // Turn pixels on or off
         glcd_writeByte(GLCD_RIGHT, *p2++);     // Turn pixels on or off
      }
   }
}
//                                                                            //
////////////////////////////////////////////////////////////////////////////////
//                                                                            //
//        Affiche ou non un pixel sur l'afficheur                             //
//                                                                            //
//        Param : x - absyse du pixel                                         //
//                y - ordonnée du pixel                                       //
//                color - ON ou OFF                                           //
//                                                                            //
////////////////////////////////////////////////////////////////////////////////
//                                                                            //
void glcd_pixel(int8 x, int8 y, int1 color)
{
   int8* p;
   int16 temp;

// Calcul de la position binaire du pixel dans le tableau mémoire
   temp =  y/8;
   temp *= 64;
   temp += x;
   if(x > 63)
   {
      p = displayData.right + temp - 64;
   }
   else
   {
      p = displayData.left + temp;
   }
// bascule ON ou OFF le bit correspondant au pixel
   if(color)
   {
      bit_set(*p, y%8);
   }
   else
   {
      bit_clear(*p, y%8);
   }
}
//                                                                            //
////////////////////////////////////////////////////////////////////////////////
//                                                                            //
//        renvoi la couleur d'un pixel                                        //
//                                                                            //
//        Param : x - absyse du pixel                                         //
//                y - ordonnée du pixel                                       //
//                                                                            //
//                                                                            //
////////////////////////////////////////////////////////////////////////////////
//                                                                            //
int1 glcd_pixel_test(int8 x, int8 y)
{
   int8 *p;
   int16 temp;
   int1 couleur;
   
 // Calcul de la position binaire du pixel dans le tableau mémoire
   temp =  y/8;
   temp *= 64;
   temp += x;

   if(x > 63)
   {
      p = displayData.right + temp - 64;
   }
   else
   {
      p = displayData.left + temp;
   }

   couleur = bit_test(*p, y%8);
   return (couleur);
}
//                                                                            //
////////////////////////////////////////////////////////////////////////////////
//                                                                            //
//        Rempli l'afficheur de la couleur passée en paramètre                //
//                                                                            //
//        Param : ON - tous les pixels affichés                               //
//                OFF - tous les pixles éteinds                               //
//                                                                            //
//                                                                            //
////////////////////////////////////////////////////////////////////////////////
//                                                                            //
void glcd_fillScreen(int1 color)
{
   int8  data;
   int8  *p1, *p2;
   int16 i;

   p1 = displayData.left;
   p2 = displayData.right;
   data = 0xFF * color;

   for(i=0; i<512; ++i)
   {
   	*p1++ = data;
   	*p2++ = data;
   }
}
//                                                                            //
////////////////////////////////////////////////////////////////////////////////
//                                                                            //
//        Ecrit un octet dans un des deux controleurs graphiques              //
//        de l'afficheur                                                      //
//        Param : coté de l'afficheur                                         //
//                data à écrire                                               //
//                                                                            //
////////////////////////////////////////////////////////////////////////////////
//                                                                            //
void glcd_writeByte(int1 side, BYTE data)
{
   if(side)                   // Choose which side to write to
      output_high(GLCD_CS2);
   else
      output_high(GLCD_CS1);

   output_low(GLCD_RW);       // Set for writing

   output_bit(GLCD_D0,shift_right(&data,1,0));
   output_bit(GLCD_D1,shift_right(&data,1,0));
   output_bit(GLCD_D2,shift_right(&data,1,0));
   output_bit(GLCD_D3,shift_right(&data,1,0));
   output_bit(GLCD_D4,shift_right(&data,1,0));
   output_bit(GLCD_D5,shift_right(&data,1,0));
   output_bit(GLCD_D6,shift_right(&data,1,0));
   output_bit(GLCD_D7,shift_right(&data,1,0));

   delay_cycles(1);
   output_high(GLCD_E);       // Pulse the enable pin
   delay_cycles(5);
   output_low(GLCD_E);

   output_low(GLCD_CS1);      // Reset the chip select lines
   output_low(GLCD_CS2);
}
///////////////////////////////////////////////////////////////////////////////
////                                                                       ////
////                           Transfert d'une image                       ////
////                    de 128 * 64 d'une eeprom vers le LCD               ////
////                                                                       ////
///////////////////////////////////////////////////////////////////////////////
////                                                                       ////
////    - Donnees : Tableau contenant le graphique                         ////
////                                                                       ////
///////////////////////////////////////////////////////////////////////////////

void glcd_menu(void)
{
   int8  *p1, *p2;
   int8 i,j;
   int16 index;


   p1 = displayData.left;
   p2 = displayData.right;
   index = 0;
   for(i=0; i<8; ++i)
   {
      for(j=0; j<128; ++j)
      {
   	 if (j<64)
               *p1++ = MENU1[index++];
   	 else    *p2++ = MENU1[index++];

      }
   }
}
///////////////////////////////////////////////////////////////////////////////
////                                                                       ////
////                           Transfert d'une image                       ////
////                    de 128 * 64 d'une eeprom vers le LCD               ////
////                                                                       ////
///////////////////////////////////////////////////////////////////////////////
////                                                                       ////
////    - Donnees : Tableau contenant le graphique                         ////
////                                                                       ////
///////////////////////////////////////////////////////////////////////////////

void glcd_intro(void)
{
   int8  *p1, *p2;
   int8 i,j;
   int16 index;


   p1 = displayData.left;
   p2 = displayData.right;
   index = 0;
   for(i=0; i<8; ++i)
   {
      for(j=0; j<128; ++j)
      {
   	 if (j<64)
               *p1++ = INTRO[index++];
   	 else    *p2++ = INTRO[index++];

      }
   }
}
///////////////////////////////////////////////////////////////////////////////
////                                                                       ////
////                           Transfert de l'image                        ////
////                    représentant la pente vers le LCD                  ////
////                                                                       ////
///////////////////////////////////////////////////////////////////////////////

void glcd_pente(signed int16 tilt)
{
   int8  *p;
   int8 i, j;
   int8 val_tilt,niv_tilt,val_glcd;
   int16 index;


   if (tilt < -60) tilt = -60;
   if (tilt > 60) tilt = 60;
   tilt += 60;
   val_tilt = (int8) tilt;
   niv_tilt = (int8) floor((float) val_tilt / 5);
   if (2*(val_tilt - (niv_tilt * 5)) >= 5) niv_tilt += 1;

   index = 0;

   for(i=0; i<4; ++i)
   {
      p = displayData.left + 80 + (64 * i);
      for(j=0; j<33; ++j)
      {
        val_glcd = *p;
        *p++ = val_glcd | PENTE[niv_tilt][index++];
      }
   }
}

///////////////////////////////////////////////////////////////////////////////
////                                                                       ////
////                           Transfert de l'image                        ////
////                    représentant le dévers vers le LCD                 ////
////                                                                       ////
///////////////////////////////////////////////////////////////////////////////

void glcd_devers(signed int16 tilt)
{
   int8  *p;
   int8 i, j;
   int8 val_tilt,niv_tilt,val_glcd;
   int16 index;


   if (tilt < -50) tilt = -50;
   if (tilt > 50) tilt = 50;
   tilt += 50;
   val_tilt = (int8) tilt;
   niv_tilt = (int8) floor((float) val_tilt / 5);
   if (2*(val_tilt - (niv_tilt * 5)) >= 5) niv_tilt += 1;

   index = 0;

   for(i=0; i<4; ++i)
   {
      p = displayData.right + 80 + (64 * i);
      for(j=0; j<33; ++j)
      {
        val_glcd = *p;
        *p++ = val_glcd | DEVERS[niv_tilt][index++];
      }
   }
}


///////////////////////////////////////////////////////////////////////////////
////                                                                       ////
////                           Transfert de l'image                        ////
////                    représentant la boussole vers le LCD               ////
////                                                                       ////
///////////////////////////////////////////////////////////////////////////////

void glcd_boussole(signed int16 val_cap)
{
   int8  *p;
   int8 i, j, x, y;
   int8 val_glcd;
   int16 index,temp;

   int16 calc_cap;

   x = 30;
   y = 4;
   calc_cap = (int16) floor((float) val_cap / 10);
   if (((int16) val_cap - (calc_cap * 10)) >= 5) calc_cap += 1;
   if (calc_cap == 36) calc_cap = 0;

   index = (272 * calc_cap);

   for(i=0; i<4; ++i)
   {
      temp = y + i;
      temp *= 64;
      temp += x;
      for(j=0; j<68; ++j)
      {
         p = temp + j;
         if (x + j > 63)
         {
            p += displayData.right - 64;
         }
         else
         {
            p += displayData.left;
         }

         val_glcd = *p;
         *p = val_glcd | BOUSSOLE[index++];
      }
   }
}

///////////////////////////////////////////////////////////////////////////////
////                                                                       ////
////                    Inversion d'un pixel                               ////
////                                                                       ////
///////////////////////////////////////////////////////////////////////////////
////                                                                       ////
////    - x : coordonnée horizontale du pixel                              ////
////    - y : coordonnée verticale du pixel                                ////
////                                                                       ////
///////////////////////////////////////////////////////////////////////////////

void glcd_inv_pixel(int8 x, int8 y)
{
   int8* p;
   int16 temp;
   temp =  y/8;
   temp *= 64;
   temp += x;

   if(x > 63)
   {
      p = displayData.right + temp - 64;
   }
   else
   {
      p = displayData.left + temp;
   }

   if(!bit_test(*p, y%8))
   {
      bit_set(*p, y%8);
   }
   else
   {
      bit_clear(*p, y%8);
   }
}

///////////////////////////////////////////////////////////////////////////////
////                                                                       ////
////                    Inversion d'une partie de l'écran                  ////
////                                                                       ////
///////////////////////////////////////////////////////////////////////////////
////                                                                       ////
////    - x1 : x angle supérieur gauche                                    ////
////    - y1 : y angle supérieur gauche                                    ////
////    - x2 : x angle inférieur droit                                     ////
////    - y2 : y angle inférieur droit                                     ////
////                                                                       ////
///////////////////////////////////////////////////////////////////////////////

void glcd_vid_inv(int8 x1, int8 y1, int8 x2, int8 y2)
{
   int8  i, xmin, xmax, ymin, ymax;

   if(x1 < x2)                            //  Find x min and max
   {
      xmin = x1;
      xmax = x2;
   }
   else
   {
      xmin = x2;
      xmax = x1;
   }

   if(y1 < y2)                            // Find the y min and max
   {
      ymin = y1;
      ymax = y2;
   }
   else
   {
      ymin = y2;
      ymax = y1;
   }

   for(; xmin <= xmax; ++xmin)
   {
      for(i=ymin; i<=ymax; ++i)
      {
         glcd_inv_pixel(xmin, i);
      }
   }
}

///////////////////////////////////////////////////////////////////////////////
////                                                                       ////
////                           Roll d'une portion de l'image               ////
////                                                                       ////
////                                                                       ////
///////////////////////////////////////////////////////////////////////////////
////                                                                       ////
////    - mode 0 : roll, 1 : scroll                                        ////
////    - Direction 0 : Droite, 1 : Gauche, 2 : Haut, 3 : Bas              ////
////    - x_d,y_d,x_f,y_f : coordonnées du rectangle                       ////
////                                                                       ////
///////////////////////////////////////////////////////////////////////////////
void glcd_roll(int1 mode,dir,int8 x_d,y_d,x_f,y_f)
{
   int16       dy, dx;
   int8        y,x;
   int8        *p;
   int16       temp;
   int1        sve_bit;

   dx = abs((signed int8)(x_f - x_d));
   dy = abs((signed int8)(y_f - y_d));

   if (dir == 0)        // roll à droite
   {
      for(y=0;y<=dy;++y)
      {
         sve_bit = glcd_pixel_test(x_f,y_d+y);
         for(x=dx;x>0;--x)
         {
            glcd_pixel(x_d+x,y_d+y,glcd_pixel_test(x_d+x-1,y_d+y));
         }
         if (mode) sve_bit = 0;
         glcd_pixel(x_d,y_d+y,sve_bit);
      }
   }
   if (dir == 1)     // Roll à Gauche
   {
      for(y=0;y<=dy;++y)
      {
         sve_bit = glcd_pixel_test(x_d,y_d+y);
         for(x=1;x<=dx;++x)
         {
            glcd_pixel(x_d+x-1,y_d+y,glcd_pixel_test(x_d+x,y_d+y));
         }
         if (mode) sve_bit = 0;
         glcd_pixel(x_f,y_d+y,sve_bit);
      }
   }
   if (dir == 2)     // Roll en haut
   {
      for(x=0;x<=dx;++x)
      {
         sve_bit = glcd_pixel_test(x_d+x,y_d);
         for(y=1;y<=dy;++y)
         {
            glcd_pixel(x_d+x,y_d+y-1,glcd_pixel_test(x_d+x,y_d+y));
         }
         if (mode) sve_bit = 0;
         glcd_pixel(x_d+x,y_f,sve_bit);
      }
   }
   if (dir == 3)     // Roll en bas
   {
      for(x=0;x<=dx;++x)
      {
         sve_bit = glcd_pixel_test(x_d+x,y_f);
         for(y=dy;y>0;--y)
         {
            glcd_pixel(x_d+x,y_d+y,glcd_pixel_test(x_d+x,y_d+y-1));
         }
         if (mode) sve_bit = 0;
         glcd_pixel(x_d+x,y_d,sve_bit);
      }
   }
}

Exemple de l'image pour une pente de 60°

Pente à -60° !

Code : Tout sélectionner

/////////////// -60 ///////////////////////
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC8,0xF8,0xFC,0xFC,0xFE,0xFC,0xFC,0xFC,0xFE,
	0xFE,0xF8,0xE0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x0E,0x1F,0x1F,0x1F,0x1F,0x7F,0xFF,0xFF,0xFF,0xFF,
	0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0xF0,0xC0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x0F,0x3F,
	0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xCF,0x03,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0E,
	0x1E,0x1F,0x1F,0x1F,0x3F,0x3F,0x7F,0x3F,0x0E,0x08,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,
Exemple de la donnée repésentant la pente pour les 25 valeurs (-60 à 60° tous les 5°) :

Code : Tout sélectionner


static const int8 PENTE[25][132]=
{
/////////////// -60 ///////////////////////
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC8,0xF8,0xFC,0xFC,0xFE,0xFC,0xFC,0xFC,0xFE,
	0xFE,0xF8,0xE0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x0E,0x1F,0x1F,0x1F,0x1F,0x7F,0xFF,0xFF,0xFF,0xFF,
	0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0xF0,0xC0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x0F,0x3F,
	0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xCF,0x03,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0E,
	0x1E,0x1F,0x1F,0x1F,0x3F,0x3F,0x7F,0x3F,0x0E,0x08,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,
/////////////// -55 ///////////////////////
	0x00,0x00,0x00,0x00,0x00,0x00,0xD0,0xF8,0xFC,0xFC,0xFC,0xF8,0xFC,0xFE,0xFE,0xFC,
	0xF8,0xE0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,
	0x00,0x00,0x00,0x00,0x00,0x0A,0x1E,0x1F,0x1F,0x1F,0x3F,0x7F,0xFF,0xFF,0xFF,0xFF,
	0xFF,0xFF,0xFF,0xFF,0xFE,0xFC,0xF0,0xE0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x0F,0x1F,
	0x3F,0xFF,0xFF,0xFF,0xFF,0xFF,0xEF,0xC3,0x81,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x0E,0x1F,0x1F,0x1F,0x0F,0x3F,0x1F,0x3F,0x1F,0x06,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,
/////////////// -50 ///////////////////////
	0x00,0x00,0x00,0x00,0x00,0x00,0xB0,0xF8,0xF8,0xFC,0xF8,0xF8,0xFC,0xFE,0xFE,0xFC,
	0xF8,0xE0,0xC0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,
	0x00,0x00,0x00,0x00,0x00,0x04,0x1F,0x3F,0x3F,0x1F,0x1F,0x7F,0xFF,0xFF,0xFF,0xFF,
	0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xF8,0xF0,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x07,
	0x1F,0x3F,0x7F,0xFF,0xFF,0xFF,0xFF,0xF7,0xE1,0xC0,0x80,0x00,0x00,0x00,0x00,0x00,
	0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x0F,0x1F,0x0F,0x0F,0x0F,0x1F,0x1F,0x1F,0x0F,0x03,0x00,0x00,0x00,0x00,
	0x00,
/////////////// -45 ///////////////////////
	0x00,0x00,0x00,0x00,0x00,0x60,0xF0,0xF8,0xF8,0xF0,0xF8,0xFC,0xFC,0xF8,0xF0,0xE0,
	0xC0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,
	0x00,0x00,0x00,0x00,0x00,0x3B,0x7F,0x7F,0x7F,0x3F,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,
	0xFF,0xFF,0xFF,0xFE,0xFC,0xF8,0xF0,0xE0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x07,0x0F,
	0x1F,0x3F,0x7F,0xFF,0xFF,0xFF,0xFF,0xF7,0xE0,0xC0,0x80,0x00,0x00,0x00,0x00,0x00,
	0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x06,0x0F,0x1F,0x1F,0x0F,0x0F,0x1F,0x1F,0x0F,0x03,0x00,0x00,0x00,0x00,
	0x00,
/////////////// -40 ///////////////////////
	0x00,0x00,0x00,0x00,0x00,0xC0,0xF0,0xF8,0xF0,0xF0,0xF8,0xFC,0xFC,0xF8,0xF0,0xE0,
	0xC0,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,
	0x00,0x00,0x00,0x00,0x00,0x76,0xFF,0xFF,0xFF,0x7F,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,
	0xFF,0xFF,0xFF,0xFF,0xFE,0xFC,0xF8,0xF0,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x03,0x07,
	0x0F,0x1F,0x3F,0x7F,0x7F,0xFF,0xFF,0xFF,0xF9,0xF0,0xE0,0xE0,0xC0,0x80,0x00,0x00,
	0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x04,0x07,0x0F,0x0F,0x0F,0x07,0x0F,0x07,0x0F,0x03,0x00,0x00,0x00,
	0x00,
/////////////// -35 ///////////////////////
	0x00,0x00,0x00,0x00,0x80,0xE0,0xE0,0xC0,0xF0,0xF8,0xF8,0xF0,0xE0,0xE0,0xC0,0x80,
	0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,
	0x00,0x00,0x00,0x09,0xCF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
	0xFF,0xFF,0xFE,0xFC,0xFC,0xF8,0xF0,0xF0,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,
	0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x01,0x01,0x00,0x01,0x01,0x03,0x07,0x07,0x0F,
	0x1F,0x3F,0x3F,0x7F,0xFF,0xFF,0xFF,0xFF,0xF8,0xF0,0xE0,0xE0,0xC0,0x00,0x00,0x00,
	0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x07,0x0F,0x0F,0x0F,0x07,0x07,0x07,0x07,0x03,0x00,0x00,0x00,
	0x00,
/////////////// -30 ///////////////////////
	0x00,0x00,0x00,0x00,0x80,0x80,0x80,0xC0,0xF0,0xF0,0xE0,0xE0,0xC0,0x80,0x80,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,
	0x00,0x00,0x00,0x26,0xBF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
	0xFF,0xFE,0xFC,0xFC,0xF8,0xF8,0xF0,0xF0,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,
	0x00,0x00,0x00,0x00,0x02,0x03,0x07,0x03,0x03,0x01,0x03,0x03,0x07,0x07,0x0F,0x0F,
	0x1F,0x3F,0x3F,0x7F,0x7F,0xFF,0xFF,0xFF,0xF9,0xF8,0xF0,0xF0,0xE0,0xC0,0x00,0x00,
	0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x02,0x07,0x0F,0x0F,0x0F,0x07,0x07,0x07,0x07,0x03,0x00,0x00,
	0x00,
/////////////// -25 ///////////////////////
	0x00,0x00,0x00,0x00,0x80,0x00,0x80,0xE0,0xE0,0xE0,0xE0,0xC0,0xC0,0x80,0x80,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,
	0x00,0x00,0x08,0x2F,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
	0xFF,0xFE,0xFE,0xFC,0xFC,0xF8,0xF8,0xF0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,
	0x00,0x00,0x00,0x00,0x01,0x07,0x07,0x07,0x07,0x01,0x03,0x03,0x07,0x07,0x07,0x0F,
	0x0F,0x1F,0x1F,0x3F,0x3F,0x7F,0xFF,0xFF,0xFE,0xFC,0xFC,0xF8,0xF8,0xF0,0xF0,0x00,
	0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x07,0x07,0x07,0x01,0x03,0x03,0x01,0x00,0x00,
	0x00,
/////////////// -20 ///////////////////////
	0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xC0,0xC0,0x80,0x80,0x80,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,
	0x00,0x00,0x38,0xFE,0xFE,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,
	0xFE,0xFE,0xFC,0xFC,0xF8,0xF8,0xF8,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,
	0x00,0x00,0x00,0x00,0x06,0x0F,0x0F,0x1F,0x0F,0x03,0x07,0x07,0x07,0x0F,0x0F,0x0F,
	0x1F,0x1F,0x3F,0x3F,0x3F,0x7F,0xFF,0xFF,0xFE,0xFC,0xFC,0xFC,0xF8,0xF8,0xF0,0x00,
	0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x07,0x07,0x07,0x07,0x01,0x01,0x01,0x01,0x00,
	0x00,
/////////////// -15 ///////////////////////
	0x00,0x00,0x00,0x00,0x00,0xC0,0xC0,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,
	0x00,0x20,0x3C,0xFC,0xFC,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,
	0xFE,0xFE,0xFE,0xFC,0xFC,0xFC,0xF8,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,
	0x00,0x00,0x00,0x01,0x05,0x0F,0x1F,0x1F,0x0F,0x03,0x07,0x07,0x07,0x0F,0x0F,0x0F,
	0x0F,0x1F,0x1F,0x1F,0x1F,0x3F,0x3F,0xFF,0xFF,0xFE,0xFE,0xFE,0xFE,0xFC,0x7C,0x10,
	0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x03,0x01,0x01,0x00,0x00,0x00,0x00,
	0x00,
/////////////// -10 ///////////////////////
	0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,
	0x00,0x78,0x7C,0xFC,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,
	0xFE,0xFE,0xFE,0xFE,0xFE,0xFC,0xF8,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,
	0x00,0x00,0x00,0x03,0x0F,0x1F,0x1F,0x1F,0x0F,0x07,0x07,0x07,0x07,0x07,0x0F,0x0F,
	0x0F,0x0F,0x0F,0x0F,0x1F,0x1F,0x1F,0x7F,0xFF,0xFF,0xFF,0xFF,0x3F,0x3F,0x1F,0x0C,
	0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,
	0x00,
/////////////// -05 ///////////////////////
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,
	0x00,0x00,0xF0,0xF0,0xFF,0xFF,0xFF,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,
	0xFE,0xFE,0xFE,0xFC,0xFC,0xFC,0xF8,0xE0,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00,
	0x00,
	0x00,0x01,0x01,0x07,0x07,0x1F,0x3F,0x7F,0x7F,0x3F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,
	0x0F,0x0F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x7F,0xFF,0xFF,0xFF,0x7F,0x1F,0x3F,0x1F,
	0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,
///////////////  00 ///////////////////////
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,
	0x00,0xE0,0xE0,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,
	0xFE,0xFE,0xFE,0xFE,0xFE,0xFC,0xF0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0x00,
	0x00,
	0x00,0x03,0x03,0x0F,0x0F,0x3F,0x7F,0x7F,0x7F,0x3F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,
	0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x3F,0x7F,0x7F,0x7F,0x3F,0x0F,0x0F,0x07,
	0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,
///////////////  05 ///////////////////////
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,
	0x00,0xC0,0xC0,0xFC,0xFC,0xFC,0xFC,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,
	0xFE,0xFE,0xFE,0xFF,0xFF,0xFE,0xF8,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xF0,0xC0,
	0x00,
	0x00,0x03,0x07,0x07,0x1F,0x1F,0x7F,0xFF,0x7F,0x7F,0x3F,0x0F,0x0F,0x0F,0x0F,0x0F,
	0x0F,0x0F,0x0F,0x07,0x07,0x07,0x07,0x07,0x07,0x1F,0x3F,0x3F,0x3F,0x1F,0x03,0x03,
	0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,
///////////////  10 ///////////////////////
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,
	0x00,0x00,0xF0,0xF0,0xF8,0xF8,0xF8,0xF8,0xF8,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFE,
	0xFE,0xFE,0xFE,0xFC,0xFC,0xF8,0xE0,0xE0,0xE0,0xE0,0xE0,0xF0,0xF0,0xF0,0xC0,0x80,
	0x00,
	0x01,0x1F,0x1F,0x7F,0x7F,0x7F,0xFF,0xFF,0xFF,0xFF,0x5F,0x1F,0x1F,0x1F,0x1F,0x1F,
	0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x07,0x07,0x1F,0x1F,0x3F,0x3F,0x0F,0x03,0x03,0x01,
	0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,
///////////////  15 ///////////////////////
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,
	0x00,0x00,0x20,0xE0,0xF0,0xF0,0xF0,0xF0,0xF8,0xF8,0xF8,0xFC,0xFC,0xFC,0xFC,0xFE,
	0xFE,0xFE,0xFE,0xFF,0xFE,0xF8,0xF8,0xF0,0xF0,0xF0,0xF0,0xF8,0xF8,0xF8,0xF8,0xF0,
	0x40,
	0x00,0x02,0x1E,0x3F,0x3F,0x7F,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0x3F,0x1F,0x1F,0x1F,
	0x1F,0x0F,0x0F,0x0F,0x07,0x07,0x07,0x07,0x03,0x03,0x0F,0x1F,0x0F,0x0F,0x05,0x01,
	0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x03,0x01,0x01,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,
///////////////  20 ///////////////////////
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,
	0x00,0x00,0x40,0xC0,0xE0,0xE0,0xE0,0xF0,0xF0,0xF8,0xF8,0xF8,0xFC,0xFC,0xFC,0xFE,
	0xFE,0xFE,0xFF,0xFE,0xFE,0xFC,0xF0,0xF0,0xF8,0xF8,0xF8,0xFC,0xFC,0xFC,0xFC,0x78,
	0x20,
	0x00,0x00,0x1C,0x7F,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x3F,0x1F,0x1F,
	0x1F,0x0F,0x0F,0x0F,0x07,0x07,0x03,0x03,0x03,0x01,0x07,0x0F,0x07,0x07,0x03,0x00,
	0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x03,0x03,0x03,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,
///////////////  25 ///////////////////////
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,
	0x00,0x80,0x80,0xC0,0xC0,0xE0,0xE0,0xF0,0xF0,0xF8,0xF8,0xF8,0xFC,0xFC,0xFE,0xFE,
	0xFF,0xFF,0xFF,0xFC,0xFC,0xF8,0xF8,0xFC,0xFC,0xFC,0xFE,0xFE,0xFF,0xBC,0x3C,0x00,
	0x00,
	0x00,0x11,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x3F,0x3F,0x1F,0x1F,
	0x0F,0x0F,0x07,0x07,0x03,0x03,0x03,0x01,0x01,0x03,0x03,0x07,0x03,0x00,0x00,0x00,
	0x00,
	0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x03,0x07,0x03,0x03,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,
///////////////  30 ///////////////////////
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,
	0x00,
	0x00,0x00,0x00,0x00,0x80,0x80,0xC0,0xC0,0xE0,0xF0,0xF0,0xF8,0xF8,0xFC,0xFC,0xFE,
	0xFF,0xFF,0xFF,0xFC,0xFC,0xF8,0xF8,0xFC,0xFC,0xFE,0xFF,0xFF,0xFF,0xFE,0x1E,0x04,
	0x00,
	0x00,0x00,0x23,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x3F,0x3F,
	0x1F,0x0F,0x0F,0x07,0x07,0x03,0x03,0x01,0x00,0x00,0x03,0x03,0x03,0x01,0x00,0x00,
	0x00,
	0x00,0x00,0x00,0x00,0x03,0x01,0x01,0x03,0x03,0x03,0x07,0x07,0x07,0x03,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,
///////////////  35 ///////////////////////
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x00,0x00,0x00,0x00,
	0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0xC0,0xE0,0xF0,0xF8,0xF8,0xFC,0xFE,0xFE,
	0xFF,0xFF,0xFE,0xFC,0xFC,0xF8,0xFC,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xEF,0x0A,0x00,
	0x00,
	0x00,0x00,0x0C,0xDE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,0x3F,
	0x1F,0x1F,0x0F,0x07,0x07,0x03,0x01,0x00,0x00,0x00,0x01,0x01,0x01,0x00,0x00,0x00,
	0x00,
	0x00,0x00,0x00,0x01,0x03,0x07,0x03,0x07,0x07,0x03,0x0F,0x07,0x0F,0x07,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,
///////////////  40 ///////////////////////
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0xE0,0xE0,0xC0,0xC0,0x80,0x00,0x00,
	0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0xE0,0xF0,0xF8,0xF8,0xFC,0xFE,0xFF,0xFF,
	0xFF,0xFF,0xFE,0xFE,0xFC,0xFE,0xFF,0x7F,0x3F,0x7F,0x7F,0x7F,0x7F,0x23,0x00,0x00,
	0x00,
	0x00,0x00,0x0C,0x9E,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x3F,0x3F,
	0x1F,0x0F,0x07,0x03,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,
	0x00,0x00,0x00,0x00,0x03,0x07,0x07,0x03,0x07,0x07,0x07,0x0F,0x07,0x07,0x03,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,
///////////////  45 ///////////////////////
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0xE0,0xE0,0xC0,0xC0,0x80,0x00,0x00,0x00,
	0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0xE0,0xF0,0xF8,0xFC,0xFE,0xFF,0xFF,
	0xFE,0xFE,0xFE,0xFC,0xFE,0xFF,0x7F,0x3F,0x3F,0x7F,0x7F,0x7F,0x39,0x00,0x00,0x00,
	0x00,
	0x00,0x00,0x30,0x78,0xFC,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,0x3F,
	0x1F,0x0F,0x07,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,
	0x00,0x00,0x00,0x01,0x03,0x07,0x0F,0x07,0x0F,0x0F,0x07,0x0F,0x0F,0x0F,0x0F,0x04,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,
///////////////  50 ///////////////////////
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x80,0xE0,0xF0,0xF8,0xF0,0xF0,0xE0,0xA0,0x00,0x00,0x00,
	0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xE0,0xF0,0xF8,0xFC,0xFF,0xFF,0xFF,
	0xFF,0xFF,0xFE,0xFE,0xFF,0xFF,0x7F,0x3F,0x0F,0x1F,0x1F,0x3F,0x0E,0x00,0x00,0x00,
	0x00,
	0x00,0x00,0x00,0x30,0x78,0xFC,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
	0x3F,0x1F,0x0F,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,
	0x00,0x00,0x00,0x00,0x02,0x07,0x07,0x0F,0x0F,0x07,0x0F,0x0F,0x07,0x0F,0x0F,0x0F,
	0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,
///////////////  55 ///////////////////////
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x80,0xE0,0xF0,0xF0,0xF0,0xF0,0xE0,0x00,0x00,0x00,0x00,0x00,
	0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0xF0,0xF8,0xFE,0xFE,0xFF,0xFE,
	0xFE,0xFE,0xFE,0xFF,0xFF,0xFF,0x3F,0x1F,0x1F,0x1F,0x1F,0x0E,0x00,0x00,0x00,0x00,
	0x00,
	0x00,0x00,0x00,0xC0,0xE0,0xF8,0xFC,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
	0x7F,0x1F,0x0F,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,
	0x00,0x00,0x00,0x00,0x01,0x0D,0x0F,0x1F,0x3F,0x1F,0x1F,0x3F,0x0F,0x0F,0x1F,0x1F,
	0x0F,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,
///////////////  60 ///////////////////////
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x80,0xE0,0xF0,0xF8,0xF8,0xF8,0xF8,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xE0,0xF8,0xFE,0xFE,0xFF,0xFE,0xFF,
	0xFE,0xFE,0xFF,0xFF,0xFF,0x3F,0x0F,0x0F,0x1F,0x0F,0x07,0x00,0x00,0x00,0x00,0x00,
	0x00,
	0x00,0x00,0x00,0x80,0xE0,0xF0,0xFC,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
	0x7F,0x1F,0x07,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,
	0x00,0x00,0x00,0x01,0x01,0x03,0x1F,0x1F,0x3F,0x3F,0x1F,0x1F,0x3F,0x0F,0x1F,0x0F,
	0x1F,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00
};
Mais non, c'est pas indigeste :lol:
Avatar du membre
The Pater
Modérateur
Messages : 13637
Enregistré le : 25/08/2004 8:19
Localisation : 06°27'46"E 45°50'29"N

Message non lu par The Pater »

Ah, cela me rappelle le temps où je programmais en Turbo Pascal, après avoir été vaincu par le Fortran.

A+
Ingénieur :
Personne faisant un travail divinatoire de précision basé sur des informations peu fiables données par des personnes peu qualifiées, voire ignorantes.
=>, magicien, devin, sorcier
Avatar du membre
Klug
BOFH
Messages : 1757
Enregistré le : 06/05/2004 12:57
Localisation : Beaucaire
Contact :

Message non lu par Klug »

bisnouk a écrit :- Celui qui n'y connait pas grand chose et qui prend le montage tel quel, le fichier HEX lui suffit pour programmer le µP,
Vrai. Et même le HEX il ne saura pas quoi en faire.
bisnouk a écrit :- Celui qui connait peut utiliser les sources partielles et se faire plaisir à comprendre comment ça marche et personnaliser son programme. Dans ce cas, il est d'ailleur évident que plus la discussion sera interéssée et plus je diffuserai le programme source,
Vrai.
bisnouk a écrit :- J'ai eu par le passé la désagréable surprise de voir une tentative utilisation commerciale d'un développement perso que j'avais trop librement mis en ligne.
"Tentative", ça, on n'y échappe pas.
Tout dépend de la licence utilisée pour la publication des sources (BSD, GPL ou autre), tu as la loi de ton côté à partir du moment où tu publies les sources (datés).
Ce qui va être beaucoup plus difficile avec un HEX désassemblé.

Mais je comprends le point de vue, c'est le risque.
bisnouk a écrit :En fait, je suis contre le gars qui bêtement copie une source, ne cherche pas à comprendre et se l'approprie. Par contre, le gars qui comme moi, adore se creuser la tête et qui fait l'effort de chercher un peu.... là je suis pour partager les sources. Je n'ai aucune prétention d'avoir inventé quelque chose, mais j'ai passé beaucoup d'heures pour mettre au point notamment les routines graphiques pour gérer les écrans de GSM et j'aimerai les partager avec de vrais amateurs :wink:
Pour ça, je pense qu'il va falloir sortir de LandMania et d'ici (d'où la proposition d'hébergement éventuel d'un Trac)...
Même en restant en français (mieux en ayant du multilingue au moins au niveau du site), avec quelques liens bien senti, ça va ramener du monde, dont des gens qui "toucheront" (et ne se contenteront pas de copier).

Tu connais MegaSquirt ?
Regarde la communauté (énorme) qui s'est montée autour du projet, le design hardware a été amélioré et les softs ont fait des bons en avant monstrueux grâce à l'ouverture.
Par contre certaines choses sont "non libres", de mémoire le schéma de principe (et les PCB) ne peuvent pas être réutilisés en commercial sans accord des auteurs.
bisnouk a écrit :La question maintenant, il a t'il sur cette FAQ des amateurs de développement à base de µP ou seulement des bricoleurs qui souhaitent réaliser un montage en suivant des plans :?:
L'inclinomètre, perso, non.
Le reste, oui, beaucoup plus (y compris des trucs que j'ai en tête mais pour lesquels je suis largués).
Avatar du membre
Mauresque
Webmaster
Messages : 3825
Enregistré le : 06/05/2004 12:53
Localisation : Caromb, Vaucluse (84)
Contact :

Message non lu par Mauresque »

Klug a écrit :L'inclinomètre, perso, non.
Le reste, oui, beaucoup plus (y compris des trucs que j'ai en tête mais pour lesquels je suis largués).
Pareil, l'inclinomètre me botte pas plus que ça mais un bon outil capable de remplacer des manos de température d'eau, d'huile, de pression turbo, etc... je suis 100% partant.
In a world without walls and fences, who needs Windows and Gates ?
Avatar du membre
bisnouk
Habitué
Messages : 2142
Enregistré le : 21/11/2005 14:53
Localisation : Avignon

Message non lu par bisnouk »

Klug a écrit : Pour ça, je pense qu'il va falloir sortir de LandMania et d'ici (d'où la proposition d'hébergement éventuel d'un Trac)...
Même en restant en français (mieux en ayant du multilingue au moins au niveau du site), avec quelques liens bien senti, ça va ramener du monde, dont des gens qui "toucheront" (et ne se contenteront pas de copier).

Tu connais MegaSquirt ?
Regarde la communauté (énorme) qui s'est montée autour du projet, le design hardware a été amélioré et les softs ont fait des bons en avant monstrueux grâce à l'ouverture.
Par contre certaines choses sont "non libres", de mémoire le schéma de principe (et les PCB) ne peuvent pas être réutilisés en commercial sans accord des auteurs.

L'inclinomètre, perso, non.
Le reste, oui, beaucoup plus (y compris des trucs que j'ai en tête mais pour lesquels je suis largués).
Non, je ne connaissais pas ce projet, c'est interressant comme principe.

Pour mes très modèstes montages, je ne suis pas opposé à structurer quelque chose de plus accessible que les post sur ce forum. Sur que le nombre d'"électronicien" doit être plus faible que sur des sites orientés µP :P
Le tout est de trouver du temps pour diffuser quelque chose de correct et juste. Toi qui est plus ou moins dans la partie tu sais le temps que cela représente pour passer du bricolage de coin de table à la mise en ligne d'un projet structuré.

Pour ce qui est de l'inclinomètre, je suis sur que cela n'interresse pas grand monde, mais les moyens d'interfacer l'écran peut être plus.
Avatar du membre
bisnouk
Habitué
Messages : 2142
Enregistré le : 21/11/2005 14:53
Localisation : Avignon

Message non lu par bisnouk »

Mauresque a écrit :
Klug a écrit :L'inclinomètre, perso, non.
Le reste, oui, beaucoup plus (y compris des trucs que j'ai en tête mais pour lesquels je suis largués).
Pareil, l'inclinomètre me botte pas plus que ça mais un bon outil capable de remplacer des manos de température d'eau, d'huile, de pression turbo, etc... je suis 100% partant.
En fait, une fois que les routines de commande d'un afficheur sont écrites, le reste est le plus facile ! Car il ne s'agit alors que d'assembler (avec un peu de doigté d'accord) des briques ensembles.

Le réel problème pour ce type de montage est de trouver des sondes pas trop chères (car sur les catalogues type BPS et compagnie, une sondes à 40 ou 50 € c'est du vol !). Une fois les sondes trouvées (et l'emplacement sur les carters aussi !), le développement du montage est assez simple.

En résumé, si quelqu'un bosse chez un équipementier et a des plans sur des sondes de température et de pression.... qu'il le dise !
Modifié en dernier par bisnouk le 23/01/2007 15:34, modifié 1 fois.
burgen'land
Messages : 14
Enregistré le : 11/02/2005 19:48

Message non lu par burgen'land »

la classe ;) ça rappelle des choses la manipulation de pointeurs...

pour les capteurs j'avais trouvé cette adresse US lorsque je regardai les forums RoadRunner
http://store.qkits.com/
godefroi45
Habitué
Messages : 473
Enregistré le : 11/08/2005 11:26
Localisation : 45

Message non lu par godefroi45 »

:shock: :shock: :shock: :shock: :shock:
Taing, y a des allumés !
SWB S4 TDI ; SWB S1'dénor
Avatar du membre
Alexios
Habitué
Messages : 728
Enregistré le : 02/06/2004 12:11
Localisation : Montpellier (34)

Message non lu par Alexios »

bisnouk a écrit :.../...
Le réel problème pour ce type de montage est de trouver des sondes pas trop chères (car sur les catalogues type BPS et compagnie, une sondes à 40 ou 50 € c'est du vol !). ...
Les sondes de T° ne sont pas chères. Par contre, celles de pression sont plus chères, surtout si elles incluent une sortie pour témoin lumineux. Je me réfère aux sondes VDO que j'ai utilisé pour mes instruments.

Par ailleurs, ses sondes elles ne se trouvent pas que chez les accessoiristes rallye, mais aussi chez les fournisseurs bateau, agricole ...
Pour que ça tourne rond, faut que ça soit carré ...

Vielle devise militaire ...
Avatar du membre
arthur31
Habitué
Messages : 443
Enregistré le : 28/12/2004 15:26
Localisation : albi

Message non lu par arthur31 »

:D tu vois bisnouk jze t'avais dit qu'il y aurait des clients pour ton truc :wink:
ils ne savaient pas que c'etait impossible ,alors ils l'on fait........
Répondre

Retourner vers « Améliorations • Aménagements • Accessoires »