Bienvenue aux nouveaux arrivants sur FantasPic !

- Pensez à lire les règles durant votre visite, il n'y en a pas beaucoup, mais encore faut-il les respecter .
- N’hésitez pas à faire des remarques et/ou suggestions sur le Forum, dans le but de l'améliorer et de rendre vos prochaines visites plus agréables.
- Vous pouvez regarder votre "panneau de l'utilisateur" afin de configurer vos préférences.
- Un passage par "l'utilisation du forum" est recommandé pour connaître les fonctionnalités du forum.

--- L’équipe FantasPic ---
Forum général sur le langage C !

Modérateur : Jérémy

Fonctionnement des "FONT" sur écran OLED
Jérémy
Administrateur du site
Administrateur du site
Messages : 2750
Âge : 46
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#21 Message par Jérémy » lun. 16 mai 2016 16:03

Yop Maï , tu me donne des bouts de code, mais je ne les comprends pas du tout !

Tu sais il me faut des exemple concrets .
C'est en faisant des erreurs, que l'on apprend le mieux !!!

Fonctionnement des "FONT" sur écran OLED
Guest
Confirmé
Confirmé
Messages : 800
Enregistré en : mars 2017

#22 Message par Guest » lun. 16 mai 2016 16:03

la la totale

Code : Tout sélectionner

        i=4;
        NB= NB & ~(1<< i);             // bit a zer0
        NB=NB | (1<< i);             // bit a 1
       
        if (texte[1] & (1u<<i))
        {
         NB= NB & ~(1<< i);             // bit a zer0
        }
        else
          NB=NB | (1<< i);           

Fonctionnement des "FONT" sur écran OLED
Guest
Confirmé
Confirmé
Messages : 800
Enregistré en : mars 2017

#23 Message par Guest » lun. 16 mai 2016 16:10

bon j'explique le dernier

NB= NB & ~(1<< i); // bit a zer0
NB=NB | (1<< i); // bit a 1

j'ai mis i=4
donc on positionne le 4eme bit de NB a zero pour le premier et a 1 pour le 2eme

le test if toujours en fonction de i donc le 4eme
test si le 4eme de texte[i] si est a 1 si est a 1 blala s'il est a zero blabla

c'est oK ?

Fonctionnement des "FONT" sur écran OLED
Jérémy
Administrateur du site
Administrateur du site
Messages : 2750
Âge : 46
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#24 Message par Jérémy » lun. 16 mai 2016 16:23

Non Maï , je ne comprends pas désolé. :oops:

J'avance de mon coté mais je suis de rien, j'ai fais ca pour le moment . Je pense qu'il serait facile que tu suive mon raisonnement pour me corriger, plutot que j'essaye de comprendre le tiens qui est trop pechû pour moi .

J'en suis rendu la pour le moment .

Je créer 16 tableaux correspondant à mes 16 segments verticaux, qu'il va falloir que je place les uns a cotés des autres.
Ces 16 segments sont fabriqués en 2 temps . les 8 premières valeurs reçues fabrique les 8 premiers segments .
les 8 autres fabriquent les 8 derniers segments.

Il me faut recevoir 8 valeurs avant d'avoir mes 8 segments complets.

une fois mon segment enforme de tableau créer . j'additionne le tout pour obtenir ma valeur à envoyer.
ca donne :

Code : Tout sélectionner

         for (i=0;i<7;i++){
              
tableau_0[i] = ( (font16x8[352+i])>>7) && 0x01) ;
              
tableau_1[i] = ( (font16x8[352+i])>>6) && 0x01) ;
              
tableau_2[i] = ( (font16x8[352+i])>>5) && 0x01) ;
              
tableau_3[i] = ( (font16x8[352+i])>>4) && 0x01) ;
              
tableau_4[i] = ( (font16x8[352+i])>>3) && 0x01);
              
tableau_5[i] = ( (font16x8[352+i])>>2) && 0x01) ;
              
tableau_6[i] = ( (font16x8[352+i])>>1) && 0x01) ;
              
tableau_7[i] = ( (font16x8[352+i]) && 0x01) ;
           }
         for (
i=0;i<7;i++){
              
tableau_8[i] = ( (font16x8[352+7+i])>>7) && 0x01) ;
              
