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 l'Assembleur !

Modérateur : mazertoc

Écran OLED 128x64(Ssd1306) et Écran OLED 132x64(Ssd1106)
francois77
Passionné
Passionné
Messages : 307
Enregistré en : avril 2022

#101 Message par francois77 » sam. 4 juin 2022 11:55

Re Bonjour,

C'est possible sans problème, c'était même mon idée du départ !

Je regarderais demain lorsque j'aurais compris comment trouver le min max des tables 9 12 24 ( pas encore tous compris )

le 18 ok = c'est la ligne de reference, mais les autres valeurs c'est quoi ?

constGFXfontFreeMono9pt7bPROGMEM={(uint8_t*)FreeMono9pt7bBitmaps
(GFXglyph*)FreeMono9pt7bGlyphs 0x20
0x7E 18};

//Approx.1516bytes

C'est apres midi bricolage .....

A+

Écran OLED 128x64(Ssd1306) et Écran OLED 132x64(Ssd1106)
satinas
Expert
Expert
Messages : 1225
Enregistré en : novembre 2015

#102 Message par satinas » sam. 4 juin 2022 12:10

Je butais sur le terme "table" que vous utilisez, excel qui comporte un langage de programmation, plus une lecture en diagonale des posts ...

Les valeurs 0x20 et 0x7E sont les codes ascii du premier et du dernier caractères stockés dans la police. Il y a donc 0x7E-0x20+1 = 95 caractères stockés, le premier étant l'espace. La routine d'affichage doit vérifier que les caractères à écrire sont bien situés entre ces 2 valeurs.
Pour afficher le caractère '#' de code ascii 0x23, on fait 0x23-0x20 = 3, puis on prend l'élément d'index 3 dans le tableau FreeMono9pt7bGlyphs[] et on obtient la ligne [i]{ 7, 7, 12, 11, 2, -10 },/i]

Pour calculer le nombre d'octets occupés par un caractère, si le bitmap a pour dimension L et H, c'est (L*H+7)/8 octets. En fait le pic n'a pas besoin de ce nombre pour afficher le caractère.

Écran OLED 128x64(Ssd1306) et Écran OLED 132x64(Ssd1106)
Temps-x
Avatar de l’utilisateur
Expert
Expert
Messages : 2618
Enregistré en : juillet 2016
Localisation : Terre

#103 Message par Temps-x » sam. 4 juin 2022 18:38

Bonsoir francois77, satinas, et tout le forum,

francois77 a écrit :Source du message Temps-x : tu vas avoir du temps aujourd’hui, pas besoin d’arroser tes 100 pieds de tomates

Seulement tout les trois jour qu'il faut les arroser :-D

Voici une routine en langage de programmation RapidQ que j'ai créé pour avoir le nombre d'octet qu'il y a dans un caractère

Code : Tout sélectionner



 Bit 
= 0
      if instr
(str$((Largeur*Hauteur)/8),".") then
          Bit 
= Fix( (Largeur*Hauteur)/8)                           ' supprimer la virgule avec la function Fix
          Bit = Bit + 1
      else
          Bit = (Largeur*Hauteur)/8
      end if



Le RapidQ ressemble à visual Basic(VB), donc, tu ne devrais pas avoir de mal à décoder ses 7 lignes :wink:

A+
:roll: Les requins, c'est comme le langage ASM, c'est le sommet de la chaîne alimentaire. :wink:

Écran OLED 128x64(Ssd1306) et Écran OLED 132x64(Ssd1106)
francois77
Passionné
Passionné
Messages : 307
Enregistré en : avril 2022

#104 Message par francois77 » sam. 4 juin 2022 19:59

Bonsoir ,

fermeture du micro avant explosion ....... ca gronde trop fort

A demain

francois

Écran OLED 128x64(Ssd1306) et Écran OLED 132x64(Ssd1106)
francois77
Passionné
Passionné
Messages : 307
Enregistré en : avril 2022

#105 Message par francois77 » dim. 5 juin 2022 07:12

Bonjour,

l'orage est passé ......

Satanas , juste pour info et comprendre ma méthode de travaille sous Excel

'transfert données et mise en forme de la table au format graphique

