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 :

#11 Message par Jérémy » lun. 16 mai 2016 13:40

Ok programme de test fini !

Avant "d’automatiser" la chose, il faudrait déjà réussir a ecrire correctement . Partons d'un exemple simple le "4" .

Il fait 16x8 parfait :

Code : Tout sélectionner


    
# @352 '4' (8 pixels wide)
    0x00, #
    0x02, #       O
    0x06, #      OO
    0x0A, #     O O
    0x12, #    O  O
    0x12, #    O  O
    0x22, #   O   O
    0x42, #  O    O
    0x82, # O     O
    0xFF, # OOOOOOOO
    0x02, #       O
    0x02, #       O
    0x02, #       O
    0x00, #
    0x00, #
    0x00, #
 


On voit trés bien que le premier chiffre hexa correpsond à la ligne tout en haut du chiffre. donc = 0x00 car aucun pixel d'allumé.
La deuxieme ligne il allume l'avant dernier bit . soit le 2, en binaire 0b00000010 et en hexa 0x02
et ainsi de suite jusqu'en bas du chiffre . Ils empilent donc les lignes du haut vers le bas .

Mais le SSD1306 ne sait pas faire cela. lui les données qu'on lui envoie sont en colonne . Pour faire le même chiffre il faudrait obtenir ceci :

Code : Tout sélectionner


   0x00
    0x80
     0x40
      0x30
       0x08      
        0x04
         0xFE
           0x00
  0x00          
   0x03
    0x02
     0x02
      0x02
       0x02
        0x1F
         0x02  
    
#
#       O
#      OO
#     O O
#    O  O
#    O  O
#   O   O
#  O    O
# O     O
10# OOOOOOOO
11#       O
12#       O
13#       O
14#
15#
16#




Il faut donc transformer les valeurs du dessus pour obtenir celle-ci .

Sans titre.jpg
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
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 :

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

en lisant mon petit graphique je comprends .

Que chaque bit de la valeur reçue ( correspondant à la premier ligne) doit aller dans le LSB de chaque nouvelle valeur . 0b 0000000x
Chaque bit de la deuxième ligne doit aller dans 0b 000000x0 de la nouvelle valeur


c'est bon pour les tableaux?

:oops: Non je suis regarde ce qu'est un tableau à deux dimensions !

et on a extrait le premier octet :wink: tu suis sinon stop

oops Stop ! :-D
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 :

#13 Message par Jérémy » lun. 16 mai 2016 14:29

Nous devons extraire chaque bit du premier octet reçue pour les mettre dans un tableau , c'est ca ?

Je pense que mon probléme est de savoir comment extraire chaque bit d'un octet pour le placer dans une case d'un tableau
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

#14 Message par Guest » lun. 16 mai 2016 14:49

je suis retourne a mes origines ASM voici le code

Code : Tout sélectionner

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

Bou1       BCF       STATUS,C
       RLCF    POSTINC0,F
       RLCF    INDF1,F
       DECFSZ  i
       BRA       Bou1
       MOVF    POSTINC1,W
       BRA       Bou
       DECFSZ  j
       BRA       Bou


deja plus de tableau a 2D
2 tableaux 1 matrice pointeur FSR0 l'autre resultat pointeur FSR1

2 boucles la J 16 passes la i 8 passes imbriquées.

explications:

on charge J
_____dans J
on charge 1 de 8
et on initialise le pointeur matrice

_____dans i
on récupère la donnée FSR0 pointeur0+1
on fait une rotation a gauche avec CARRY
on fait une rotation a gauche de carry avec pointeu1
fin de I
on boucle sur dans ______i
oui
pointeur1+1
fin de J non retourne dans _____J
oui fin


le problème en C c'est que tu ne peut pas faire des rotation avec CARRY
tu peux faire des tests sur des bits et en fonction de ces tests, tu positionnes le bit a 1 ou zéro de pointeur1(resultat)

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

#15 Message par Guest » lun. 16 mai 2016 14:51

Jérémy a écrit :Nous devons extraire chaque bit du premier octet reçue pour les mettre dans un tableau , c'est ca ?

Je pense que mon probléme est de savoir comment extraire chaque bit d'un octet pour le placer dans une case d'un tableau


oui c'est le problème en C, tu n'as par de rotation avec la retenue ,donc il faut passer par des test sur bit et en fonction du test tu positionnes le bit adéquate du résultat a zero ou 1

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

#16 Message par Guest » lun. 16 mai 2016 14:53

premier boulot
faire une bout de code ou tu fais des tests SUR BIT et fonction tu positionnes le bit x a 1 ou 0 du resultat dans mon code c'est :

Code : Tout sélectionner

Bou1       BCF       STATUS,C
       RLCF    POSTINC0,F
       RLCF    INDF1,F


le reste :wink: gestion de pointeur, et boucle imbriquées

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

#17 Message par Guest » lun. 16 mai 2016 15:01

tient voila par exemple un test sur bit

Code : Tout sélectionner

        res=res+1;
        if (ClavCol & (1u<<5))

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 :

#18 Message par Jérémy » lun. 16 mai 2016 15:08

Oui comme je disais je pense uqe c'est prématuré pour moi de faire cela .

je ne sais pas ce qu'est un CARRY , je m'embrouille encore avec les pointeurs , alors mélangez tous ca et les imbriqués ..... je pense pas .

Moi je pensais faire 8 tableaux correspondant à mes colonnes .
A chaque valeur reçue( valeur en ligne) , je prends le premier bit et je le stock dans mon premier tableau a la première place, puis je prends le deuxième bit et je le stock dans mon deuxième tableau a la première place aussi , puis mon troisième bit à la première place de mon troisième tableau etccc .

La deuxième valeur reçue ( correspondant a la deuxième ligne en partant du haut), est décortiquée et mise dans la deuxième case de chacun de mes tableaux ...

Et ainsi de suite . jusqu'a reconstitué les 8 valeurs dans les 8 tableaux

Maintenant je ne sais pas comment extraire un bit d'un octet pou le placer dans un tableau
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 :

#19 Message par Jérémy » lun. 16 mai 2016 15:54

J'ai pensé à un truc dans ce genre .

352 c'est la valeur ou commence le chiffre "4" .

Code : Tout sélectionner

const code char font16x8[] =
{
-
-
-
    
// @352 '4' (8 pixels wide)
    
0x00//
    
0x02//       O
    
0x06//      OO
    
0x0A//     O O
    
0x12//    O  O
    
0x12//    O  O
    
0x22//   O   O
    
0x42//  O    O
    
0x82// O     O
    
0xFF// OOOOOOOO
    
0x02//       O
    
0x02//       O
    
0x02//       O
    
0x00//
    
0x00//
    
0x00//
    
-
    -
    -
 


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) ;
         }
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

#20 Message par Guest » lun. 16 mai 2016 15:58

moi je suis resté tient tu as tout pour finir

ici

Code : Tout sélectionner

        NB= NB & ~(1<< i);             // bit en fonction de i a zero
        NB=NB | (1<< i);             // bit en fonction de i a 1           


Retourner vers « Langage C »

Qui est en ligne

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