tableau_9[i] = ( (font16x8[352+7+i])>>6) && 0x01) ;
              
tableau_10[i] = ( (font16x8[352+7+i])>>5) && 0x01) ;
              
tableau_11[i] = ( (font16x8[352+7+i])>>4) && 0x01) ;
              
tableau_12[i] = ( (font16x8[352+7+i])>>3) && 0x01);
              
tableau_13[i] = ( (font16x8[352+7+i])>>2) && 0x01) ;
              
tableau_14[i] = ( (font16x8[352+7+i])>>1) && 0x01) ;
              
tableau_15[i] = ( (font16x8[352++7i]) && 0x01) ;
           }


          
valeur_0 = (tableau_0[0]*128) + (tableau_0[0]*64) + (tableau_0[0]*32) + (tableau_0[0]*16) + (tableau_0[0]*8) + (tableau_0[0]*4) + (tableau_0[0]*2) + (tableau_0[0]) )
          
OLED_M_data(valeur_0);
            |
            |
            |
          
valeur_16 = (tableau_16[0]*128) + (tableau_16[0]*64) + (tableau_16[0]*32) + (tableau_16[0]*16) + (tableau_16[0]*8) + (tableau_16[0]*4) + (tableau_16[0]*2) + (tableau_16[0]) )
          
OLED_M_data(valeur_16);

           } 
C'est en faisant des erreurs, que l'on apprend le mieux !!!

Fonctionnement des "FONT" sur écran OLED
Jérémy
Administrateur du site
Administrateur du site
Messages : 2750
Âge : 46
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#25 Message par Jérémy » lun. 16 mai 2016 16:41

Apres correction je n'ai besoin que de 8 tableaux . je repete deux fois l'operation .

par contre j'ai un probléme à la compilation avec ceci .

Code : Tout sélectionner

//---------------------------------------------------------------------------------
void affichage_L(){

     
unsigned int segment,valeur_0,valeur_1,valeur_2,valeur_3,valeur_4,valeur_5,valeur_6,valeur_7;

     
OLED_M_command(SSD1306_COLUMNADDR); // On configure la largeur de l'ecran
     
OLED_M_command(40);                 // Colonne minimum
     
OLED_M_command(47);                 // Colonne MAximum;
     
OLED_M_command(SSD1306_PAGEADDR);   // On configure la hauteur de l'ecran
     
OLED_M_command(1);                  // Colonne minimum
     
OLED_M_command(3);                  // Colonne MAximum;

     
i=0;

     
// 8 premier segments
         
for (i=0;i<7;i++){
              
tableau_0[i] = ( (font16x8[352+i])>>7) && 0x01) ;
              
tableau_1[i] = ( (font16x8[352+i])>>6) && 0x01) ;
              
tableau_2[i] = ( (font16x8[352+i])>>5) && 0x01) ;
              
tableau_3[i] = ( (font16x8[352+i])>>4) && 0x01) ;
              
tableau_4[i] = ( (font16x8[352+i])>>3) && 0x01) ;
              
tableau_5[i] = ( (font16x8[352+i])>>2) && 0x01) ;
              
tableau_6[i] = ( (font16x8[352+i])>>1) && 0x01) ;
              
tableau_7[i] = ( (font16x8[352+i]) && 0x01) ;
           }
          
valeur_0 = (tableau_0[0]*128) + (tableau_0[1]*64) + (tableau_0[2]*32) + (tableau_0[3]*16) + (tableau_0[4]*8) + (tableau_0[5]*4) + (tableau_0[6]*2) + (tableau_0[7]) )
          
OLED_M_data(valeur_0);
          
valeur_1 = (tableau_1[0]*128) + (tableau_1[1]*64) + (tableau_1[2]*32) + (tableau_1[3]*16) + (tableau_1[4]*8) + (tableau_1[5]*4) + (tableau_1[6]*2) + (tableau_1[7]) )
          
OLED_M_data(valeur_1);
          
valeur_2 = (tableau_2[0]*128) + (tableau_2[1]*64) + (tableau_2[2]*32) + (tableau_2[3]*16) + (tableau_2[4]*8) + (tableau_2[5]*4) + (tableau_2[6]*2) + (tableau_2[7]) )
          
