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 : 2727
Âge : 45
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

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

Ok je test ca tout de suite !

j'avance de mon coté, le 4 est presque la ! encore un petit bug à corriger . Mais après il reste l'optimisation !


C'est mieux , on obtient une barre en diagonaledu "4" celle qui part en bas à gauche et qui monte au sommet à droite du "4". Mais cette droite est parfaitement droite , alors qu'il devrait y avoir une petite bosse au milieu !

voila le code en question :

Code : Tout sélectionner

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

     
unsigned int valeur,j,i;
     
unsigned char tableau[130];

     
unsigned int valeur_0valeur_1valeur_2valeur_3valeur_4valeur_5valeur_6valeur_7 ;
     
unsigned char tableau_0[9], tableau_1[9], tableau_2[9], tableau_3[9], tableau_4[9], tableau_5[9], tableau_6[9], tableau_7[9] ;

     
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(4);                  // Colonne MAximum;

     
j=i=0;

     for (
i=0;i<=7;i++){
              
tableau_0[i] = ( font16x8[352+i] & 0b10000000) ;
              
tableau_1[i] = ( font16x8[352+i] & 0b01000000) ;
              
tableau_2[i] = ( font16x8[352+i] & 0b00100000) ;
              
tableau_3[i] = ( font16x8[352+i] & 0b00010000) ;
              
tableau_4[i] = ( font16x8[352+i] & 0b00001000) ;
              
tableau_5[i] = ( font16x8[352+i] & 0b00000100) ;
              
tableau_6[i] = ( font16x8[352+i] & 0b00000010) ;
              
tableau_7[i] = ( font16x8[352+i] & 0b00000001) ;
           }
          
valeur_0 = ( (tableau_0[0])|(tableau_0[1])|(tableau_0[2])|(tableau_0[3])|(tableau_0[4])|(tableau_0[5])|(tableau_0[6])|(tableau_0[7]) );
          
OLED_M_data(valeur_0);
          
valeur_1 = ( (tableau_1[0])|(tableau_1[1])|(tableau_1[2])|(tableau_1[3])|(tableau_1[4])|(tableau_1[5])|(tableau_1[6])|(tableau_1[7]) );
          
OLED_M_data(valeur_1);
          
valeur_2 = ( (tableau_2[0])|(tableau_2[1])|(tableau_2[2])|(tableau_2[3])|(tableau_2[4])|(tableau_2[5])|(tableau_2[6])|(tableau_2[7]) );
          
OLED_M_data(valeur_2);
          
valeur_3 = ( (tableau_3[0])|(tableau_3[1])|(tableau_3[2])|(tableau_3[3])|(tableau_3[4])|(tableau_3[5])|(tableau_3[6])|(tableau_3[7]) );
          
OLED_M_data(valeur_3);
          
valeur_4 = ( (tableau_4[0])|(tableau_4[1])|(tableau_4[2])|(tableau_4[3])|(tableau_4[4])|(tableau_4[5])|(tableau_4[6])|(tableau_4[7]) );
          
OLED_M_data(valeur_4);
          
valeur_5 = ( (tableau_5[0])|(tableau_5[1])|(tableau_5[2])|(tableau_5[3])|(tableau_5[4])|(tableau_5[5])|(tableau_5[6])|(tableau_5[7]) );
          
OLED_M_data(valeur_5);
          
valeur_6 = ( (tableau_6[0])|(tableau_6[1])|(tableau_6[2])|(tableau_6[3])|(tableau_6[4])|(tableau_6[5])|(tableau_6[6])|(tableau_6[7]) );
          
OLED_M_data(valeur_6);
          
valeur_7 = ( (tableau_7[0])|(tableau_7[1])|(tableau_7[2])|(tableau_7[3])|(tableau_7[4])|(tableau_7[5])|(tableau_7[6])|(tableau_7[7]) );
          
OLED_M_data(valeur_7);
 }
 
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 : 2727
Âge : 45
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#52 Message par Jérémy » lun. 16 mai 2016 22:26

Je l'ai !!!!!!

Je suis super content et fier !!! merci de m'avoir poussé, car je crois que c'est le truc ou j'ai le plus écrit et dessiner pour comprendre !

reste plus qu'a optimiser ! je fais quelques essais et je post