'exemple:
constGFXfontFreeMono9pt7bPROGMEM={(uint8_t*)FreeMono9pt7bBitmaps
'feuille intermediaire (remise en forme de la font d'origine
'//0x28'(' 51 54 2 13 11 5 -10 0x5A 0xAA 0xA9 0x40 01011010101010101010100101000000

' ligne de reference 18
' matrice = feuille excel sous format partiel d'un ecran


Sub Transfert_matrice()

Pos_ligne_ecran = 30 ' (0 a 64) ecran oled
Pos_Colonne_ecran = 0 ' (0 a 128)

Pos_Excel_Ligne = 10 ' Adaptation a ma feuille Excel
Pos_Excel_Colonne = 10 ' Adaptation a ma feuille Excel

Worksheets("Matrice").Range("J6:Bd55").ClearContents 'effacement de la zone ecran (limité a 45 ligne 46 colonne

Table_E = Sheets("Matrice").Cells(4, 4).Value 'table de bit a traiter

Debut_colonne = Sheets("Matrice").Cells(3, 10).Value ' debut de la colonne
Fin_colonne = Sheets("Matrice").Cells(3, 7).Value + Debut_colonne ' fin de la colonne

Reference_ligne = Sheets("Intermediaire").Cells(1, 2).Value ' reference ligne
Debut_ligne_Matrice = Sheets("Matrice").Cells(3, 11).Value ' -xx
Debut_ligne = Pos_ligne_ecran - (Reference_ligne + Debut_ligne_Matrice) 'Position de depart de la ligne

Nbre_bit_colonne = Sheets("Matrice").Cells(3, 8).Value ' nombre de bit par colonne
nombre_bits = (Fin_colonne - Debut_colonne) * Nbre_bit_colonne ' nombre de bit a traiter

Fin_de_ligne = Debut_ligne - Nbre_bit_colonne ' nombre de ligne a traiter
Num_bit = 1 'initialisation de numero du bit a traiter

cpt_ligne = -(Reference_ligne + Debut_ligne_Matrice) + Pos_ligne_ecran + Pos_Excel_Ligne ' numero de ligne a ecrire + correction tableau excel

For cpt = 0 To Nbre_bit_colonne - 1 ' nombre de colonne a ecrire

For cpt_colonne = Debut_colonne + Pos_Excel_Colonne + Pos_Colonne_ecran To Fin_colonne + Pos_Excel_Colonne + Pos_Colonne_ecran - 1
'nombre de colonne a ecrire
bit = Mid(Table_E, Num_bit, 1) 'selection du bit
Sheets("Matrice").Cells(cpt_ligne, cpt_colonne).Value = bit 'ecriture du bit
Num_bit = Num_bit + 1 'incremententation du bit traiter

Next
cpt_ligne = cpt_ligne + 1
Next
End Sub

A partir d'un exemple Excel qui fonctionne correctement c'est assez simple de basculer en ASM
Promis, je ne remettrais pllus d'excel sur le forum .....

Voir post suivant pour les questions et reponse en suspend
Francois

Écran OLED 128x64(Ssd1306) et Écran OLED 132x64(Ssd1106)
francois77
Passionné
Passionné
Messages : 307
Enregistré en : avril 2022

#106 Message par francois77 » dim. 5 juin 2022 07:16

La suite .....


A partir de ma macro excel on peut traiter toutes les fonts sans limites de tailles mais cela va faire des tables enormes

le principe

traitement du caractere et mise en format graphique a partir d'un fichier xxx.H avec un format largeur fixe

0 1 0
1 0 0
1 0 0
1 0 0
1 0 0
1 0 0
0 1 0
0 0 1

Colonne 1 = 01111100 = 0x7c
Colonne 2 = 10000010 = 0x82
Colonne 3 = 00000001 = 0x01
Notre caractere = 0x7c 0x82 0x01 ===> si largeur = 8 0x00 0x00 0x00 0x7c 0x82 0x001 0x00 0x00
A faire sur la table complete et on a un fichier utlisable rapidement en ASM
Si la table fait plus de 8 bit on pourrait traiter en plusieurs lignes de 8 bits
Mais attention ce type de table va prendre un place importante en memoire
Exemple = 96 caractere * 8 octet = 768 octet

Pour une table de largeur variable , il faudra 2 fichiers table commande pour pointer sur la table données + table de données

Pause café avec Madame , je reviendrais apres pour compléter

Ma question du matin reformulé

Comment trouver la min et max d'une font .h
ligne de reference = ok
min max pas econre trouvé

Exemple

?
?
X
X
X
X
lignes de reference X
X
X
?
?
De façon manuel je peux determiner le min et max mais comment le faire de facon automatique
A noter que la position d'un caractere en y est pas un constante d'une font 9x une autre

Pour quoi cette question ?
Si je veux exploiter plusieurs fonts (ou morceau de fonts ) il me faut connaitre le debut et le fin de la hauteur pour pouvoir ecrire et positionner mon prochain caractere

ABCDE

ABCD

Je ne sais pas si mon message est clair, si besoin je reformulerais

A+
Francois

Écran OLED 128x64(Ssd1306) et Écran OLED 132x64(Ssd1106)
satinas
Expert
Expert
Messages : 1225
Enregistré en : novembre 2015

#107 Message par satinas » dim. 5 juin 2022 10:12

Bonjour François
C'est le genre de post que j'ai du mal à lire, même en essayant de me documenter sur Excel, trop tard.
Là tu fais de la programmation classique, donc tout est faisable à priori. Un pic affichant des pixels, et un PC Excel calculant/affichant des cellules, c'est semblable. Si quelqu'un d'autre a une idée, ou alors faut attendre quelques jours que je me mette à Excel, il n'est jamais trop tard :)

Le min et le max de quoi exactement, hauteur totale, hauteurs parties haute et basse ? Donne un exemple du calcul manuel que tu fais pour déterminer ce min/max.
Pour moi la sortie en format ASM ne devrait entraîner que des traductions de lignes format C vers le format ASM sans toucher aux octets data, tu vois les choses autrement ?

PS ça y est, j'ai compris tu tiens compte de l'écran oled qui affiche par segments verticaux de 8 pixels, c'est pas le cas des autres écrans, attention, en plus l'écriture sur cet écran nécessite un buffer mémoire, donc on peut s'affranchir de cette particularité, et surtout écrire à n'importe quelle position en y.
Si l'on s'en tient aux 16F876/7, ok, oublie le dernier paragraphe, mais bon, et les 16F18856/16F18877 ? :)