OLED_M_data(valeur_2);
          
valeur_3 = (tableau_3[0]*128) + (tableau_3[1]*64) + (tableau_3[2]*32) + (tableau_3[3]*16) + (tableau_3[4]*8) + (tableau_3[5]*4) + (tableau_3[6]*2) + (tableau_3[7]) )
          
OLED_M_data(valeur_3);
          
valeur_4 = (tableau_4[0]*128) + (tableau_4[1]*64) + (tableau_4[2]*32) + (tableau_4[3]*16) + (tableau_4[4]*8) + (tableau_4[5]*4) + (tableau_4[6]*2) + (tableau_4[7]) )
          
OLED_M_data(valeur_4);
          
valeur_5 = (tableau_5[0]*128) + (tableau_5[1]*64) + (tableau_5[2]*32) + (tableau_5[3]*16) + (tableau_5[4]*8) + (tableau_5[5]*4) + (tableau_5[6]*2) + (tableau_5[7]) )
          
OLED_M_data(valeur_5);
          
valeur_6 = (tableau_6[0]*128) + (tableau_6[1]*64) + (tableau_6[2]*32) + (tableau_6[3]*16) + (tableau_6[4]*8) + (tableau_6[5]*4) + (tableau_6[6]*2) + (tableau_6[7]) )
          
OLED_M_data(valeur_6);
          
valeur_7 = (tableau_7[0]*128) + (tableau_7[1]*64) + (tableau_7[2]*32) + (tableau_7[3]*16) + (tableau_7[4]*8) + (tableau_7[5]*4) + (tableau_7[6]*2) + (tableau_7[7]) )
          
OLED_M_data(valeur_7);

      
// 8 segments suivants
         
for (i=0;i<7;i++){
              
tableau_0[i] = ( (font16x8[352+7+i])>>7) && 0x01) ;
              
tableau_1[i] = ( (font16x8[352+7+i])>>6) && 0x01) ;
              
tableau_2[i] = ( (font16x8[352+7+i])>>5) && 0x01) ;
              
tableau_3[i] = ( (font16x8[352+7+i])>>4) && 0x01) ;
              
tableau_4[i] = ( (font16x8[352+7+i])>>3) && 0x01);
              
tableau_5[i] = ( (font16x8[352+7+i])>>2) && 0x01) ;
              
tableau_6[i] = ( (font16x8[352+7+i])>>1) && 0x01) ;
              
tableau_7[i] = ( (font16x8[352++7i]) && 0x01) ;
           }
          
valeur_0 = (tableau_0[0]*128) + (tableau_0[0]*64) + (tableau_0[0]*32) + (tableau_0[0]*16) + (tableau_0[0]*8) + (tableau_0[0]*4) + (tableau_0[0]*2) + (tableau_0[0]) )
          
OLED_M_data(valeur_0);
          
valeur_1 = (tableau_1[0]*128) + (tableau_1[0]*64) + (tableau_1[0]*32) + (tableau_1[0]*16) + (tableau_1[0]*8) + (tableau_1[0]*4) + (tableau_1[0]*2) + (tableau_1[0]) )
          
OLED_M_data(valeur_1);
          
valeur_2 = (tableau_2[0]*128) + (tableau_2[0]*64) + (tableau_2[0]*32) + (tableau_2[0]*16) + (tableau_2[0]*8) + (tableau_2[0]*4) + (tableau_2[0]*2) + (tableau_2[0]) )
          
OLED_M_data(valeur_2);
          
valeur_3 = (tableau_3[0]*128) + (tableau_3[0]*64) + (tableau_3[0]*32) + (tableau_3[0]*16) + (tableau_3[0]*8) + (tableau_3[0]*4) + (tableau_3[0]*2) + (tableau_3[0]) )
          
OLED_M_data(valeur_3);
          
valeur_4 = (tableau_4[0]*128) + (tableau_4[0]*64) + (tableau_4[0]*32) + (tableau_4[0]*16) + (tableau_4[0]*8) + (tableau_4[0]*4) + (tableau_4[0]*2) + (tableau_4[0]) )
          
OLED_M_data(valeur_4);
          
