[C]- Avis aux Amateurs - Amélioration d'une librairie pour GLCD
Répondre à la discussion
Page 1 sur 2 1 DernièreDernière
Affichage des résultats 1 à 30 sur 43

[C]- Avis aux Amateurs - Amélioration d'une librairie pour GLCD



  1. #1
    jorg1n

    [C]- Avis aux Amateurs - Amélioration d'une librairie pour GLCD


    ------

    Bonjour,

    j'ai en ma possession une librairie de gestion d'un afficheur graphique (contrôleur de type KS0108 ou similaire), que je fais tourner sur un PIC18(compilateur C18). Elle est assez bien,très simple a mettre en oeuvre, mais je souhaiterai lui apporter des améliorations afin de pouvoir avoir une librairie glcd complète, et qui pourrait par la même occasion être utile pour d'autres personnes qui, comme moi on peut être du mal a trouver une librairie complète...
    Tout d'abord, voila déjà les fonctions qu'elle réalise:

    Code:
    void Delay(void);
    unsigned char GLCD_Read(void);
    void Wait_Not_Busy(void);
    void GLCD_Write_Cmd(unsigned char data);
    void GLCD_Write_Data (unsigned char data);
    void ClearScreen(void);
    void Init_GLCD(void);
    void PutChar(unsigned char data);
    unsigned char GLCD_Read_Data(void);
    void SetPos(unsigned char x,unsigned char y);
    void WritePosition(void);
    void plot(unsigned char x,unsigned char y);
    void hline(unsigned char x,unsigned char y1,unsigned char y2);
    void vline(unsigned char x1,unsigned char x2,unsigned char y);
    void box(unsigned char x1,unsigned char y1,unsigned char x2,unsigned char y2);
    void PutMessage( char rom *Message);
    void PutLogo( char rom *logo);
    Et voila quelques fonctions que je souhaiterai lui apporter:
    -Ecriture en NOIR sur BLANC ou BLANC sur NOIR (car pour le moment je n'arrive qu'a écrire en BLANC sur NOIR->écran vierge = écran noir)
    -Ajout d'une autre taille de police de caractère
    -Réalisation d'un cercle

    Et d'autres si vous avez des idées...

    Pour cela je souhaiterai avoir quelques petits coups de pouce pour menez à bien ce petit projet...

    Je vous transmet en pièce jointe les 2 fichiers glcd : glcd.c et glcd.h

    Je vous remercie d'avance de votre collaboration...

    Bonne Journée

    -----
    Fichiers attachés Fichiers attachés

  2. #2
    jorg1n

    Re : [C]- Avis aux Amateurs - Amélioration d'une librairie pour GLCD

    Bonjour,

    personne ne serait intéressé pour une amélioration de cette librairie...

    Merci d'avance

  3. #3
    jorg1n

    Re : [C]- Avis aux Amateurs - Amélioration d'une librairie pour GLCD

    Bonjour,

    je reviens vers vous pour apporter une amélioration de la librairie:
    -Ajout d'une fonction pour tracer un cercle
    Voila le code qui est a ajouter dans la librairie:

    dans le fichier glcd.h:
    Code:
    void circle(int xc,int yc,int r);
    et dans le fichier glcd.c:
    Code:
    void circle(int xc,int yc,int r)
    {
    	int x=0,y=r,dp;
    	dp=1-r;
    	for(;x<y;x++)
    	{
    		if(dp<0)
    		{
    			dp+=2*x+3;
    		}
    		else
    		{
    			dp+=2*(x-y)+5;
    			y--;
    		}
    		plot(x+xc,y+yc);
    		plot(-x+xc,-y+yc);
    	        plot(x+xc,-y+yc);
    		plot(-x+xc,y+yc);
    		plot(y+xc,x+yc);
    		plot(-y+xc,-x+yc);
    		plot(-y+xc,x+yc);
    		plot(y+xc,-x+yc);
    	}
    }
    Pour l'utiliser, rien de plus simple :
    xc = > abscisse du centre
    yc = > ordonnée du centre
    r = > rayon du cercle

    Voila la première amélioration...

  4. #4
    invite03481543

    Re : [C]- Avis aux Amateurs - Amélioration d'une librairie pour GLCD

    Bonjour Jorgin,

    bonne idée, mais ne soit pas trop pressé pour les réponses, la plupart des gens utilisent les bibliothèques fournies avec les compilos, c'est même un critère de choix pour certains, même si le compilo n'est pas ANSI ça passe avant.

    J'ai quelques codes en HitechC, je vais regarder ce que je peux te filer.
    Pour les polices de tailles différentes, je crée un fichier header contenant la nouvelle police, j'en ai une par exemple pour des chiffres de grandes tailles (big_num.h), il vaut mieux se les faire à la main, c'est un peu long et chiant mais c'est tout simple.
    Si cette police t'intéresse fais moi signe par MP.

  5. A voir en vidéo sur Futura
  6. #5
    invite03481543

    Re : [C]- Avis aux Amateurs - Amélioration d'une librairie pour GLCD

    Voici le résultat de cette police en image.
    J'affiche la température ambiante avec un DS18S20 comme capteur, ainsi que les octets transmis par le capteur.
    @+
    Images attachées Images attachées  

  7. #6
    jorg1n

    Re : [C]- Avis aux Amateurs - Amélioration d'une librairie pour GLCD

    Bon,

    je viens encore de modifier ma librairie, et je viens d'y ajouter une fonction pour effacer une zone définie: ClearScreenZone
    il faut donc ajouter au fichier glcd.h:

    Code:
    void ClearScreenZone(unsigned char x1,unsigned char y1,unsigned char x2,unsigned char y2);
    void unplot(unsigned char x,unsigned char y);
    et au fichier glcd.c:
    Code:
    void ClearScreenZone(unsigned char x1,unsigned char y1,unsigned char x2,unsigned char y2){
    char i,j;
        for(i=x1;i<=x2;i++){
            for(j=y1;j<=y2;j++)
                unplot(i,j);
        }
    }
    
    void unplot(unsigned char x,unsigned char y){
    unsigned char d;
    	if(x>63){
    		b_GLCD_GCS1=1;
    		b_GLCD_GCS2=0;
    		x-=64;
    	}
    	else
    	{
    		b_GLCD_GCS1=0;
    		b_GLCD_GCS2=1;
    	}
    	GLCD_Write_Cmd(0x40+x);			//write column address
    	GLCD_Write_Cmd(0xb8+(y>>3));	//write row address
    	d=GLCD_Read_Data();				//dummy read
    	d=GLCD_Read_Data();
    	GLCD_Write_Cmd(0x40+x);			//write column address again
    	d=d&(0xff-(1<<(y&7)));		//Blanc sur noir
    	GLCD_Write_Data(d);
    }
    Voili voila...

    Une fois que ma librairie sera assez complète, je posterai un fichier .zip de la librairie...si vous la souhaité maintenant, contacter moi..

    Pour te répondre HULK, je suis bien intéressé par ta police de grands nombres.

    Par contre, pourrais tu me dire comment on peut créer une tel police ainsi que la manière a venir l'utiliser?

    Merci encore

  8. #7
    lcoulon

    Re : [C]- Avis aux Amateurs - Amélioration d'une librairie pour GLCD

    Pourrais tu poster un petit schema structurel qui montre comment interfacer le glcd au PIC 18Fxxxx que tu utilises ?

    l'ideal, serait que tu puisses poster ou uploader sur un site chaque nouvelle version de cette librairie, ainsi il sera possible à chacun d'aller télécharger la derniere version retravaillée .

    Merci à toi,

  9. #8
    jorg1n

    Re : [C]- Avis aux Amateurs - Amélioration d'une librairie pour GLCD

    Si tôt dit...si tôt fait...
    Je vous post donc le cablage que j'ai réalisé pour piloter mon afficheur LCD 128x64.

    En ce qui concerne la librairie, j'attends encore un peu et je vous la poste..

    Bonne après midi
    Images attachées Images attachées  

  10. #9
    invite03481543

    Re : [C]- Avis aux Amateurs - Amélioration d'une librairie pour GLCD

    Citation Envoyé par jorg1n Voir le message
    Par contre, pourrais tu me dire comment on peut créer une tel police ainsi que la manière a venir l'utiliser?

    Merci encore
    C'est assez basique en fait.
    J'utilise paint de windows pour dessiner mes fonts, puis j'ouvre l'utilitaire de Bigonoff -> BigLcd où j'importe mon bmp et je lance la moulinette pour sortir le code C correspondant à l'image.
    Je fais ça pour chaque chiffre, et je crée un fichier Big_num.h qui contient tous les chiffres créés.

    example:

    Code:
    const unsigned char Big_num[10][768] =
    {
    
          {0x00 ,0x00 ,0x00 ,    // chiffre 0
           0x00 ,0x00 ,0x00 ,
           0x00 ,0x00 ,0x00 ,
           0x00 ,0x00 ,0x00 ,
           0x00 ,0x00 ,0x00 ,
           0x01 ,0xF8 ,0x00 ,
           0x03 ,0xFC ,0x00 ,
           0x07 ,0xFE ,0x00 ,
           0x0E ,0x07 ,0x00 ,
           0x1C ,0x03 ,0x80 ,
           0x1C ,0x03 ,0x80 ,
           0x3C ,0x03 ,0xC0 ,
           0x38 ,0x01 ,0xC0 ,
           0x38 ,0x01 ,0xC0 ,
           0x38 ,0x01 ,0xC0 ,
           0x38 ,0x01 ,0xC0 ,
           0x38 ,0x01 ,0xC0 ,
           0x38 ,0x01 ,0xC0 ,
           0x38 ,0x01 ,0xC0 ,
           0x38 ,0x01 ,0xC0 ,
           0x38 ,0x01 ,0xC0 ,
           0x38 ,0x01 ,0xC0 ,
           0x3C ,0x03 ,0xC0 ,
           0x3C ,0x03 ,0xC0 ,
           0x1C ,0x03 ,0x80 ,
           0x1E ,0x07 ,0x80 ,
           0x0E ,0x07 ,0x00 ,
           0x0F ,0x0F ,0x00 ,
           0x07 ,0xFE ,0x00 ,
           0x03 ,0xFC ,0x00 ,
           0x00 ,0xF0 ,0x00 ,
           0x00 ,0x00 ,0x00
           },
    
    
           {
           0x00 ,0x00 ,0x00 ,    // chiffre 1
           0x00 ,0x00 ,0x00 ,
           0x00 ,0x00 ,0x00 ,
           0x00 ,0x00 ,0x00 ,
           0x00 ,0x00 ,0x00 ,
           0x00 ,0x1C ,0x00 ,
           0x00 ,0x3C ,0x00 ,
           0x00 ,0x7C ,0x00 ,
           0x00 ,0xFC ,0x00 ,
           0x01 ,0xFC ,0x00 ,
           0x03 ,0xFC ,0x00 ,
           0x07 ,0xBC ,0x00 ,
    ....................etc

  11. #10
    jorg1n

    Re : [C]- Avis aux Amateurs - Amélioration d'une librairie pour GLCD

    Bonjour,

    par contre je rencontre un petit souci pour afficher des variables..INT, FLOAT,...

    avec ma précédente librairie, je convertissais ma variable en chaine de caractètes et j'affichais cette chaine de caractères...et là ça ne marche pas!!

    Code:
    char DATAtoLCD[30];
    float VoltInstBat1;
    [...]
    sprintf (DATAtoLCD,"%6.2f",VoltInstBat1); 
    PutMessage(DATAtoLCD);
    et avec cela il m'affiche une chaine, certes, mais de point positionner un peut partout.. la conversion doit mal se faire...
    Alors serais-ce la fonction sprintf qui serait mal utilisée??
    (J'utilise le compilateur C18, et la fonction est dans la librairie stdio.h)

    Merci d'avance..

  12. #11
    lcoulon

    Re : [C]- Avis aux Amateurs - Amélioration d'une librairie pour GLCD

    Vu que je débute avec les GLCD, j'ai quelques questions :

    Comment doit-on s'y prendre pour interfacer un montage existant :

    Par exemple un thermomètre digital à base de PIC et afficher sur un GLCD la température en grande police avec éventuellement un petit dessin qui varierai en fonction de la température affichée ( dessinner un soleil si la t° > 20° et de la neige si la T°< 0° )

    Dois-je prévoir d'interfacer mon montage existant avec le Pic pilotant le GLCD ?

    Ou bien, faut-il que le PIC pilotant le GLCD soit embarque également le programme pour traiter le capteur de temperature ?


    L'idéal serait peut-etre d'avoir un GLCD avec son PIC pilote et en fonction des états de certains de ses port, un message ou un dessin prédéfini s'afficherait .

    Pouvez vous me dire ce que vous en pensez, et quelle serait d'après vous la marche à suivre pour ajouter un GLCD à des montages déja existants ?

    Merci de votre aide,

  13. #12
    jorg1n

    Re : [C]- Avis aux Amateurs - Amélioration d'une librairie pour GLCD

    Bonjour,

    pour répondre a ta question...
    On peut utiliser un seul et unique microcontroleur (PIC) pour réaliser la fonction que tu désires, ton microcontroleur peut a la fois gérer le fonctionnement de ton glcd ainsi que la capture / traitement de ton/tes informations.

    Par exemple, pour réaliser ce que tu proposes, j'utiliserai un LM335, branché sur une entrée analogique de mon PIC,je réalise une conversion analogique / numérique (module intégré dans le PIC), je traite l'information, et j'affiche le résultat...pas plus compliqué que ça sur le principe...

  14. #13
    jorg1n

    Re : [C]- Avis aux Amateurs - Amélioration d'une librairie pour GLCD

    Bonjour à tous,

    Hulk28, je suis entrain de voir pour ajouter une police de grand chiffre, pas de problème pour la déclarer, mais comment l'utiliser??
    Il faut, je suppose créer une fonction d'affichage de gros caractères...pourrai tu m'aider ?
    Merci encore

  15. #14
    jorg1n

    Re : [C]- Avis aux Amateurs - Amélioration d'une librairie pour GLCD

    Bonjour,

    Hulk, petit venir faire un tour sur ce sujet s'il te plait afin que tu puisse m'aider pour affcher des gros caractères...
    Je te remercie d'avance...

  16. #15
    jorg1n

    Re : [C]- Avis aux Amateurs - Amélioration d'une librairie pour GLCD

    Bonjour a tous...
    Personne pour me filer un petit coup de mains...
    Merci d'avance

  17. #16
    invite03481543

    Re : [C]- Avis aux Amateurs - Amélioration d'une librairie pour GLCD

    Salut,

    pour insérer une police il faut il créer la place sur le mapping graphique en créant une fonction pour ce "sprite".

    La fonction doit positionner en x,y le rectangle de l'image insérée.

    void T6963C_sprite(unsigned char px, unsigned char py, const char *picture, unsigned char size_x, unsigned char size_y);

    px et py représentent l'offset de positionnement sx,sy la dimension de l'image, *picture pointe sur l'image.

  18. #17
    jorg1n

    Re : [C]- Avis aux Amateurs - Amélioration d'une librairie pour GLCD

    ... Merci Hulk...
    Mais pour être sincère... Tu me laisse sans voix, j'ai un peu de mal a comprendre...
    Je pensai partir sur le principe d'insertion des caractères classiques:

    Code:
    void PutChar(unsigned char data){
    unsigned char i,d;
    	if(data<32){
    		switch(data){
    			case 13:
    				XPos=0;
    			case 10:
    				XPos=0;
    				YPos+=8;
    				YPos=YPos&63;
    		}
    		WritePosition();
    	}
    	else{
    		for(i=0;i<7;i++){
    			d=Font[data-32][i];
    			if(d!=0x55){
    				d=~d;				//ADD pour Noir sur Blanc
    				GLCD_Write_Data(d);
    				MoveRight();
    			}
    		}
    		GLCD_Write_Data(0x00);		//Noir sur Blanc
    		//GLCD_Write_Data(0xff);		//Blanc sur Noir
    		MoveRight();
    	}
    }
    et en re créer une pour une insertion de "char" en grosse taille...

  19. #18
    invite03481543

    Re : [C]- Avis aux Amateurs - Amélioration d'une librairie pour GLCD

    En fait dès qu'il ne s'agit plus de caractères à proprement parlé stockés dans la ROM texte de l'afficheur, il faut faire appel à une fonction graphique qui va appeler un tableau contenant le mapping de la police à afficher.
    La fonction que je t'ai indiqué permet de situer en x et y le cadre du caractère.

  20. #19
    jorg1n

    Re : [C]- Avis aux Amateurs - Amélioration d'une librairie pour GLCD

    Bonjour Hulk,

    je suis d'accord, mais comment faire justement cette fonction??
    Car j'ai regardé ma fonction PutChar qui me permet d'afficher des caractères (police de caractères déclarée dans mon PIC et non pas dans la ROM de l'afficheur) mais je ne vois pas comment faire pou une police plus grosse...
    Devrais je utiliser une fonction comme pour afficher un logo??

    Merci encore

  21. #20
    invite03481543

    Re : [C]- Avis aux Amateurs - Amélioration d'une librairie pour GLCD

    Oui c'est ça, comme un logo, ou encore un 'sprite', bref une zone graphique qui circonscrit la zone d'affichage de la nouvelle police.
    @+

  22. #21
    jorg1n

    Re : [C]- Avis aux Amateurs - Amélioration d'une librairie pour GLCD

    Bonjour?

    Merci Hulk pour l'info..
    Je vais travailler dessus... et je vous tiens au courant..
    Par contre, j'ai une autre question:
    -Comment convertir une variable de type Float en une chaine de caractères à écrire? existe t'il une fonction dans le compilateur C18 de Microchip?

    Merci d'avance

    PS: dès que j'aurais finit avec le float et les gros num, je post la lib.

  23. #22
    Seb.26

    Re : [C]- Avis aux Amateurs - Amélioration d'une librairie pour GLCD

    Citation Envoyé par jorg1n Voir le message
    -Comment convertir une variable de type Float en une chaine de caractères à écrire? existe t'il une fonction dans le compilateur C18 de Microchip?
    -> sprintf() ...

    C'est pour ça qu'à mon avis, un lib LCD ne doit pas s'occuper de cela, et simplement savoir BIEN afficher les char[] ... ce qui est dans les char[] est le job du dev, pas de la lib ...
    << L'histoire nous apprend que l'on apprend rien de l'histoire. >>

  24. #23
    jorg1n

    Re : [C]- Avis aux Amateurs - Amélioration d'une librairie pour GLCD

    Bonjour à tous,

    je rentre un petit problème (et oui encore un!!), cela concerne l'affichage d'un float..
    voilà ce que j'ai:

    Code:
    #include <ftoa.h>
    ...
    float tension;
    char DataToLcd [30];
    ...
    tension = 30.2359;
    ftoa (tension,DataToLcd,2);
    et après ça, j'ai bien mon "char" DataToLcd qui vaut "30.23" soit :
    DataToLcd [0] = '3'
    DataToLcd [1] = '0'
    DataToLcd [2] = '.'
    DataToLcd [3] = '2'
    DataToLcd [4] = '3'
    DataToLcd [5] = '.'
    ...
    DataToLcd [29] = '.'

    mais là comment faire pour l'afficher:
    j'ai beau faire:
    PutChar(DataToLcd);
    PutMessage(DataToLcd);
    ça ne marche pas!!

    auriez vous une idée??

    Merci d'avance

  25. #24
    invite03481543

    Re : [C]- Avis aux Amateurs - Amélioration d'une librairie pour GLCD

    Salut,

    à quoi correspondent les arguments dans ta fonction ftoa() notamment le 2 comme troisième argument?

  26. #25
    jorg1n

    Re : [C]- Avis aux Amateurs - Amélioration d'une librairie pour GLCD

    Bonjour Hulk28,

    j'ai trouvé la solution, j'ai oublié de le dire...
    Pour pour la fonction ftoa:
    Code:
    ftoa (tension,DataToLcd,2);
    tension : variable de type float a convertir
    DataToLcd : variable de type char
    2 : nombre de chiffres après la virgule.

    donc pour afficher mon résultat : DataToLcd, j'ai fais comme ceci:

    Code:
        i=0;
        while(DataToLcd[i]!=0)
        	PutChar(DataToLcd[i++]);
    Voila...
    Bon par contre, je rencontre un autre petit soucis...
    je n'arrive pas a écrite ou je veux, lorsque j'écris un message ou une chaine de caractères sur mon glcd, je ne peux écrire qu'aux lignes 0, 8, 16,... comment je peux résoudre ce problème, car je souhaite écrire ou je veux sur l'axe des y mais la je suis un peu forcé...

    Je te remercie d'avance

  27. #26
    mortaurat

    Re : [C]- Avis aux Amateurs - Amélioration d'une librairie pour GLCD

    Bonsoir,
    je trouve ta lib pas mal du tout.

    Je ne veut pas dire de betise mais DataToLcd doit être je pense un tableau.
    Si DataToLcd est une variable de type char, ben tu va pouvoir stocker que un charactere.
    tu es obligé de faire je pense:
    Code:
    char DataToLcd[taille] ;
    Pour le fait que tu ne puisse pas ecrire ou tu veux, le probléme vient peut etre de Xpos et Ypos, en regardant de plus prés, je vois qu'ils sont de type char. Je trouve ca bizarre pour une position.

    Enfin voila, je ne suis pas sur que le probléme vienne de là.

  28. #27
    jorg1n

    Re : [C]- Avis aux Amateurs - Amélioration d'une librairie pour GLCD

    Bonjour mortaurat,

    en ce qui concerne ma variable DataToLcd, elle est définit comme ci dessous:

    Code:
    char DATAtoLCD[30];
    en ce qui concerne le problème d'écriture sur des lignes multiple de 8, je ne me suis pas encore penché dessus. Et je souhaite pouvoir afficher des numéros en gros caractères... il me reste encore ces 2 choses à voir...

  29. #28
    jorg1n

    Re : [C]- Avis aux Amateurs - Amélioration d'une librairie pour GLCD

    Bonjour,

    je reviens vers vous car je rencontre un problème, je n'arrive qu'a écrire sur les lignes multiple de 8 (lorsque y = 0 ou 8 ou 16 ou...). Et cela me dérange...
    Alors je souhaiterai modifier la librairie en conséquence, mais je n'y arrive pas...
    Je pense que le soucis viens de cette fonction:

    Code:
    void WritePosition(void){
    	if(XPos>63){
    		b_GLCD_GCS1=1;
    		b_GLCD_GCS2=0;
    	}
    	else{
    		b_GLCD_GCS1=0;
    		b_GLCD_GCS2=1;
    	}
    	GLCD_Write_Cmd(0x40+(XPos&0x3f));	//column=0
    	GLCD_Write_Cmd(0xb8+((YPos&0x3f)>>3));	//row=0
    
    }
    J'ai regardé la documentation de mon afficheur (je la met en pièce jointe) et on peu apercevoir page 12 le principe a suivre, mais impossible pour moi de réaliser ce que je veux faire...
    Un petit coup de pouce serait le bien venu!!
    Merci d'avance
    Images attachées Images attachées

  30. #29
    jorg1n

    Re : [C]- Avis aux Amateurs - Amélioration d'une librairie pour GLCD

    Bonjour,

    je reviens vers vous car j'ai laissé tombé l'affichage sur tous les axes "y" (je n'ai réussi qu'a moitié...)

    Par contre, là je souhaite intégrer une police une peut plus grosse...pourriez vous m'aider un peu sur la marche a suivre?

    Je vous remercie d'avance

  31. #30
    jorg1n

    Re : [C]- Avis aux Amateurs - Amélioration d'une librairie pour GLCD

    Bonjour à tous,

    ça y est, j'ai réussi à insérer une police plus grande, enfin je n'ai fais que les chiffres de 0 à 9 et le ".", car j'avais besoin que de ça pour le moment, mais dès que j'aurai un peu plus de temps, j'ajoute tout le reste, ...

    Bonne journée à tous

Page 1 sur 2 1 DernièreDernière

Discussions similaires

  1. librairie Glcd pour C18 ?
    Par MorpheusPic dans le forum Électronique
    Réponses: 20
    Dernier message: 18/02/2009, 11h37
  2. Avis aux amateurs de chromatographie
    Par invite6f245c69 dans le forum Chimie
    Réponses: 12
    Dernier message: 15/07/2008, 08h32
  3. Interruptions en C - Avis aux amateurs!!
    Par jorg1n dans le forum Électronique
    Réponses: 6
    Dernier message: 18/02/2008, 09h54
  4. Avis aux amateurs de thermodynamique atmosphérique!
    Par invite51c9e6f8 dans le forum TPE / TIPE et autres travaux
    Réponses: 4
    Dernier message: 24/02/2006, 16h35
Découvrez nos comparatifs produits sur l'informatique et les technologies.