Voila .

Ca fonctionne impeccable

Code : Tout sélectionner

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

     unsigned int valeur,j,i;
     unsigned char tableau[255];

     zone_ecran(50,57,1,3);

     j=i=0;

     for (j=0;j<=15;j++){               // On extrait chaque bit pour les enregistrer dans un tableau de 128 caracters sur une ligne 16 x 8 = 128 .
         for (i=0;i<=7;i++){
                  tableau[(i+(j*8))] = ( ((font16x8[(432+j)])>>(7-i)) & (0x01) ) ;   // Pour extraire mon bit, je fais un décalage a droite pour le mettre en LSB
          }                                                                          // Je fais un masque pour cacher le reste et ne retenir que le LSB
      }                                                                              // Que je stock dans le tableau les uns à la suite des autres

// J'ai donc un tableau de 128 caractéres ( qui sont des "0" ou des "1") à la suite
// Je fais une premier salve de recuperation pour faire mon segments de 8 bits, une fois fini je l'affiche, et je passe au segments suivant
// Je fais cela 8 fois correspond à la largeur de mon caractere sur la premièer page
     for (i=0;i<=7;i++){
         valeur = ( (((tableau[i])*1)) + (((tableau[(i+8)])*2)) + (((tableau[(i+16)])*4)) + (((tableau[(i+24)])*8)) + (((tableau[(i+32)])*16)) + (((tableau[(i+40)])*32)) + (((tableau[(i+48)])*64)) + ((tableau[(i+56)])*128) );
         OLED_M_data(valeur);
      }

// ici je réintere l'opération mais sur la deuxieme page, en continuant dans l'ordre du tableau
     for (i=0;i<=7;i++){
         valeur = ( (((tableau[i+64])*1)) + (((tableau[(i+72)])*2)) + (((tableau[(i+80)])*4)) + (((tableau[(i+88)])*8)) + (((tableau[(i+96)])*16)) + (((tableau[(i+104)])*32)) + (((tableau[(i+112)])*64)) + ((tableau[(i+120)])*128) );
         OLED_M_data(valeur);
      }




@Maï :
En remplaçant :

Code : Tout sélectionner

valeur = ( (((tableau[i])*1)) + (((tableau[(i+8)])*2)) + (((tableau[(i+16)])*4)) + (((tableau[(i+24)])*8)) + (((tableau[(i+32)])*16)) + (((tableau[(i+40)])*32)) + (((tableau[(i+48)])*64)) + ((tableau[(i+56)])*128) );
        

par

Code : Tout sélectionner

valeur = ( (tableau[i])|(tableau[(i+8)])|(tableau[(i+16)])|(tableau[(i+24)])|(tableau[(i+32)])|(tableau[(i+40)])|(tableau[(i+48)])|(tableau[(i+56)]) );


Ca ne fonctionne pas ! ce doit être ça qui ne fonctionne pas dans ton code !
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 : 2727
Âge : 45
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#53 Message par Jérémy » jeu. 19 mai 2016 07:31

Bonjour à tous,

Hier j'ai pus un peu travaillé pour l'amélioration de la focntion de conversion .

Je pense que je peux encore faire mieux ! les trois boucles imbriquées m'inquiquine ! je visualise 1 seule boucle, mais il me faudra plus de variable .
j'ai pris la maladie du Maï sur l'optimisation humour!! !

A suivre

Code : Tout sélectionner

     for (k=0;k<=1;k++){
          for (
i=0;i<=7;i++){
               for (
j=0;j<=7;j++){
                    
valeur +=  (  (((font16x8[(lettre+(k*8)+j)])>>(7-i)) & (0x01))  << j  )  ;
                }
                
OLED_M_data(valeur);
                
valeur ;
           }
      } 
C'est en faisant des erreurs, que l'on apprend le mieux !!!

Fonctionnement des "FONT" sur écran OLED
jacobi
Membre
Membre
Messages : 2
Enregistré en : mai 2016

#54 Message par jacobi » jeu. 19 mai 2016 15:23

Il existe un super programme pour faire ses fonts (et autres) : The Dot Factory

http://www.eran.io/the-dot-factory-an-l ... generator/