valeur_5 = (tableau_5[0]*128) + (tableau_5[0]*64) + (tableau_5[0]*32) + (tableau_5[0]*16) + (tableau_5[0]*8) + (tableau_5[0]*4) + (tableau_5[0]*2) + (tableau_5[0]) )
          
OLED_M_data(valeur_5);
          
valeur_6 = (tableau_6[0]*128) + (tableau_6[0]*64) + (tableau_6[0]*32) + (tableau_6[0]*16) + (tableau_6[0]*8) + (tableau_6[0]*4) + (tableau_6[0]*2) + (tableau_6[0]) )
          
OLED_M_data(valeur_6);
          
valeur_7 = (tableau_7[0]*128) + (tableau_7[0]*64) + (tableau_7[0]*32) + (tableau_7[0]*16) + (tableau_7[0]*8) + (tableau_7[0]*4) + (tableau_7[0]*2) + (tableau_7[0]) )
          
OLED_M_data(valeur_7);
 }


Il me dit "pointer required" sur cette ligne
tableau_0[i] = ( (font16x8[352+i])>>7) && 0x01) ;
C'est en faisant des erreurs, que l'on apprend le mieux !!!

Fonctionnement des "FONT" sur écran OLED
Guest
Confirmé
Confirmé
Messages : 800
Enregistré en : mars 2017

#26 Message par Guest » lun. 16 mai 2016 17:09

cela ne vas pas de zero a quinze ?

Fonctionnement des "FONT" sur écran OLED
Claudius
Avatar de l’utilisateur
Passionné
Passionné
Messages : 262
Âge : 70
Enregistré en : septembre 2015
Contact :

#27 Message par Claudius » lun. 16 mai 2016 17:26

Bonjour,

Jérémy, si cela peut t'aider faire une recherche de ssd1306 i2c example avec notamment l'exemple complet: OLED 128x64 SSD1306 I2C PIC16F1788 driver qui, certes ne s'appuie pas sur les même fontes, mais a le mérite de ne pas partir de zéro (toujours s'inspirer et lire le code d'autrui ;-)

Fonctionnement des "FONT" sur écran OLED
Guest
Confirmé
Confirmé
Messages : 800
Enregistré en : mars 2017

#28 Message par Guest » lun. 16 mai 2016 17:39

tient voici le final

Code : Tout sélectionner

    for (k=0;k<2;k++)
    {   
        for (i=0;i<8;i++)
        {   
            for (j=0;j<8;j++)
            {
                if (tableau_Mat[j] & (1u<<i))
                {
                tableau_Res[i]=tableau_Res[i] | (1<< j);                   
                }
                else

                tableau_Res[i]=tableau_Res[i] & ~(1<< j);             // bit a zer0
               
            }   
        }
    }   

2 tableaux la matrice et le résultat. comme dab sous debug

mais contine sur ton idée toujours bon de ce gratter :lol: la tête

A+

pS reste plus a tester en grandeur nature

Fonctionnement des "FONT" sur écran OLED
Guest
Confirmé
Confirmé
Messages : 800
Enregistré en : mars 2017

#29 Message par Guest » lun. 16 mai 2016 17:45

la c'est un exemple 3 boucles imbriquées ,un test de bit et positionnent suivant résultat dans tableau_Res

Fonctionnement des "FONT" sur écran OLED
Guest
Confirmé
Confirmé
Messages : 800
Enregistré en : mars 2017

#30 Message par Guest » lun. 16 mai 2016 18:03

oups desole je ne suis pas allez jusqu'au bout sous debug
ici amah c'est bon

Code : Tout sélectionner

    for (k=0;k<2;k++)
    {   
        for (i=0;i<8;i++)
        {   
            for (j=0;j<8;j++)
            {
                if (tableau_Mat[(j+(8*k))] & (1u<<i))
                {
                tableau_Res[(i+(8*k))]=tableau_Res[(i+(8*k))] | (1<< j);                   
                }
                else

                tableau_Res[(i+(8*k))]=tableau_Res[(i+(8*k))] & ~(1<< j);             // bit a zer0
               
            }   
        }
    }   
       


la dernière passe de K n’était pas bonne mille excuses :furieux:


Retourner vers « Langage C »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 5 invités