Inclinomètre - Boussole - Thermomètre digital
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.
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.
Inclinomètre - Boussole - Thermomètre digital
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 )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é
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
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
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 )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é
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
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
Modifié en dernier par bisnouk le 23/01/2007 9:53, modifié 3 fois.
Pour 3 raisons :Klug a écrit : Par contre, l'éternelle question : pourquoi ne pas distribuer le source ?
- 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
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
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
Exemple de l'image pour une pente de 60°
Pente à -60° !
Exemple de la donnée repésentant la pente pour les 25 valeurs (-60 à 60° tous les 5°) :
Mais non, c'est pas indigeste
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);
}
}
}
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,
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
};
Vrai. Et même le HEX il ne saura pas quoi en faire.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.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,
"Tentative", ça, on n'y échappe pas.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.
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.
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)...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
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.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
Le reste, oui, beaucoup plus (y compris des trucs que j'ai en tête mais pour lesquels je suis largués).
- Mauresque
- Webmaster
- Messages : 3825
- Enregistré le : 06/05/2004 12:53
- Localisation : Caromb, Vaucluse (84)
- Contact :
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.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).
In a world without walls and fences, who needs Windows and Gates ?
Non, je ne connaissais pas ce projet, c'est interressant comme principe.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).
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
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.
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.Mauresque a écrit :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.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).
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.
-
- Messages : 14
- Enregistré le : 11/02/2005 19:48
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/
pour les capteurs j'avais trouvé cette adresse US lorsque je regardai les forums RoadRunner
http://store.qkits.com/
-
- Habitué
- Messages : 473
- Enregistré le : 11/08/2005 11:26
- Localisation : 45
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.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 !). ...
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 ...
Vielle devise militaire ...