Écran OLED 128x64(Ssd1306) et Écran OLED 132x64(Ssd1106)
francois77
Passionné
Passionné
Messages : 307
Enregistré en : avril 2022

#108 Message par francois77 » dim. 5 juin 2022 11:51

Mr Satinas ,

C'est le genre de post que j'ai du mal à lire, même en essayant de me documenter sur Excel, trop tard.
Là tu fais de la programmation classique, donc tout est faisable à priori. Un pic affichant des pixels, et un PC Excel calculant/affichant des cellules, c'est semblable. Si quelqu'un d'autre a une idée, ou alors faut attendre quelques jours que je me mette à Excel, il n'est jamais trop tard :)

==> Ce n'était pas pour te faire un cours d'excel, c'était uniquement pour te montrer a quoi cela ressemble , et de par la te montrer que cela reste de la programmation
------------------------

Le min et le max de quoi exactement, hauteur totale, hauteurs parties haute et basse ? Donne un exemple du calcul manuel que tu fais pour déterminer ce min/max.

----> hauteur parties hautes et basses de la police compléte

excemple
----------------------------------------------------------------------------------------------partie haute
?
? X
? X
X
XX X
----X----------------------X -------------------------------------------------------------
X
?
--------------------------------------------------------------------------------------------------- parie basse
cela me donnera :

le pixel haut max de la police
le pixel bas min de la police et le positionnement a + x pour une police suivante


Pour moi la sortie en format ASM ne devrait entraîner que des traductions de lignes format C vers le format ASM sans toucher aux octets data, tu vois les choses autrement ?

----> ok avec toi on ne touche pas aux valeurs des datas si on veux gerer l'ensemble des polices ( contraire a mon idée de départ)
ce qui entraine d''avoir a minima 2 tables



PS ça y est, j'ai compris tu tiens compte de l'écran oled qui affiche par segments verticaux de 8 pixels, c'est pas le cas des autres écrans, attention, en plus l'écriture sur cet écran nécessite un buffer mémoire, donc on peut s'affranchir de cette particularité, et surtout écrire à n'importe quelle position en y.
Si l'on s'en tient aux 16F876/7, ok, oublie le dernier paragraphe, mais bon, et les 16F18856/16F18877 ? :)


----> Non je parle bien d'ecriture en pixel avec gestion x y
principe
je connais le format du caractere
effacement de cette zone
ecriture caractere
reste a savoir le temp de cycle de cette operation ! ou alors je travaille par 8 pixels mais dans ce ca la il faut tripatoullier les données !!

Pas toujours simple de s''expliquer par message ...

Fermeture du micro attendu ...... l'orage approche

A+
FRancois

Écran OLED 128x64(Ssd1306) et Écran OLED 132x64(Ssd1106)
satinas
Expert
Expert
Messages : 1225
Enregistré en : novembre 2015

#109 Message par satinas » dim. 5 juin 2022 12:47

Je suppose qu'avec Excel tu charges le contenu du tableau GFXglyph FreeMono9pt7bGlyphs[]
Format { index, L, H, 11, Offset_x, offset_y }

la hauteur totale max Hmax = MAX(H) pour les 95 caractères
le hauteur partie haute max UpMax = -MIN(Offset_y)
la hauteur partie basse max LowMax = MAX(H+Offset_y)
Calcul valable si au moins un caractère empiète sur les parties hautes et basses.

X = position d'écriture en x, s'incrémente de 11.
Y = position d'écriture en y, c'est la ligne de base/référence, s'incrémente de la valeur de l'interligne.

Pour effacer un texte à l'écran, tu peux le réécrire avec la couleur de fond, surtout en cas de polices proportionnelles.
Ou effacer en X, Y-UpMax le rectangle de largeur N*11 et de hauteur UpMax+LowMax
Si on est pas aligné en y sur des multiples de 8, tout se complique effectivement avec cet écran.

Écran OLED 128x64(Ssd1306) et Écran OLED 132x64(Ssd1106)
Temps-x
Avatar de l’utilisateur
Expert
Expert
Messages : 2618
Enregistré en : juillet 2016
Localisation : Terre

#110 Message par Temps-x » dim. 5 juin 2022 13:42

Bonjour satinas, francois77, et tout le forum,

Voici le programme je n'ai pas le temps, j'en parlerai vers les :sifflotte: 21 Heures.
encore plein de chose a voir, c'est loin d'être fini.


==> A+
:roll: Les requins, c'est comme le langage ASM, c'est le sommet de la chaîne alimentaire. :wink:


Retourner vers « Langage ASM »

Qui est en ligne

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