Fonctionnement des "FONT" sur écran OLED
sylvain54
Avatar de l’utilisateur
Amateur
Amateur
Messages : 194
Âge : 51
Enregistré en : août 2015
Localisation : Dans l'est de la France

#55 Message par sylvain54 » jeu. 19 mai 2016 16:07

Salut,

Effectivement, ça à l'air pas mal du tout ce petit programme.
Je vais le tester rapidement pour changer les ''Font" pour mon TFT ST7735.

Merci !

Jeremy, tu nous diras si ça marche avec l'oled également ? Du coup, te voilà au chomage :langue:

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

#56 Message par Jérémy » jeu. 19 mai 2016 16:15

Hello ,

Merci jacobi pour ce lien ( que je connaissais) . je pense que je vais le mettre en lien utile du coup !

@Sylvain : Bien au contraire ! la FONT que l'on trouve en #1 est faite avec ce logiciel justement! Mais elle n'est pas transposable avec mon OLED et le driver SSD1306. Il faut donc bien la librairie que je suis en train d'essayé de peaufiner pour pouvoir utiliser les font de ce logiciel !

Je vais regarder aussi ce lmogiciel pour voir si il peut sortir une DONT "compatible" avec le SSD1306 .
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

#57 Message par Guest » jeu. 19 mai 2016 17:31

Bonjour
c'est bien jeremy.Pour ce qui est de l'optimisation sur la manip des bits, rien ne vaut l'ASM .Tu fera bientôt des SPG en ASM que tu incorporeras dans ton projet j'en suis sur :wink:

Voici ce que ca donne en ASM
Le code:

Code : Tout sélectionner

       LFSR    FSR1,TableauB
      
       MOVLW   0X08
       MOVWF   j
      
Bou       LFSR    FSR0,TableauA
      
       MOVLW   0x08
       MOVWF   i

Bou1       BCF       STATUS,C
       RRCF    POSTINC0,F
       RRCF    INDF1,F
       DECFSZ  i
       BRA       Bou1
       MOVF    POSTINC1,F
       DECFSZ  j
       BRA       Bou
      
       MOVLW   0X08
       MOVWF   j
      
Bou2       LFSR    FSR0,TableauA+8
      
       MOVLW   0x08
       MOVWF   i

Bou3       BCF       STATUS,C
       RRCF    POSTINC0,F
       RRCF    INDF1,F
       DECFSZ  i
       BRA       Bou3
       MOVF    POSTINC1,F
       DECFSZ  j
       BRA       Bou2


Le résultat:
Capture .png

Capture1.png

La conversion du chiffre QUATRE se fait en 884 cycles pour 58 octets, on peut mieux faire :wink: me suis pas trop foule :lol: le résultat est a l'adresse 0x1B 0x0,0xFE etc..
encore :bravo: EN C ton approche en C est meilleur que la mienne, j'ai voulu faire une copie de asm_>le C, pas super. Encore :bravo:

A+
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.

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

#58 Message par Jérémy » jeu. 19 mai 2016 20:24

Bon j'ai essayé mais je trouve pas !

Je pense que c'est déjà pas mal ; Merci Maï pour le compliment !

je dois maintenant comprendre et essayer d'utiliser le fichier descriptor que l'on voit en #1 !
En plus automatiser l'écriture un peu comme sur un LCD
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 : 2727
Âge : 45
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#59 Message par Jérémy » jeu. 19 mai 2016 22:12

Quelqu'un à une idée comment utiliser le tableau description dans le code en #1.

Je vois bien qu'il s'agit de la largeur de la lettre et de sa position , mais je n’arrive pas à saisir comment m'en servir pour afficher une phrase par exemple !
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 : 2727
Âge : 45
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#60 Message par Jérémy » ven. 20 mai 2016 19:45

Personne n'a d'idée sur le fonctionnement de cette partie du code générée ?

Code : Tout sélectionner

 int descriptors[] =
{
    (
1,0),// !
    
(4,16),// "
    
(9,32),// //
    
(7,64),// $
    
(12,80),// %
    
(9,112),// & 


Ce sont les parenthèses qui me chiffonne ! comment récupérer ces deux valeurs précieuses ? pour enchainer une phrase ou un mot ?
C'est en faisant des erreurs, que l'on apprend le mieux !!!


Retourner vers « Langage C »

Qui est en ligne

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