Compte à rebours avec écran OLED en I2C

dje8269

Senior Member
Bonjour à tous ,

Mon nouveau projet , créer un compte a rebours décomptant de 59minute 59s dans le format mm:ss .
La réglage du temps pourras s'effectuer grâce à un encodeur incrémental optique avec bouton poussoir .
L'écran d'affichage du temps sera un OLED de 128x32 commandé par bus I2C : lien DS de l'afficheur et lien du SSD1306 driver


Un lien sur le forum anglais qui parle de l'écran : lien

Voila toutes les infos sont réunies sur la première page ainsi on galère moins pour les retrouver .
 
Last edited:

dje8269

Senior Member
Alors voila le premier bout de code .

J'ai essayé de comprendre le fonctionnement des modes mais sans succès; mon inexpérience dans ce domaine et mon anglais moisi, me rende la tache que plus ardus .

Pour essayé de vous dégrossir un peu le tableau , afin de m'apporter votre aide voici le code qui allume un pixel ou 4 coins de l'écran ( les pixels les plus extrêmes).
un chiffre 0xFF correspond à un barre verticale de 8 pixels . chaque bit allume un pixel . ainsi on obtiens le tableau qui couvre la totalité de l'écran.

En bleu le coin en haut à gauche
En vert le coin en haut à droite
En jaune le coin en bas à gauche
En violet le coin en bas à droite

Code:
#PICAXE 20M2
setfreq M32
dirsC=%11111101                ;make C.1 input(C.1 is decay mode)
outpinsC=%00001000        ;disable the stepper driver and stay here


hi2csetup i2cmaster,%01111000,i2cfast_32,i2cbyte
pause 1000

hi2cout 0x80,(0xAE,0x00,0x00,0xB0,0x20,0x00,0xD5,0x80,0xA8,0x1F,0xD3,0x00,0x8D, _
0x14,0xA1,0x00,0xC8,0xDA,0x02,0x81,0xCF,0xD9,0xF1,0xDB,0x30,0xA4,0xA6,0xAF)
#rem
hi2cout 0x80,(0xAE)         ;turn off display(RESET=OFF)
hi2cout 0x80,(0x00,0x00)    ;low column nibble(RESET=0),high column nibble(RESET=0)
hi2cout 0x80,(0xB0)         ;start page address(RESET=0)
hi2cout 0x80,(0x20,0x00)    ;memory address mode(RESET=02 [page])
hi2cout 0x80,(0xD5,0x80)    ;oscillator frequency and divider(RESET=80)00
hi2cout 0x80,(0xA8,0x1F)    ;mux ratio(RESET=3F [64 lines])
hi2cout 0x80,(0xD3,0x00)    ;display offset,COM vertical shift(RESET=0)
hi2cout 0x80,(0x8D,0x14)    ;enable charge pump(RESET=10 [OFF])
hi2cout 0x80,(0xA1,0x00)    ;segment remap(RESET=SEG0, COL0) 00 mirror image
hi2cout 0x80,(0xC8)         ;COM output scan(RESET=C0, C8 flips display)
hi2cout 0x80,(0xDA,0x02)    ;COM pins hardware config(RESET=12[alternate])
hi2cout 0x80,(0x81,0xCF)    ;contrast CF(RESET=7F)
hi2cout 0x80,(0xD9,0xF1)    ;pre-charge period F1(RESET=22)
hi2cout 0x80,(0xDB,0x30)    ;Vcom deselect(RESET=20)
hi2cout 0x80,(0xA4)         ;turn all on ignore RAM A5/RAM A4(RESET=A4)
hi2cout 0x80,(0xA6)         ;normal display A6/inverted A7(RESET=A6)
hi2cout 0x80,(0xAF)         ;turn on display
#endrem
pause 1000

do
hi2cout 0x40,( _
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, [COLOR="#008000"]0x01[/COLOR], _
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, _
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, _
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, _
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, _
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, _
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, _
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, _
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, _
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, _
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, _
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, _
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, _
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, _
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, _
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, _
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, _
[COLOR="#FFD700"]0x80[/COLOR], 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, _
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, _
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, _
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, _
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, _
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, _
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, _
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, [COLOR="#EE82EE"]0x80[/COLOR], _
[COLOR="#0000FF"]0x01[/COLOR], 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, _
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, _
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, _
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, _
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, _
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, _
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00)

loop
Avec ce code on s'aprecoit donc que le tableau ne commence pas comme on voudrais le croire . je pensais que le premier chiffre correspondrais au coin en haut a gauche et ben non !!
 
Last edited:

BESQUEUT

Senior Member
J'ai essayé de comprendre le fonctionnement des modes mais sans succès;
Avec ce code on s'aprecoit donc que le tableau ne commence pas comme on voudrais le croire . je pensais que le premier chiffre correspondrais au coin en haut a gauche et ben non !!
Attention : le code situé entre #rem et #endrem n'est que du commentaire. Avez-vous changé le Memory Adress Mode au bon endroit, c'est à dire là :

hi2cout 0x80,(0xAE,0x00,0x00,0xB0,0x20,0x01,0xD5,0x80,0xA8,0x1F,0xD3,0x00,0x8D, _
0x14,0xA1,0x00,0xC8,0xDA,0x02,0x81,0xCF,0xD9,0xF1,0xDB,0x30,0xA4,0xA6,0xAF)



Ou alors, commentez cette ligne, et supprimez les #rem et #endrem pour les tests...

Je pense qu'en mode 01=Vertical Adressing Mode, il faut aussi envoyer une commande 22 pour limiter la hauteur à 4 pages de 8 pixels (numérotées de 0 à 3) car par défaut il y a 8 pages (numérotées de 0 à 7).

Et tant qu'on y est, envoyez d'abord une commande 21 pour spécifier qu'on va de la colonne N°0 à la colonne N°127. Normalement, c'est par défaut après un RESET, mais sait-on jamais. De plus, c'est sans doute la bonne méthode pour dessiner des chiffres à différents endroits.

La commande
hi2cout 0x80,(0xC8) ;COM output scan(RESET=C0, C8 flips display)
retourne l'affichage, ce qui ne simplifie pas la compréhension...
Ce serait peut-être plus simple en mettant C0 à la place de C8.

Notez également qu'il y a plein de commandes dont on pourrait se passer puisque ce sont les valeurs par défaut après un RESET.

Pour la liste des commandes, voir en particulier la table 3
Addressing Setting Command Table
 
Last edited:

dje8269

Senior Member
Bonjour,

Pour la liste des commandes, voir en particulier la table 3
Addressing Setting Command Table
Vous mettez le doigt la ou ca fais mal ! .Je m'étais dis de laisser passer la nuit pour comprendre, car c'est effectivement ici ou on trouve le fonctionnement des différentes config . Mais je ne vois pas comment fonctionne l'identification de celle-ci .

Je pense que ma compréhension des µc en général a encore de grosses lacunes ;

prenons un exemple presque simple, disons, la première ligne de la table 3

Code:
D/C#   Hex      D7 D6 D5 D4 D3 D2 D1 D0                Command                                Description

 0   00~0F     0  0   0  0  X3 X2 X1 X0            Set Lower Column                   Set the lower nibble of the column start address
                                               Start Address for                     register for Page Addressing Mode using X[3:0]
                                               Page Addressing                      as data bits. The initial display line register is
                                               Mode                                      reset to 0000b after RESET.
Dans la partie configuration du programme on retrouve ces lignes ici :

Code:
hi2cout 0x80,(0xAE,[COLOR="#FF0000"]0x00,0x00[/COLOR],0xB0,0x20,0x00,0xD5,0x80,0xA8,0x1F,0xD3,0x00,0x8D, _
0x14,0xA1,0x00,0xC8,0xDA,0x02,0x81,0xCF,0xD9,0xF1,0xDB,0x30,0xA4,0xA6,0xAF)
Pourquoi en deuxième position ? comment détermine t on la deuxième position . Car en écrivant hi2cout , en déclare envoyé des données sur le bus i2c , 0x80 donne l'adresse a laquelle on envoie ces données , et ensuite les données entre parenthèses se place dans des variables dans un certains ordre . Je n'ai pas réussis a trouver ces infos, et/ou a les comprendre.

Attention : le code situé entre #rem et #endrem n'est que du commentaire. Avez-vous changé le Memory Adress Mode au bon endroit
Oui oui aucun soucis , je l'ai bien changé au bon endroit

Ou alors, commentez cette ligne, et supprimez les #rem et #endrem pour les tests...
J'ai essayé effectivement , car c'est beaucoup plus clair avec les commentaires , et ca ne fonctionne plus du tout apres changement !! bizarre

Et tant qu'on y est, envoyez d'abord une commande 21
??? comment envoyé une commande 21 . la je bloque aussi sur la compréhension , vous devez me prendre vraiment pour âne, a force que je comprenne rien
 
Last edited:

BESQUEUT

Senior Member
Il faut reconnaitre que ce n'est pas hyper clair, mais en fait, il y a tout...

D/C# Hex D7 D6 D5 D4 D3 D2 D1 D0 Command
0 00~0F 0 0 0 0 X3 X2 X1 X0 Set Lower Column Start Address for Page Addressing Mode

On peut envoyer les commandes dans n'importe quel ordre, mais attention, il a quand même un ordre général à respecter :
- éteindre l'affichage
- régler le mode d'adressage,
- régler les adresses limites,
- attendre un peu (en fait le Picaxe est suffisement lent pour que ce ne soit pas vraiment nécessaire)
- rallumer l'affichage.

Chaque colonne correspond à un bit.
Voyons ça en détails :
D/C#=0 ' C=commande D=Data (C'est une commande ; quelle surprise...)
Hex=00~0F ' Les valeurs possibles peuvent aller de 00 à 0F
' Donc en clair le caractère de gauche est toujours zéro, et celui de droite peut aller de 0 à 15 en décimal

D7=0
D6=0
D5=0
D4=0 ' On confirme que les 4 premiers bits valent zéro...

D3=X3
D2=X2
D1=X1
D0=X0 ' Les 4 bits de droite constituent la valeur X

Description=
Set the lower nibble of the column start address register for Page Addressing Mode using X[3:0] as data bits.
Donne les (4) bits de poids faible du registre de colonne de départ en mode Page.
Donc il y a une autre commande pour les bits de poids fort...

The initial display line register is reset to 0000b after RESET
Après un RESET, ça vaut zéro (on est bien contents...)

Note
(1) This command is only for page addressing mode
A ben zine : en fait on n'en a rien à faire puisque on préfère le Vertical Adressing Mode...



L'auteur a en fait regroupé deux commandes différentes (et en plus il s'est gouré!) :

D/C# Hex D7 D6 D5 D4 D3 D2 D1 D0 Command
0 10~1F 0 0 0 1 X3 X2 X1 X0 Set Higher Column Start Address for Page Addressing Mode

Hex=10~1F ' Les valeurs possibles peuvent aller de 10 à 1F
' Donc en clair le caractère de gauche est toujours un et celui de droite peut aller de 0 à 15 en décimal

En écrivant 2 fois 0x00, en fait il envoie deux fois la même commande.
En principe, ça ne sert à rien à cause du mode d'adressage choisi, mais sait-on jamais...

Il faudrait envoyer 0x00, 0x10
 
Last edited:

dje8269

Senior Member
Alors ce matin allumage de la platine d'essai ; l'ecran affiche plein de point de partout !!!! je débranche je rebranche pareil .!!!
Je décide de faire un RST de l'ecran plus reprogrammation , ecran vide .... je débranche et rebranche , mes 4 pixels s'allument enfin mais pas au 4 coins de l'ecran comme hier soir !!!

L'initialisation me parait aléatoire ..

Voici une photo . apres avoir inversé comme tu me l'as conseillé :
Ce serait peut-être plus simple en mettant C0 à la place de C8.
P1030110.JPG
 

dje8269

Senior Member
Bon après re-essai d'enlever les rem #endrem , rien ne s'allume . Quand j'y pense , a chaque fois on reecrit les valeurs au même endroit ( les unes sur les autres en fait on écrase) ; non ? c'est peut etre pour ca qu'il faut les mettrent a la suite)

Je vais essayer de remettre mes points aux 4 coins
 

BESQUEUT

Senior Member
Passons à la commande "20" :
D/C# Hex D7 D6 D5 D4 D3 D2 D1 D0 Command
0 20 0 0 1 0 0 0 0 0
0 A[1:0] * * * * * * A1 A0

Cette commande nécessite 2 octets. Le premier est toujours "20"
Les 6 premiers bits du deuxième octet ne sont pas utilisés.
Les 2 derniers bits constituent la valeur A (qui peut donc aller de 0 à 3 en décimal)
A[1:0] = 00b=0d=0x00 , Horizontal Addressing Mode
A[1:0] = 01b=1d=0x01 , Vertical Addressing Mode
A[1:0] = 10b=2d=0x02 , Page Addressing Mode (RESET)
A[1:0] = 11b=3d=0x03 , Invalid
 

BESQUEUT

Senior Member
Je pense qu'il faut utiliser les commandes 20, 21 et 22 en Vertical Adressing Mode.
Les commandes sont conçues pour être reconnues : vous n'écrivez pas dans des registres, vous n'écrasez rien.
Par contre le timing est important...
A la mise sous tension, en l'absence de reset hard, il reprends les dernière valeurs qui sont dans sa mémoire, ou pas ... parce que ça a fini par s'effacer... D’où ce coté "aléatoire"
C'est pour ça que j'ai proposé de lier le reset au Picaxe pour pouvoir faire un hard reset par programme.
 

dje8269

Senior Member
C'est pour ça que j'ai proposé de lier le reset au Picaxe pour pouvoir faire un hard reset par programme.
Ok je vais faire ca alors . Ainsi je ferais un petit RESET hard a chaque démarrage du picaxe . J'ai juste a relié via une R une sortie du picaxe sur la broche RESET ; Si je met la sortie du pIcaxe à 0 ca RESET l'écran ensuite je la bascule a 1 pour le fonctionnement normal ?

Sinon j'ai enfin réussis a remettre mes points dans les coins . en fait la commande inversion , inverse les valeurs des segments de 8 pixels , et pas l'ecran en entier . par exemple 0000001 ou 1000000.
 

dje8269

Senior Member
¨C'est un truc de fou quand même !! .

Bon, je m'approche !!

Voici le programme qui me permet d'avoir une barre a chaque coins et dans le bon ordre .

Le premier "0xFF" correspond au coin en haut a gauche . DOnc pour aller dans le coin en haut à droite il faut avancé de 128 pixel , ce qui correponds a 8x16 . et hop on retoruve notre barre dans le coin en haut a droite .

Code:
#PICAXE 20M2

'########################  Configuration  ########################

Symbol RST = B.2

'########################  Initialisation ########################

setfreq M32

hi2csetup i2cmaster,%01111000,i2cfast_32,i2cbyte	' Configuration du mode I2C

low RST	' On reset l'ecran pour etre certain qu'on parte sur de bonne base
pause 1000

high RST	' On désactive le reset
pause 2000


'########################  Initialisation de l'écran   ########################

hi2cout 0x80,(0xAE,0x00,0x00,0x00,0x20,0x00,0xD5,0x80,0xA8,0x1F,0xD3,0x00,0x8D, _
0x14,0xA1,0x00,0xC8,0xDA,0x02,0x81,0x7F,0xD9,0xF1,0xDB,0x20,0xA4,0xA6,0xAF)

#rem
hi2cout 0x80,(0xAE)         ;turn off display(RESET=OFF)
hi2cout 0x80,(0x00,0x00)    ;low column nibble(RESET=0),high column nibble(RESET=0)
hi2cout 0x80,(0x00)         ;start page address(RESET=0)
hi2cout 0x80,(0x20,0x00)    ;memory address mode(RESET=02 [page])
hi2cout 0x80,(0xD5,0x80)    ;oscillator frequency and divider(RESET=80)
hi2cout 0x80,(0xA8,0x1F)    ;mux ratio(RESET=3F [64 lines])
hi2cout 0x80,(0xD3,0x00)    ;display offset,COM vertical shift(RESET=0)
hi2cout 0x80,(0x8D,0x14)    ;enable charge pump(RESET=10 [OFF])
hi2cout 0x80,(0xA1,0x00)    ;segment remap(RESET=SEG0, COL0) 00 mirror image
hi2cout 0x80,(0xC0)         ;COM output scan(RESET=C0, C8 flips display) C8=Le premier pixel commence en haut a gauche / C0= la premier pixel commence a bas a gauche
hi2cout 0x80,(0xDA,0x02)    ;COM pins hardware config(RESET=12[alternate])
hi2cout 0x80,(0x81,0x7F)    ;contrast CF(RESET=7F)
hi2cout 0x80,(0xD9,0xF1)    ;pre-charge period F1(RESET=22)
hi2cout 0x80,(0xDB,0x20)    ;Vcom deselect(RESET=20)
hi2cout 0x80,(0xA4)         ;turn all on ignore RAM A5/RAM A4(RESET=A4)
hi2cout 0x80,(0xA6)         ;normal display A6/inverted A7(RESET=A6)
hi2cout 0x80,(0xAF)         ;turn on display
#endrem
pause 1000


'########################  Ecriture sur l'écran   ########################
hi2cout 0x40,( _
0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, _
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, _
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, _
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, _
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, _
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, _
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, _
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, _
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, _
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, _
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, _
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, _
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, _
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, _
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, _
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, _
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, _
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, _
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, _
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, _
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, _
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, _
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, _
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, _
0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, _
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, _
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, _
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, _
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, _
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, _
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, _
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF)
Avec cette méthode je pense que je vais avoir du mal pour créer mes chiffres, car je vais devoir utilisé tout le tableaux a chaque fois . Je pense que vous avez raison , le mode verticale , mais je ne comprends pas encore le fonctionnement dans ce mode .
 
Last edited:

BESQUEUT

Senior Member
Ok je vais faire ca alors . Ainsi je ferais un petit RESET hard a chaque démarrage du picaxe . J'ai juste a relié via une R une sortie du picaxe sur la broche RESET ; Si je met la sortie du pIcaxe à 0 ca RESET l'écran ensuite je la bascule a 1 pour le fonctionnement normal ?
Oui ; à priori ça devrait le faire.
Après la mise sous tension, attendre un peu avant de faire le RESET, puis attendre un peu avant d'envoyer les commandes d'initialisation.
Avec ça, on devrait avoir un comportement plus stable.
 

BESQUEUT

Senior Member
Voir dernière ligne du post #5, puis post #9
Vous êtes généreux sur les délais, (mais ça ne gêne en rien !) 200 ms suffisent largement.
Voir 8.9 Power ON and OFF sequence dans la doc.

Bonne nouvelle : le premier coin est bien au début des datas maintenant.
Vous devriez envoyer les data dans des boucles. Ce serait plus facile pour compter...
Et utilisez 4 trames différentes pour qu'on puisse savoir qui est qui...
 
Last edited:

dje8269

Senior Member
Bonne nouvelle : le premier coin est bien au début des datas maintenant.
Oui , mais le mode d'affichage n'est pas correct a mon avis pour l'avenir .

Avec ça, on devrait avoir un comportement plus stable.
Oui maintenant le comportement est parfait , on voit au début des fois plein de points , mais grâce aux pauses et au reset ce reviens dans l'ordre tout de suite ;

Mais quel plaisir quand ça fini par marcher !
Oui je veux bien vous croire la dessus !!

Vous devriez envoyer les data dans des boucles. Ce serait plus facile pour compter...
Et utilisez 4 trames différentes pour qu'on puisse savoir qui est qui...
Oui j'aimerais bien, mais la dessus je n'ai pas compris le principe ! .
Quand j'aurais saisis et assimiler le fonctionnement, je pense qu'il faudra diviser l'écran en 4 parties pour les 4 chiffres à affichés . et donc faire commencer les data a partir des colonnes minimum differentes.


Voir dernière ligne du post #5, puis post #9
Je n'avais pas vu la modif, et je n'ai pas tout compris . donc en mettant 0x00 on définie les colonnes minimum et maximum ; je crois qu'en mettant les deux a 0 on ne fixe aucune limite. Quand je change les valeurs le placement devient biscornu ( enfin logique mais je comprends pas ) .
 

BESQUEUT

Senior Member
Quand j'aurais saisis et assimiler le fonctionnement, je pense qu'il faudra diviser l'écran en 4 parties pour les 4 chiffres à affichés . et donc faire commencer les data a partir des colonnes minimum differentes.
Genre :
hi2cout 0x40,( 0xFF)
for b1=1 to 126
hi2cout 0x40,( 0x00)
next
hi2cout 0x40,( 0x6F)
etc...


Il y aura au moins 5 zones
88:88
car il faut prévoir le ":"
Vous devez faire un dessin pour savoir combien de pixels sont affectés à chaque chiffre, à l'espacement et aux deux points.

Je n'avais pas vu la modif, et je n'ai pas tout compris . donc en mettant 0x00 on définie les colonnes minimum et maximum ; je crois qu'en mettant les deux a 0 on ne fixe aucune limite. Quand je change les valeurs le placement devient biscornu ( enfin logique mais je comprends pas ) .
Commençons par passer en mode adressage vertical,
hi2cout 0x80,( 0x20,0x01)

Ensuite "Setup column start and end address"
hi2cout 0x80,( 0x21,0,29) ' on se limite aux trente premières colonnes.


Ensuite "Setup page start and end address"
hi2cout 0x80,( 0x22,0,3) ' on se limite à 4 paquets de 8 lignes

Vous pouvez (et vous devrez) mélanger les commandes et les data.
genre:
Je défini la zone d'affichage pour le troisième chiffre (commande Ox21)
je dessine le chiffre
Je défini la zone d'affichage pour le quatrième chiffre (commande Ox21)
je dessine le chiffre (même sous-programme que ci-dessus)
etc...

Désolé : n'ayant pas le même afficheur, je ne peux pas tester.
 
Last edited:

dje8269

Senior Member
Ca s'eclaircit un peu !

Commençons par passer en mode adressage vertical,
hi2cout 0x80,( 0x20,0x01)

Ensuite "Setup column start and end address"
hi2cout 0x80,( 0x21,0,29) ' on se limite aux trente premières colonnes.


Ensuite "Setup page start and end address"
hi2cout 0x80,( 0x22,0,3) ' on se limite à 4 paquets de 8 lignes
Oui mais comment traduire ca dans le programme à la ligne
Code:
hi2cout 0x80,(0xAE,0x00,0x00,0x00,0x20,0x00,0xD5,0x80,0xA8,0x1F,0xD3,0x00,0x8D, _
0x14,0xA1,0x00,0xC8,0xDA,0x02,0x81,0x7F,0xD9,0xF1,0xDB,0x20,0xA4,0xA6,0xAF)
Je ne comprends pas pourquoi cela ne fonctionne pas quand j'enlève les #rem #endrem ? donc je laisse les commentaires et modifie seulement dans la longue formule ;
cela devrait donné quelques choses comme ca ?
Code:
hi2cout 0x80,(0xAE,0x00,0x00,0x00,[COLOR="#0000FF"]0x20,0x01 ,0x21,0,29,0x22,0,3[/COLOR],0xD5,0x80,0xA8,0x1F,0xD3,0x00,0x8D, _
0x14,0xA1,0x00,0xC8,0xDA,0x02,0x81,0x7F,0xD9,0xF1,0xDB,0x20,0xA4,0xA6,0xAF)
n'ayant pas le même afficheur, je ne peux pas tester.
Pas de souci; ca me dérange pas ; on avance petit a petit . dés que je sent qu'une photo ou vidéo puisse vous aidez a m'aider je n'hésiterais pas .
 

dje8269

Senior Member
Si vous voulez on peut se tutoyer ce sera plus convivial ? non ? on est entre passionné lol .

Sinon j'ai compris ce que vous voulez dire et faire , mais ca ne fonctionne pas ! peut etre que je fais mal les choses . j'ai l'impression quand mode vertical, je perd la moitié de l'écran .

Pour résumé . On configure l'écran , de tel façon à travailler dans un rectangle de 30 colonnes (colonne de 1 pixel) sur les 4 pages de haut ( 4 pages de 8 pixels de haut soit les 32 pixels) .

J'obtiens un bon résultat, avec ce code :

Code:
#PICAXE 20M2

'########################  Configuration  ########################

Symbol RST = B.2

'########################  Initialisation ########################

setfreq M32

hi2csetup i2cmaster,%01111000,i2cfast_32,i2cbyte	' Configuration du mode I2C

low RST	' On reset l'ecran pour etre certain qu'on parte sur de bonne base
pause 1000

high RST	' On désactive le reset
pause 2000


'########################  Initialisation de l'écran   ########################

hi2cout 0x80,(0xAE,0x00,0x00,0x00,0x20,0x01,0x21,0x00,0x1D,0x22,0x00,0x03,0xD5,0x80,0xA8,0x1F,0xD3,0x00,0x8D, _
0x14,0xA1,0x00,0xC8,0xDA,0x02,0x81,0x7F,0xD9,0xF1,0xDB,0x20,0xA4,0xA6,0xAF)

#rem
hi2cout 0x80,(0xAE)         ;turn off display(RESET=OFF)
hi2cout 0x80,(0x00,0x00)    ;low column nibble(RESET=0),high column nibble(RESET=0)
hi2cout 0x80,(0x00)         ;start page address(RESET=0)
hi2cout 0x80,(0x20,0x00)    ;memory address mode(RESET=02 [page])
hi2cout 0x80,(0x21,0,29)    ;Setup column start and end address
hi2cout 0x80,(0x22,0,3)     ;Setup page start and end address
hi2cout 0x80,(0xD5,0x80)    ;oscillator frequency and divider(RESET=80)
hi2cout 0x80,(0xA8,0x1F)    ;mux ratio(RESET=3F [64 lines])
hi2cout 0x80,(0xD3,0x00)    ;display offset,COM vertical shift(RESET=0)
hi2cout 0x80,(0x8D,0x14)    ;enable charge pump(RESET=10 [OFF])
hi2cout 0x80,(0xA1,0x00)    ;segment remap(RESET=SEG0, COL0) 00 mirror image
hi2cout 0x80,(0xC8)         ;COM output scan(RESET=C0, C8 flips display) C8=Le premier pixel commence en haut a gauche / C0= la premier pixel commence a bas a gauche
hi2cout 0x80,(0xDA,0x02)    ;COM pins hardware config(RESET=12[alternate])
hi2cout 0x80,(0x81,0x7F)    ;contrast CF(RESET=7F)
hi2cout 0x80,(0xD9,0xF1)    ;pre-charge period F1(RESET=22)
hi2cout 0x80,(0xDB,0x20)    ;Vcom deselect(RESET=20)
hi2cout 0x80,(0xA4)         ;turn all on ignore RAM A5/RAM A4(RESET=A4)
hi2cout 0x80,(0xA6)         ;normal display A6/inverted A7(RESET=A6)
hi2cout 0x80,(0xAF)         ;turn on display
#endrem
pause 1000

'########################  On efface l'écran   ########################

hi2cout 0x40,( _
0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, _
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, _
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, _
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, _
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, _
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, _
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF)
J'ai mis une barre au début de l'écran et une le plus a droite possible . ainsi on se rend bien compte . On remarque que sur le reste de l'écran non initialisé les petits points sont encore présents .

P1030114.JPG

Jusque la tout va bien .

Je me dis ok je vais refaire un rectangle a la suite du premier . donc le premier va de la colonne 0 a 29 , donc je place le second de la colonne 30 a 59 .
J'écris donc ce code :

Code:
#PICAXE 20M2

'########################  Configuration  ########################

Symbol RST = B.2

'########################  Initialisation ########################

setfreq M32

hi2csetup i2cmaster,%01111000,i2cfast_32,i2cbyte	' Configuration du mode I2C

low RST	' On reset l'ecran pour etre certain qu'on parte sur de bonne base
pause 1000

high RST	' On désactive le reset
pause 2000


'########################  Initialisation de l'écran   ########################

hi2cout 0x80,(0xAE,0x00,0x00,0x00,0x20,0x01,0x21,0,29,0x22,0,3,0xD5,0x80,0xA8,0x1F,0xD3,0x00,0x8D, _
0x14,0xA1,0x00,0xC8,0xDA,0x02,0x81,0x7F,0xD9,0xF1,0xDB,0x20,0xA4,0xA6,0xAF)

#rem
hi2cout 0x80,(0xAE)         ;turn off display(RESET=OFF)
hi2cout 0x80,(0x00,0x00)    ;low column nibble(RESET=0),high column nibble(RESET=0)
hi2cout 0x80,(0x00)         ;start page address(RESET=0)
hi2cout 0x80,(0x20,0x00)    ;memory address mode(RESET=02 [page])
hi2cout 0x80,(0x21,0,29)    ;Setup column start and end address
hi2cout 0x80,(0x22,0,3)     ;Setup page start and end address
hi2cout 0x80,(0xD5,0x80)    ;oscillator frequency and divider(RESET=80)
hi2cout 0x80,(0xA8,0x1F)    ;mux ratio(RESET=3F [64 lines])
hi2cout 0x80,(0xD3,0x00)    ;display offset,COM vertical shift(RESET=0)
hi2cout 0x80,(0x8D,0x14)    ;enable charge pump(RESET=10 [OFF])
hi2cout 0x80,(0xA1,0x00)    ;segment remap(RESET=SEG0, COL0) 00 mirror image
hi2cout 0x80,(0xC8)         ;COM output scan(RESET=C0, C8 flips display) C8=Le premier pixel commence en haut a gauche / C0= la premier pixel commence a bas a gauche
hi2cout 0x80,(0xDA,0x02)    ;COM pins hardware config(RESET=12[alternate])
hi2cout 0x80,(0x81,0x7F)    ;contrast CF(RESET=7F)
hi2cout 0x80,(0xD9,0xF1)    ;pre-charge period F1(RESET=22)
hi2cout 0x80,(0xDB,0x20)    ;Vcom deselect(RESET=20)
hi2cout 0x80,(0xA4)         ;turn all on ignore RAM A5/RAM A4(RESET=A4)
hi2cout 0x80,(0xA6)         ;normal display A6/inverted A7(RESET=A6)
hi2cout 0x80,(0xAF)         ;turn on display
#endrem
pause 1000

'########################  On ecrit sur l'écran   ########################

hi2cout 0x40,( _
0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, _
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, _
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, _
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, _
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, _
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, _
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF)

pause 1000

hi2cout 0x80,(0x21,30,59)	' On change la colonne de debut et de fin pour le nouveau rectangle

pause 1000

hi2cout 0x40,( _
0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, _
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, _
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, _
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, _
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, _
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF)
Voici le résultat

P1030116.JPG

On remarque :
que la première barre du début du deuxième rectangle n'est pas affichée
La deuxième barre de fin du deuxième rectangle est bien présente
les points de l'écran ne sont pas effacés dans le deuxième rectangle

Je n'ai aucune idée du pourquoi !
 
Last edited:

BESQUEUT

Senior Member
Ben au contraire, ça à l'air de bien marcher : vos 4 premiers octets sont écrits verticalement sous la forme de 32 pixels.
La limitation à 30 colonnes est volontaire pour préparer l'affichage successif des 4 chiffres.

Essayons de rajouter ça à la suite de l'envoi des données :
Code:
hi2cout 0x80,(0x21,32,62)    ;Setup column start and end address
hi2cout 0x40,( 0xF0, 0x33, 0x33, 0x0F)
for b2 =2 to 29
   hi2cout 0x40,( 0x00, 0x00, 0x00, 0x00)
next
hi2cout 0x40,( 0xF0, 0x0F, 0x0F, 0x0F)
 

BESQUEUT

Senior Member
Je ne comprends pas pourquoi cela ne fonctionne pas quand j'enlève les #rem #endrem ? donc je laisse les commentaires et modifie seulement dans la longue formule ;
Ça par contre c'est curieux. Vous enlevez les #rem et vous mettez en commentaire la première commande.
Et que se passe-t-il ?
 

dje8269

Senior Member
Essayons de rajouter ça à la suite de l'envoi des données :
Chose faite !
Code:
#PICAXE 20M2

'########################  Configuration  ########################

Symbol RST = B.2

'########################  Initialisation ########################

setfreq M32

hi2csetup i2cmaster,%01111000,i2cfast_32,i2cbyte	' Configuration du mode I2C

low RST	' On reset l'ecran pour etre certain qu'on parte sur de bonne base
pause 1000

high RST	' On désactive le reset
pause 2000


'########################  Initialisation de l'écran   ########################

hi2cout 0x80,(0xAE,0x00,0x00,0x00,0x20,0x01,0x21,0,29,0x22,0,3,0xD5,0x80,0xA8,0x1F,0xD3,0x00,0x8D, _
0x14,0xA1,0x00,0xC8,0xDA,0x02,0x81,0x7F,0xD9,0xF1,0xDB,0x20,0xA4,0xA6,0xAF)

#rem
hi2cout 0x80,(0xAE)         ;turn off display(RESET=OFF)
hi2cout 0x80,(0x00,0x00)    ;low column nibble(RESET=0),high column nibble(RESET=0)
hi2cout 0x80,(0x00)         ;start page address(RESET=0)
hi2cout 0x80,(0x20,0x00)    ;memory address mode(RESET=02 [page])
hi2cout 0x80,(0x21,0,29)    ;Setup column start and end address
hi2cout 0x80,(0x22,0,3)     ;Setup page start and end address
hi2cout 0x80,(0xD5,0x80)    ;oscillator frequency and divider(RESET=80)
hi2cout 0x80,(0xA8,0x1F)    ;mux ratio(RESET=3F [64 lines])
hi2cout 0x80,(0xD3,0x00)    ;display offset,COM vertical shift(RESET=0)
hi2cout 0x80,(0x8D,0x14)    ;enable charge pump(RESET=10 [OFF])
hi2cout 0x80,(0xA1,0x00)    ;segment remap(RESET=SEG0, COL0) 00 mirror image
hi2cout 0x80,(0xC8)         ;COM output scan(RESET=C0, C8 flips display) C8=Le premier pixel commence en haut a gauche / C0= la premier pixel commence a bas a gauche
hi2cout 0x80,(0xDA,0x02)    ;COM pins hardware config(RESET=12[alternate])
hi2cout 0x80,(0x81,0x7F)    ;contrast CF(RESET=7F)
hi2cout 0x80,(0xD9,0xF1)    ;pre-charge period F1(RESET=22)
hi2cout 0x80,(0xDB,0x20)    ;Vcom deselect(RESET=20)
hi2cout 0x80,(0xA4)         ;turn all on ignore RAM A5/RAM A4(RESET=A4)
hi2cout 0x80,(0xA6)         ;normal display A6/inverted A7(RESET=A6)
hi2cout 0x80,(0xAF)         ;turn on display
#endrem
pause 1000

'########################  On ecrit sur l'écran   ########################

hi2cout 0x40,( _
0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, _
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, _
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, _
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, _
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, _
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, _
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF)

pause 1000

hi2cout 0x80,(0x21,32,62)    ;Setup column start and end address

hi2cout 0x40,( 0xF0, 0x33, 0x33, 0x0F)

for b2 =2 to 29
   hi2cout 0x40,( 0x00, 0x00, 0x00, 0x00)
next

hi2cout 0x40,( 0xF0, 0x0F, 0x0F, 0x0F)
P1030122.JPG

On voit le trait dans l'ellipse rouge . mais ca fais comme avec moi . bizarre vous avez dis bizarre. il manque forcement qulques chose dans les config qu'on a loupés
 

dje8269

Senior Member
Ça par contre c'est curieux. Vous enlevez les #rem et vous mettez en commentaire la première commande.
Et que se passe-t-il ?
L'écran reste vide !!! je trouve çà aussi très curieux .
 

dje8269

Senior Member
Je me suis permis de modifier votre code :

Code:
#PICAXE 20M2

'########################  Configuration  ########################

Symbol RST = B.2

'########################  Initialisation ########################

setfreq M32

hi2csetup i2cmaster,%01111000,i2cfast_32,i2cbyte	' Configuration du mode I2C

low RST	' On reset l'ecran pour etre certain qu'on parte sur de bonne base
pause 1000

high RST	' On désactive le reset
pause 2000


'########################  Initialisation de l'écran   ########################

hi2cout 0x80,(0xAE,0x00,0x00,0x00,0x20,0x01,0x21,0,29,0x22,0,3,0xD5,0x80,0xA8,0x1F,0xD3,0x00,0x8D, _
0x14,0xA1,0x00,0xC8,0xDA,0x02,0x81,0x7F,0xD9,0xF1,0xDB,0x20,0xA4,0xA6,0xAF)

#rem
hi2cout 0x80,(0xAE)         ;turn off display(RESET=OFF)
hi2cout 0x80,(0x00,0x00)    ;low column nibble(RESET=0),high column nibble(RESET=0)
hi2cout 0x80,(0x00)         ;start page address(RESET=0)
hi2cout 0x80,(0x20,0x00)    ;memory address mode(RESET=02 [page])
hi2cout 0x80,(0x21,0,29)    ;Setup column start and end address
hi2cout 0x80,(0x22,0,3)     ;Setup page start and end address
hi2cout 0x80,(0xD5,0x80)    ;oscillator frequency and divider(RESET=80)
hi2cout 0x80,(0xA8,0x1F)    ;mux ratio(RESET=3F [64 lines])
hi2cout 0x80,(0xD3,0x00)    ;display offset,COM vertical shift(RESET=0)
hi2cout 0x80,(0x8D,0x14)    ;enable charge pump(RESET=10 [OFF])
hi2cout 0x80,(0xA1,0x00)    ;segment remap(RESET=SEG0, COL0) 00 mirror image
hi2cout 0x80,(0xC8)         ;COM output scan(RESET=C0, C8 flips display) C8=Le premier pixel commence en haut a gauche / C0= la premier pixel commence a bas a gauche
hi2cout 0x80,(0xDA,0x02)    ;COM pins hardware config(RESET=12[alternate])
hi2cout 0x80,(0x81,0x7F)    ;contrast CF(RESET=7F)
hi2cout 0x80,(0xD9,0xF1)    ;pre-charge period F1(RESET=22)
hi2cout 0x80,(0xDB,0x20)    ;Vcom deselect(RESET=20)
hi2cout 0x80,(0xA4)         ;turn all on ignore RAM A5/RAM A4(RESET=A4)
hi2cout 0x80,(0xA6)         ;normal display A6/inverted A7(RESET=A6)
hi2cout 0x80,(0xAF)         ;turn on display
#endrem
pause 1000

'########################  On ecrit sur l'écran   ########################

hi2cout 0x40,( _
0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, _
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, _
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, _
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, _
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, _
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, _
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF)

pause 1000

hi2cout 0x80,(0xAE,0x00,0x1F,0x00,0x20,0x01,0x21,32,62,0x22,0,3,0xD5,0x80,0xA8,0x1F,0xD3,0x00,0x8D, _
0x14,0xA1,0x00,0xC8,0xDA,0x02,0x81,0x7F,0xD9,0xF1,0xDB,0x20,0xA4,0xA6,0xAF)

hi2cout 0x40,( 0xFF, 0xFF, 0xFF, 0xFF)

for b2 =2 to 29
   hi2cout 0x40,( 0x00, 0x00, 0x00, 0x00)
next

hi2cout 0x40,( 0xFF, 0xFF, 0xFF, 0xFF)
P1030123.JPG

C'est pas mal du tout . j'ai donc jsute modifier , la commande en remettant la totale . et changer les barres pour bien les voir
 

dje8269

Senior Member
Yes ca avance fort .

Il nous reste à savoir ce que je peux enlever pour fluidifier le tout .

J'ai donc creer les 4 rectangles , a gauche de chaque rectangle une barre lisse et à droite des pointillés, pour bien visualisé .

voici le code qui doit pouvoir se simplifier :

Code:
#PICAXE 20M2

'########################  Configuration  ########################

Symbol RST = B.2

'########################  Initialisation ########################

setfreq M32

hi2csetup i2cmaster,%01111000,i2cfast_32,i2cbyte	' Configuration du mode I2C

low RST	' On reset l'ecran pour etre certain qu'on parte sur de bonne base
pause 1000

high RST	' On désactive le reset
pause 2000


'########################  Initialisation de l'écran   ########################

hi2cout 0x80,(0xAE,0x00,0x00,0x00,0x20,0x01,0x21,0,29,0x22,0,3,0xD5,0x80,0xA8,0x1F,0xD3,0x00,0x8D, _
0x14,0xA1,0x00,0xC8,0xDA,0x02,0x81,0x7F,0xD9,0xF1,0xDB,0x20,0xA4,0xA6,0xAF)

#rem
hi2cout 0x80,(0xAE)         ;turn off display(RESET=OFF)
hi2cout 0x80,(0x00,0x00)    ;low column nibble(RESET=0),high column nibble(RESET=0)
hi2cout 0x80,(0x00)         ;start page address(RESET=0)
hi2cout 0x80,(0x20,0x00)    ;memory address mode(RESET=02 [page])
hi2cout 0x80,(0x21,0,29)    ;Setup column start and end address
hi2cout 0x80,(0x22,0,3)     ;Setup page start and end address
hi2cout 0x80,(0xD5,0x80)    ;oscillator frequency and divider(RESET=80)
hi2cout 0x80,(0xA8,0x1F)    ;mux ratio(RESET=3F [64 lines])
hi2cout 0x80,(0xD3,0x00)    ;display offset,COM vertical shift(RESET=0)
hi2cout 0x80,(0x8D,0x14)    ;enable charge pump(RESET=10 [OFF])
hi2cout 0x80,(0xA1,0x00)    ;segment remap(RESET=SEG0, COL0) 00 mirror image
hi2cout 0x80,(0xC8)         ;COM output scan(RESET=C0, C8 flips display) C8=Le premier pixel commence en haut a gauche / C0= la premier pixel commence a bas a gauche
hi2cout 0x80,(0xDA,0x02)    ;COM pins hardware config(RESET=12[alternate])
hi2cout 0x80,(0x81,0x7F)    ;contrast CF(RESET=7F)
hi2cout 0x80,(0xD9,0xF1)    ;pre-charge period F1(RESET=22)
hi2cout 0x80,(0xDB,0x20)    ;Vcom deselect(RESET=20)
hi2cout 0x80,(0xA4)         ;turn all on ignore RAM A5/RAM A4(RESET=A4)
hi2cout 0x80,(0xA6)         ;normal display A6/inverted A7(RESET=A6)
hi2cout 0x80,(0xAF)         ;turn on display
#endrem
pause 1000

'########################  On ecrit sur l'écran   ########################

'---- 1 chiffre
hi2cout 0x80,(0xAE,0x00,0x1F,0x00,0x20,0x01,0x21,0,29,0x22,0,3,0xD5,0x80,0xA8,0x1F,0xD3,0x00,0x8D, _
0x14,0xA1,0x00,0xC8,0xDA,0x02,0x81,0x7F,0xD9,0xF1,0xDB,0x20,0xA4,0xA6,0xAF)

hi2cout 0x40,( 0xFF, 0xFF, 0xFF, 0xFF)

for b2 =0 to 27
   hi2cout 0x40,( 0x00, 0x00, 0x00, 0x00)
next

hi2cout 0x40,( 0xAA, 0xAA, 0xAA, 0xAA)

pause 1000

'---- 2 chiffre
hi2cout 0x80,(0xAE,0x00,0x1F,0x00,0x20,0x01,0x21,32,62,0x22,0,3,0xD5,0x80,0xA8,0x1F,0xD3,0x00,0x8D, _
0x14,0xA1,0x00,0xC8,0xDA,0x02,0x81,0x7F,0xD9,0xF1,0xDB,0x20,0xA4,0xA6,0xAF)

hi2cout 0x40,( 0xFF, 0xFF, 0xFF, 0xFF)

for b2 =2 to 29
   hi2cout 0x40,( 0x00, 0x00, 0x00, 0x00)
next

hi2cout 0x40,( 0xAA, 0xAA, 0xAA, 0xAA)

pause 1000

'---- 3 chiffre
hi2cout 0x80,(0xAE,0x00,0x1F,0x00,0x20,0x01,0x21,66,96,0x22,0,3,0xD5,0x80,0xA8,0x1F,0xD3,0x00,0x8D, _
0x14,0xA1,0x00,0xC8,0xDA,0x02,0x81,0x7F,0xD9,0xF1,0xDB,0x20,0xA4,0xA6,0xAF)

hi2cout 0x40,( 0xFF, 0xFF, 0xFF, 0xFF)

for b2 =2 to 29
   hi2cout 0x40,( 0x00, 0x00, 0x00, 0x00)
next

hi2cout 0x40,( 0xAA, 0xAA, 0xAA, 0xAA)

pause 1000

'---- 4 chiffre
hi2cout 0x80,(0xAE,0x00,0x1F,0x00,0x20,0x01,0x21,99,127,0x22,0,3,0xD5,0x80,0xA8,0x1F,0xD3,0x00,0x8D, _
0x14,0xA1,0x00,0xC8,0xDA,0x02,0x81,0x7F,0xD9,0xF1,0xDB,0x20,0xA4,0xA6,0xAF)

hi2cout 0x40,( 0xFF, 0xFF, 0xFF, 0xFF)

for b2 =2 to 31
   hi2cout 0x40,( 0x00, 0x00, 0x00, 0x00)
next

hi2cout 0x40,( 0xAA, 0xAA, 0xAA, 0xAA)
Le résultat

P1030124.JPG
 

dje8269

Senior Member
Bon , alors, apres une bonne journée a tester et essayer de comprendre, je vois comme une lumière au bout du tunnel. Je pense avoir a peu prêt saisi le fonctionnement de cette bêbête !.

Toutefois , malgré mes recherches, Il y a deux choses qui me résiste. le Set multiplex ratio (page 31) et le charge pump (page 62), je ne comprends pas leur fonction . Pour le multiplex la valeur de RESET est faites pour 64 lignes de haut , comme y'en as que 32 sur mon écran il faut changer mais a quoi ca correspond exactement ?

Allez hop je file essayé de dessiné un chiffre pour voir un peu la taille qu'il me faut .
 

BESQUEUT

Senior Member
Selon le post #9 du thread Aggravating-OLED-display/page2&highlight=ssd1306 Il semble possible que dans certains cas le préambule des commandes soit 0x00 au lieu de 0x80
Peut être 0x80 puis 0x00 La doc n'est pas claire y compris pour le sieur hippy (qui pourtant est très loin d'être une truffe).
Il semble aussi qu'il soit obligatoire d'envoyer plusieurs commandes dans un certain ordre.
Mais je pense comme vous qu'il doit être possible de simplifier la commande préalable à chaque chiffre.
Vous pouvez essayer de supprimer des paramètres, en commençant par la fin, mais en gardant bien les binômes quand il y en a. De plus, il me semble inutile d'éteindre l'écran et d ele rallumer à chaque fois, mais évidement si vous laissez la commande d'extension au début, il faut aussi laisser la commande d'allumage à la fin...
Le charge pump est utilisé pour fabriquer du 12v à partir du 3V (nécessaire pour l'écran OLED)
A priori il ne faut pas y toucher, mais ça ne sert qu'une fois au début.

Le Set Multiplex Ratio me laisse perplexe pour le moment, mais je n'ai plus le temps de lire la doc :
je pars en WE avec ma douce et donc ne pourrai plus avoir de vos nouvelles avant Lundi.
Bonne chance et bon courage.
 
Last edited:

dje8269

Senior Member
Merci pour tous et bon week-end , je suis en train d'essayer de fabriquer un chiffre . j'ai effectivement essayé plusieurs combinaisons pour savoir ce que je pouvais ou non simplifier . j'en suis rendu la

Code:
[COLOR="#FF0000"]hi2cout 0x80,(0xAE,0x20,0x01,0x21,32,62,0x22,0,3,0xAF)[/COLOR]

hi2cout 0x40,( 0xFF, 0xFF, 0xFF, 0xFF)

for b2 =2 to 29
   hi2cout 0x40,( 0x00, 0x00, 0x00, 0x00)
next

hi2cout 0x40,( 0xAA, 0xAA, 0xAA, 0xAA)
Je part donc dans l'idée de creer 4 zone pour les chiffres , les ":" seront fixes . je mettrai a jour seulement les chiffres quand j'en aurais besoin . Le plus dur a mon avis sera de faire de joli chiffres .
Il n'existe pas de logiciel pour ca ?
 
Last edited:

dje8269

Senior Member
Bonjour à tous ,

Alors après une petite journée a dessiner les chiffres voici le résultat :

J'ai programmé exprès le chrono pour qu'il s'allume a 59m50 .
Le code prend énormément de place : Mémoire utilisée = 1839 octets sur 2048 , en sachant que j'ai pas encore mis la façon compte à rebours et surtout avec l'encodeur incrémentale . Je suis donc a la recherche de toute bonne idée pour gagner de la place mémoire . ( sans rajouter de mémoire externe bien sur).

Pour faire les chiffres, j'ai utilisé photoshop , la taille de l'image est de 30x32 comme sur l'écran, les lignes vertes et rouges sont mes segments ( les couleurs plus foncées sont pour compter de 5 en 5 afin de m"y retrouvé plus facilement) . Même si je suis pas très satisfait du résultat, car la définition de l'écran est vraiment fine par rapport a photoshop, j'ajusterais les courbes plus tard .

Pour compter les secondes j'utilise donc la fonction "time" , je sais pas si c'est la plus efficace niveau précision ; Je n'ai pas privilégié l'interruption sur le changement de time , car le programme reste très réactif , vu qu'il ne fait que attendre que le timer augmente de 2 ( 32Mhz pour 1 seconde).

Je serais ravi d'avoir vos commentaires, remarques , et amélioration potentiel dessus . Car je ne pense pas avoir compris toutes les subtilités de cet écran.

chiffre.jpg

[video=dailymotion;x28819k]http://www.dailymotion.com/video/x28819k_chrono-picaxe-avec-oled-128x32_tech[/video]

plein écran par ici


1er partie du code ( car trop long)
Code:
#PICAXE 20M2

'########################  Configuration  ########################

Symbol RST = B.2
Symbol Mem_time = b3
symbol sec = b10
symbol Dizsec = b11
symbol minu = b12
symbol Dizminu = b13

'########################  Initialisation ########################

setfreq M32

hi2csetup i2cmaster,%01111000,i2cfast_32,i2cbyte	' Configuration du mode I2C

low RST	' On reset l'ecran pour etre certain qu'on parte sur de bonne base
pause 100

high RST	' On désactive le reset
pause 1600

sec = 0
Dizsec = 0
minu = 0
Dizminu = 0

'########################  Initialisation de l'écran   ########################

hi2cout 0x80,(0xAE,0x00,0x00,0x00,0x20,0x01,0x21,0,127,0x22,0,3,0xD5,0x80,0xA8,0x1F,0xD3,0x00,0x8D, _
0x14,0xA1,0x00,0xC8,0xDA,0x02,0x81,0x7F,0xD9,0xF1,0xDB,0x20,0xA4,0xA6,0xAF)

#rem
hi2cout 0x80,(0xAE)         ;turn off display(RESET=OFF) eteins l'écran
hi2cout 0x80,(0x00,0x00)    ;low column nibble(RESET=0),high column nibble(RESET=0)
hi2cout 0x80,(0x00)         ;start page address(RESET=0)
hi2cout 0x80,(0x20,0x01)    ;memory address mode(RESET=02 [page])			choix du mode de fonctionnement, pour moi vertical=01
hi2cout 0x80,(0x21,0,127)    ;Setup column start and end address			definie la colonne du début et de fin pour l'init. 0 à 127 tout l'écran
hi2cout 0x80,(0x22,0,3)     ;Setup page start and end address			definie les pages de début et de fin 4 pages sur cet ecran de 0~3
hi2cout 0x80,(0xD5,0x80)    ;oscillator frequency and divider(RESET=80)
hi2cout 0x80,(0xA8,0x1F)    ;mux ratio(RESET=3F [64 lines])
hi2cout 0x80,(0xD3,0x00)    ;display offset,COM vertical shift(RESET=0)
hi2cout 0x80,(0x8D,0x14)    ;enable charge pump(RESET=10 [OFF])
hi2cout 0x80,(0xA1,0x00)    ;segment remap(RESET=SEG0, COL0) 00 mirror image
hi2cout 0x80,(0xC8)         ;COM output scan(RESET=C0, C8 flips display) C8=Le premier pixel commence en haut a gauche / C0= la premier pixel commence a bas a gauche
hi2cout 0x80,(0xDA,0x02)    ;COM pins hardware config(RESET=12[alternate])
hi2cout 0x80,(0x81,0x7F)    ;contrast CF(RESET=7F)
hi2cout 0x80,(0xD9,0xF1)    ;pre-charge period F1(RESET=22)
hi2cout 0x80,(0xDB,0x20)    ;Vcom deselect(RESET=20)
hi2cout 0x80,(0xA4)         ;turn all on ignore RAM A5/RAM A4(RESET=A4)
hi2cout 0x80,(0xA6)         ;normal display A6/inverted A7(RESET=A6)
hi2cout 0x80,(0xAF)         ;turn on display
#endrem

time = 0	'RAZ du timer

hi2cout 0x80,(0x00,0x00,0x20,0x01,0x21,60,67,0x22,0,3) 'création des deux points du milieu
hi2cout 0x40,(_
0x00, 0x00, 0x00, 0x00,_
0x00, 0x0F, 0xF0, 0x00,_
0x00, 0x0F, 0xF0, 0x00,_
0x00, 0x0F, 0xF0, 0x00,_
0x00, 0x0F, 0xF0, 0x00,_
0x00, 0x00, 0x00, 0x00,_
0x00, 0x00, 0x00, 0x00)


hi2cout 0x80,(0x00,0x00,0x20,0x01,0x21,98,127,0x22,0,3)	' affichage de 4 zeros au depart
gosub chiffre0
hi2cout 0x80,(0x00,0x00,0x20,0x01,0x21,67,97,0x22,0,3)
gosub chiffre0
hi2cout 0x80,(0x00,0x00,0x20,0x01,0x21,30,60,0x22,0,3)
gosub chiffre0
hi2cout 0x80,(0x00,0x00,0x20,0x01,0x21,0,29,0x22,0,3)
gosub chiffre0

'########################  Programme principale   ########################

do

if time >= 2 then		' Attends qu'une seconde sécoule
time = 0			' remise a zero du timer
gosub MAJ_sec		' go mettre à jour les secondes
end if

loop

'########################  Programme secondaire   ########################

'#### MAJsec ####
MAJ_sec:

inc sec			' Augmente de 1 seconde

if sec=10 then 		' Si seconde = 10 alors Mise à zéro de la valeur seconde et incrementation 
	sec =0		' Mise à zéro de la valeur seconde
	gosub MAJ_dizsec	' Go Mise à jour de la valeur dizaine de seconde
endif

hi2cout 0x80,(0x00,0x00,0x20,0x01,0x21,97,127,0x22,0,3)	' Mise a jour des seondes

	on sec gosub chiffre0,chiffre1,chiffre2,chiffre3,chiffre4,chiffre5,chiffre6,chiffre7,chiffre8,chiffre9 ' On selectionne le chiffre à afficher
return

'#### MAJ dizaine de seconde ####
MAJ_dizsec:

inc dizsec			' Augmente les dizaines de secondes

If dizsec>=6 then			' Si apres incrementation>=6
	dizsec = 0			' On met les dizaines de secondes a zero pour l'affichage
	gosub MAJ_minu		' On va mettre à jour les minutes
end if

hi2cout 0x80,(0x00,0x00,0x20,0x01,0x21,67,97,0x22,0,3)				' Affichage des dizaines de secondes
	on dizsec gosub chiffre0,chiffre1,chiffre2,chiffre3,chiffre4,chiffre5	' Selection du chiffre à afficher	
return

'#### MAJ minute ####
MAJ_minu:

inc minu				' Augmente les minutes

If minu>=10 then			' Si apres incrementation>=10
	minu = 0			' On met les minutes a zero pour l'affichage
	gosub MAJ_dizminu		' On va mettre à jour les dizaines de minutes
end if

hi2cout 0x80,(0x00,0x00,0x20,0x01,0x21,30,60,0x22,0,3)		' Affichage des minutes
	on minu gosub chiffre0,chiffre1,chiffre2,chiffre3,chiffre4,chiffre5,chiffre6,chiffre7,chiffre8,chiffre9	' Selection du chiffre à afficher	
return

'#### MAJ dizaine de minute ####
MAJ_dizminu:

inc Dizminu				' Augmente les dizaines de minutes

If Dizminu>=6 then		' Si apres incrementation>=6
	Dizminu = 0			' On met les minutes a zero pour l'affichage
end if

hi2cout 0x80,(0x00,0x00,0x20,0x01,0x21,0,29,0x22,0,3)			' Affichage des dizaines de minutes
	on Dizminu gosub chiffre0,chiffre1,chiffre2,chiffre3,chiffre4,chiffre5	' Selection du chiffre à afficher	
return
 

dje8269

Senior Member
2iéme partie du code ( les chiffres)

Code:
'######################################################
'############## chiffre N° 0 ##########################
'######################################################
chiffre0:
hi2cout 0x40,(_
0x00, 0x00, 0x00, 0x00,_
0x00, 0x00, 0x00, 0x00,_
0x00, 0xFC, 0x3F, 0x00,_
0x80, 0xFF, 0xFF, 0x01,_
0xE0, 0xFF, 0xFF, 0x07,_
_
0xF0, 0xFF, 0xFF, 0x0F,_
0xF8, 0xFF, 0xFF, 0x1F,_
0xFC, 0xFF, 0xFF, 0x3F,_
0xFE, 0x00, 0x00, 0x7F,_
0xFE, 0x00, 0x00, 0x7F,_
_
0x7E, 0x00, 0x00, 0x7E,_
0x3E, 0x00, 0x00, 0x7C,_
0x1E, 0x00, 0x00, 0x78,_
0x1E, 0x00, 0x00, 0x78,_
0x1E, 0x00, 0x00, 0x78,_
_
0x1E, 0x00, 0x00, 0x78,_
0x1E, 0x00, 0x00, 0x78,_
0x3E, 0x00, 0x00, 0x7C,_
0x7E, 0x00, 0x00, 0x7E,_
0xFE, 0x00, 0x00, 0x7F,_
_
0xFE, 0x00, 0x00, 0x7F,_
0xFC, 0xFF, 0xFF, 0x3F,_
0xF8, 0xFF, 0xFF, 0x1F,_
0xF0, 0xFF, 0xFF, 0x0F,_
0xE0, 0xFF, 0xFF, 0x07,_
_
0x80, 0xFF, 0xFF, 0x01,_
0x00, 0xFC, 0x3F, 0x00,_
0x00, 0x00, 0x00, 0x00,_
0x00, 0x00, 0x00, 0x00,_
0x00, 0x00, 0x00, 0x00)

return

'######################################################
'############## chiffre N° 1 ##########################
'######################################################
chiffre1:
for b2 =0 to 4
   hi2cout 0x40,( 0x00, 0x00, 0x00, 0x00)
next

for b2 = 0 to 4
hi2cout 0x40,(0xE0, 0x01, 0x00, 0x78)
next

hi2cout 0x40,(_
0xF0, 0x01, 0x00, 0x78,_
0xF0, 0x01, 0x00, 0x78,_
0xF8, 0xFF, 0xFF, 0x7F)

for b2 = 0 to 5
hi2cout 0x40,(0xFE, 0xFF, 0xFF, 0x7F)
next

for b2 = 0 to 6
hi2cout 0x40,(0x00, 0x00, 0x00, 0x78)
next

for b2 = 0 to 3
hi2cout 0x40,(0x00, 0x00, 0x00, 0x00)
next

return

'######################################################
'############## chiffre N° 2 ##########################
'######################################################
chiffre2:
hi2cout 0x40,(_
0x00, 0x00, 0x00, 0x00, _
0x00, 0x00, 0x00, 0x00, _
0x00, 0x00, 0x00, 0x7C, _
0xF8, 0x00, 0x00, 0x7E, _
0xFC, 0x00, 0x00, 0x7F, _
0xFC, 0x00, 0x00, 0x7F, _
0x7C, 0x00, 0x80, 0x7F, _
0x7C, 0x00, 0xC0, 0x7F, _
0x3E, 0x00, 0xE0, 0x7F, _
0x3E, 0x00, 0xE0, 0x7F, _
0x3E, 0x00, 0xF0, 0x7F, _
0x1E, 0x00, 0xF8, 0x7B, _
0x1E, 0x00, 0xFC, 0x79, _
0x1E, 0x00, 0xFE, 0x78, _
0x1E, 0x00, 0xFF, 0x78, _
0x1E, 0x00, 0x7F, 0x78, _
0x3E, 0x80, 0x3F, 0x78, _
0x3E, 0xE0, 0x1F, 0x78, _
0xFE, 0xF8, 0x0F, 0x78, _
0xFC, 0xFF, 0x07, 0x78, _
0xFC, 0xFF, 0x07, 0x78, _
0xF8, 0xFF, 0x03, 0x78, _
0xF8, 0xFF, 0x00, 0x78, _
0xF0, 0x7F, 0x00, 0x78, _
0xC0, 0x1F, 0x00, 0x78)

for b2 = 0 to 4
hi2cout 0x40,(0x00, 0x00, 0x00, 0x00)
next

return

'######################################################
'############## chiffre N° 3 ##########################
'######################################################
chiffre3:
hi2cout 0x40,(_
0x00, 0x00, 0x00, 0x00,_
0x00, 0x00, 0x00, 0x00,_
0x00, 0x00, 0x00, 0x1F,_
0xf8, 0x00, 0x00, 0x3F,_
0xFC, 0x00, 0x00, 0x3F,_
_
0xFC, 0x00, 0x00, 0x3E,_
0x7C, 0x00, 0x00, 0x3E,_
0x7C, 0x00, 0x00, 0x7C,_
0x3E, 0x00, 0x00, 0x7C,_
0x3E, 0x00, 0x00, 0x7C,_
_
0x3E, 0xE0, 0x01, 0x78,_
0x1E, 0xE0, 0x01, 0x78,_
0x1E, 0xE0, 0x01, 0x78,_
0x1E, 0xE0, 0x01, 0x78,_
0x1E, 0xE0, 0x01, 0x78,_
_
0x1E, 0xF0, 0x01, 0x78,_
0x3E, 0xF0, 0x01, 0x7C,_
0x3E, 0xF8, 0x03, 0x7C,_
0x7E, 0xFC, 0x03, 0x3E,_
0xFC, 0xFF, 0x0f, 0x3F,_
_
0xFC, 0xFF, 0xFF, 0x3F,_
0xFC, 0xBF, 0xFF, 0x1F,_
0xF8, 0x1F, 0xFF, 0x1F,_
0xF0, 0x1F, 0xFF, 0x0F,_
0xE0, 0x07, 0xFE, 0x07,_
_
0x00, 0x00, 0xF8, 0x01,_
0x00, 0x00, 0x00, 0x00,_
0x00, 0x00, 0x00, 0x00,_
0x00, 0x00, 0x00, 0x00,_
0x00, 0x00, 0x00, 0x00)

return

'######################################################
'############## chiffre N° 4 ##########################
'######################################################
chiffre4:
hi2cout 0x40,(_
0x00, 0x00, 0x00, 0x00,_
0x00, 0x00, 0x7C, 0x00,_
0x00, 0x00, 0x7E, 0x00,_
0x00, 0x00, 0x7F, 0x00,_
0x00, 0x80, 0x7F, 0x00,_
_
0x00, 0xC0, 0x7F, 0x00,_
0x00, 0xE0, 0x7F, 0x00,_
0x00, 0xF0, 0x7F, 0x00,_
0x00, 0xF8, 0x7F, 0x00,_
0x00, 0xFC, 0x7B, 0x00,_
_
0x00, 0xFE, 0x79, 0x00,_
0x00, 0xFF, 0x78, 0x00,_
0x80, 0x7F, 0x78, 0x00,_
0xC0, 0x3F, 0x78, 0x00,_
0xE0, 0x1F, 0x78, 0x00,_
_
0xF0, 0x0F, 0x78, 0x00,_
0xF8, 0x07, 0x78, 0x00,_
0xFC, 0x03, 0x78, 0x00,_
0xFE, 0xFF, 0xFF, 0x7F,_
0xFE, 0xFF, 0xFF, 0x7F,_
_
0xFE, 0xFF, 0xFF, 0x7F,_
0xFE, 0xFF, 0xFF, 0x7F,_
0xFE, 0xFF, 0xFF, 0x7F,_
0xFE, 0xFF, 0xFF, 0x7F,_
0x00, 0x00, 0x78, 0x00,_
_
0x00, 0x00, 0x78, 0x00,_
0x00, 0x00, 0x78, 0x00,_
0x00, 0x00, 0x78, 0x00,_
0x00, 0x00, 0x78, 0x00,_
0x00, 0x00, 0x00, 0x00)

return

'######################################################
'############## chiffre N° 5 ##########################
'######################################################
chiffre5:
hi2cout 0x40,(_
0x00, 0x00, 0x00, 0x00,_
0x00, 0x00, 0x00, 0x00,_
0x00, 0x00, 0x00, 0x00,_
0x00, 0x00, 0x00, 0x1F,_
0x00, 0x00, 0x00, 0x3F,_
_
0xFE, 0xFF, 0x00, 0x3F,_
0xFE, 0xFF, 0x00, 0x3E,_
0xFE, 0xFF, 0x00, 0x7E,_
0xFE, 0xFF, 0x00, 0x7C,_
0xFE, 0xFF, 0x00, 0x7C,_
_
0x1E, 0xF0, 0x00, 0x7C,_
0x1E, 0xF0, 0x00, 0x78,_
0x1E, 0xF0, 0x00, 0x78,_
0x1E, 0xF0, 0x00, 0x78,_
0x1E, 0xF0, 0x00, 0x78,_
_
0x1E, 0xF0, 0x00, 0x78,_
0x1E, 0xF0, 0x01, 0x78,_
0x1E, 0xF0, 0x01, 0x7c,_
0x1E, 0xF0, 0x01, 0x7C,_
0x1E, 0xF0, 0x03, 0x3E,_
_
0x1E, 0xE0, 0x87, 0x3F,_
0x1E, 0xE0, 0xFF, 0x3F,_
0x1E, 0xE0, 0xFF, 0x1F,_
0x1E, 0xC0, 0xFF, 0x0F,_
0x1E, 0x80, 0xFF, 0x0F,_
_
0x1E, 0x00, 0xFF, 0x03,_
0x1E, 0x00, 0xFC, 0x00,_
0x00, 0x00, 0x00, 0x00,_
0x00, 0x00, 0x00, 0x00,_
0x00, 0x00, 0x00, 0x00)

return

'######################################################
'############## chiffre N° 6 ##########################
'######################################################
chiffre6:
hi2cout 0x40,(_
0x00, 0x00, 0x00, 0x00,_
0x00, 0x00, 0x00, 0x00,_
0X00, 0xF0, 0x7F, 0x00,_
0x00, 0xFE, 0xFF, 0x01,_
0x80, 0xFF, 0xFF, 0x07,_
_
0xC0, 0xFF, 0xFF, 0x0F,_
0xE0, 0xFF, 0xFF, 0x1F,_
0xF0, 0xFF, 0xFF, 0x3F,_
0xF8, 0xFF, 0xC1, 0x3F,_
0xF8, 0xE3, 0x01, 0x3F,_
_
0xFC, 0xF1, 0x01, 0x7E,_
0xFC, 0xF0, 0x00, 0x7C,_
0xFC, 0xF0, 0x00, 0x7C,_
0x3E, 0xF0, 0x00, 0x78,_
0x3E, 0xF0, 0x00, 0x78,_
_
0x1E, 0xF0, 0x00, 0x78,_
0x1E, 0xF0, 0x00, 0x78,_
0x1E, 0xF0, 0x01, 0x7C,_
0x1E, 0xF0, 0x01, 0x7C,_
0x1E, 0xF0, 0x03, 0x7E,_
_
0x1E, 0xF0, 0x87, 0x3F,_
0x3E, 0xE0, 0xFF, 0x3F,_
0x3E, 0xE0, 0xFF, 0x1F,_
0x3E, 0xC0, 0xFF, 0x1F,_
0x00, 0x80, 0xFF, 0x0F,_
_
0x00, 0x00, 0xFF, 0x07,_
0x00, 0x00, 0xFE, 0x01,_
0x00, 0x00, 0x00, 0x00,_
0x00, 0x00, 0x00, 0x00,_
0x00, 0x00, 0x00, 0x00)

return

'######################################################
'############## chiffre N° 7 ##########################
'######################################################
chiffre7:
hi2cout 0x40,(_
0x00, 0x00, 0x00, 0x00,_
0x00, 0x00, 0x00, 0x00,_
0x3C, 0x00, 0x00, 0x00,_
0x3C, 0x00, 0x00, 0x00,_
0x3C, 0x00, 0x00, 0x00,_
_
0x3C, 0x00, 0x00, 0x60,_
0x3C, 0x00, 0x00, 0x70,_
0x3C, 0x00, 0x00, 0x7C,_
0x3C, 0x00, 0x00, 0x7E,_
0x3C, 0x00, 0x80, 0x7F,_
_
0x3C, 0x00, 0xC0, 0x7F,_
0x3C, 0x00, 0xF0, 0x7F,_
0x3C, 0x00, 0xFC, 0x3F,_
0x3C, 0x00, 0xFE, 0x0F,_
0x3C, 0x80, 0xFF, 0x07,_
_
0x3C, 0xC0, 0xFF, 0x01,_
0x3C, 0xF0, 0xFF, 0x00,_
0x3C, 0xF8, 0x3F, 0x00,_
0x3C, 0xFE, 0x0F, 0x00,_
0x3C, 0xFF, 0x07, 0x00,_
_
0xFC, 0xFF, 0x01, 0x00,_
0xFC, 0xFF, 0x00, 0x00,_
0xFC, 0x3F, 0x00, 0x00,_
0xFC, 0x1F, 0x00, 0x00,_
0xFC, 0x07, 0x00, 0x00,_
_
0xFC, 0x01, 0x00, 0x00,_
0xFC, 0x00, 0x00, 0x00,_
0x00, 0x00, 0x00, 0x00,_
0x00, 0x00, 0x00, 0x00,_
0x00, 0x00, 0x00, 0x00)

return

'######################################################
'############## chiffre N° 8 ##########################
'######################################################
chiffre8:
hi2cout 0x40,(_
0x00, 0x00, 0x00, 0x00,_
0x00, 0x00, 0x00, 0x00,_
0x00, 0x00, 0xF8, 0x01,_
0xC0, 0x0F, 0xFC, 0x07,_
0xF0, 0x1F, 0xFE, 0x0F,_
_
0xF8, 0x3F, 0xFF, 0x1F,_
0xF8, 0xFF, 0xFF, 0x3F,_
0xFC, 0xFF, 0xFF, 0x3F,_
0xFC, 0xFF, 0x8F, 0x3F,_
0x7E, 0xFC, 0x07, 0x7E,_
_
0x3E, 0xF8, 0x03, 0x7C,_
0x3E, 0xF8, 0x01, 0x7C,_
0x1E, 0xF0, 0x01, 0x78,_
0x1E, 0xF0, 0x01, 0x78,_
0x1E, 0xE0, 0x01, 0x78,_
_
0x1E, 0xE0, 0x03, 0x78,_
0x1E, 0xE0, 0x03, 0x78,_
0x3E, 0xE0, 0x07, 0x7C,_
0x3E, 0xF0, 0x07, 0x7C,_
0x7E, 0xF8, 0x0F, 0x7E,_
_
0xFC, 0xFF, 0x1F, 0x3F,_
0xFC, 0xFF, 0xFF, 0x3F,_
0xF8, 0xFF, 0xFF, 0x1F,_
0xF8, 0x3F, 0xFF, 0x1F,_
0xF0, 0x1F, 0xFE, 0x0F,_
_
0xC0, 0x07, 0xFC, 0x07,_
0x00, 0x00, 0xF8, 0x01,_
0x00, 0x00, 0x00, 0x00,_
0x00, 0x00, 0x00, 0x00,_
0x00, 0x00, 0x00, 0x00)

return

'######################################################
'############## chiffre N° 9 ##########################
'######################################################
chiffre9:
hi2cout 0x40,(_
0x00, 0x00, 0x00, 0x00,_
0x00, 0x00, 0x00, 0x00,_
0x80, 0x3F, 0x00, 0x00,_
0xE0, 0xFF, 0x00, 0x00,_
0xF0, 0xFF, 0x01, 0x00,_
_
0xF8, 0xFF, 0x03, 0x7C,_
0xF8, 0xFF, 0x07, 0x7C,_
0xFC, 0xFF, 0x07, 0x7C,_
0xFC, 0xE1, 0x07, 0x78,_
0x7E, 0xC0, 0x0F, 0x78,_
_
0x3E, 0x80, 0x0F, 0x78,_
0x3E, 0x80, 0x0F, 0x78,_
0x1E, 0x00, 0x0F, 0x78,_
0x1E, 0x00, 0x0F, 0x78,_
0x1E, 0x00, 0x0F, 0x7C,_
_
0x1E, 0x00, 0x0F, 0x7C,_
0x3E, 0x00, 0x0F, 0x3E,_
0x3E, 0x00, 0x0F, 0x3F,_
0x7E, 0x80, 0x8F, 0x3F,_
0xFC, 0x80, 0xC7, 0x1F,_
_
0xFC, 0x83, 0xFF, 0x1F,_
0xFC, 0xFF, 0xFF, 0x0F,_
0xF8, 0xFF, 0xFF, 0x07,_
0xF0, 0xFF, 0xFF, 0x03,_
0xE0, 0xFF, 0xFF, 0x01,_
_
0xC0, 0xFF, 0x7F, 0x00,_
0x00, 0xFE, 0x0F, 0x00,_
0x00, 0x00, 0x00, 0x00,_
0x00, 0x00, 0x00, 0x00,_
0x00, 0x00, 0x00, 0x00)

return
 

dje8269

Senior Member
Bon ben échec sur la partie encodeur ! Le resultat c'est du grand n'importe quoi !!! .

je pense que l'encodeur doit être soi de très très mauvaise facture ou alors il a un prit un choc , car les résultats sont complètement incohérent ou alors je les ai pas compris . des fois j'ai des A=0 et B=1 des fois A=0 et B=0 quand je relâche l'encodeur . bref c'est aucunement logique .

Ave un autre encodeur , sans crans , le même que BESQUEUT : voir par ici . le truc avec le sans cran c'est qu'on doit mémorisé la position quand on s'arrête . Alors que je pense avec le cranté , la position relâché devrait être toujours la même ?

Je n'ai pas le lien DS de celui qui je pense ne fonctionne pas! le code gray est il une obligation ?

En attendant je vais plancher sur celui qui fonctionne, mais sans crans , ce qui n'est pas très pratique pour une sélection de choix ! pour un potar numérique par contre c'est parfait !

Pour le schéma , j'ai pris le même montage qu'ici : site d'electomag, sans l'ecran et sans le BP

Code on ne peut plus simple :

Code:
#PICAXE 08M2


symbol InterA	= pinc.4
symbol InterB    = pinc.3
symbol Compteur  = b1  'compteur
 
setfreq m4		' Met la frequence a 32 mhz
pullup %11000		' Pull up sur C.3 et C.4
 
pause 1000
 
 '##############################
 
main:

do

sertxd ("A=",#InterA," ","B=",#InterB,13,10)

loop
 
Last edited:

MGU

Senior Member
Code on ne peut plus simple :

Code:
#PICAXE 08M2


symbol InterA	= pinc.4
symbol InterB    = pinc.3
symbol Compteur  = b1  'compteur
 
setfreq m4		' Met la frequence a 32 mhz
pullup %11000		' Pull up sur C.3 et C.4
 
pause 1000
 
 '##############################
 
main:

do

sertxd ("A=",#InterA," ","B=",#InterB,13,10)

loop


Bonjour,

Bah oui, mais là, c'est "un peu" trop simple.
Dans ces encodeurs rotatifs, ce n'est pas l'état final qui compte, mais ce qui s'est passé entre l'état de départ et celui d'arrivée, donc, il faut surveiller les transitions et suivant le type d'encodeur, le code n'est pas le même.

Ne prend pas seulement le schéma, regarde aussi le code et les commentaires.

Un lien sur cet encodeur SVP

MM
 

dje8269

Senior Member
Bonsoir Michel,

Bah oui, mais là, c'est "un peu" trop simple.
Lol , oui c'etait juste pour testé , et voir le fonctionnement . Mes tests, m'ont confirmé, que l'encodeur n'était pas génial ou alors , j'ai vraiment rien compris . Cran en bougeant l'axe un tout petit peu , sans sauter de cran, les valeurs changent ?!?? Ou alors il faudrait que je valide une incrémentation sur le changement des deux interrupteurs et non de un seul !.

Dans ces encodeurs rotatifs, ce n'est pas l'état final qui compte, mais ce qui s'est passé entre l'état de départ et celui d'arrivée
Hum.... bien vu ca . Donc a chaque fois que je le tourne les valeur de la position des inter quand je le relâche peu être différentes ?

Ne prend pas seulement le schéma, regarde aussi le code et les commentaires.
oui oui . J'avais juste fais ca pour testé et j'ai bien entendu lu les codes ; la formule de PieM, est tout simplement incroyable, et je la comprends toujours pas . Pourtant j'ai bossé dessus un moment.

Un lien sur cet encodeur SVP
demain promis, je l'ai pas à la maison( la référence pour avoir la DS) , je regarderais la référence au travail . car y'as rien de marqué dessus , impossible de le retrouver.


Sinon je viens de finir une partie du code avec l'encodeur sans crans , mais je suis bloqué par la mémoire ! la réactivité de l'écran est tout simplement incroyable ! celle du picaxe avec la rotation de l'encodeur un peu moins effectivement . si on va trop vite sa n'avance pas ou peu . Si je trouve pas de solution pour ma mémoire je passerais donc avec un 20X2, et par la même occasion ca m'ouvriras les 64Mhz, pour accélérer le traitement des signaux de l'encodeur
 

BESQUEUT

Senior Member
Le code prend énormément de place : Mémoire utilisée = 1839 octets sur 2048 , en sachant que j'ai pas encore mis la façon compte à rebours et surtout avec l'encodeur incrémentale . Je suis donc a la recherche de toute bonne idée pour gagner de la place mémoire . ( sans rajouter de mémoire externe bien sur).
1) La bande vide à gauche et à droite des chiffres est inutile. Effacez l'écran à l'initialisation et ne dessinez que la partie "utile" des chiffres. Ça prends moins de place et de temps....
2) Certaines chiffres ont des parties communes. Utilisez des GOSUB...
3) Il y a surement plus de parties communes (haut du 3, du 6 du 8, du 9,...) en faisant une analyse horizontale plutôt que verticale.
4) Les séquences d'initialisation de la position des chiffres peuvent peut-être se mutualiser en utilisant une variable pour dire quel est la position concernées (et donc en calculant le paramètre des commandes ox21 et ox22. Compte-tenu des difficultés à faire des additions avec un Picaxe, je ne suis pas sur que ça gagne vraiment de la place : il faut tester.
Pour compter les secondes j'utilise donc la fonction "time" , je sais pas si c'est la plus efficace niveau précision ; Je n'ai pas privilégié l'interruption sur le changement de time , car le programme reste très réactif , vu qu'il ne fait que attendre que le timer augmente de 2 ( 32Mhz pour 1 seconde).
J'ai déjà dit, et donc pardon si je me répète lourdement, qu'il ne faut
JAMAIS
remettre à zéro la variable Time si on souhaite un minimum de précision.
En effet, rien de dit que cette remise à zéro se fasse sur un nombre entier de secondes. Il est même certain que ça se fera quelques fractions de secondes après la seconde entière. Donc on fausse volontairement quelque chose qui à priori n'est pas trop mauvais !

Mais alors comment faire ?
Utiliser une variable genre :
Code:
if Time <> w7 then
    GOSUB MettreAjourMachin
    w7=time
endif
Tiens, le lapin blanc est de retour...
 
Last edited:

dje8269

Senior Member
Bonjour ,
J'ai déjà dit, et donc pardon si je me répète lourdement, qu'il ne faut
JAMAIS
remettre à zéro la variable Time si on souhaite un minimum de précision.
Oups !!!! Je le ferais plus :(

Vops trois idées sont bonnes, mais les chiffres n'ont pas tous la même largeur , voir la même hauteur pour certains ( je sais c'est bizarre) . mais creer une barre vide et l'appeller semble vraiement une bonne idée je pense . je vais tester. Mais je me dirige quand même sur un 20X2 . je vais essayer les 64Mhz pour voir . car deja la , c'est vraiment beau . l
a réactivité me permet facilement de compter de 0 à 60 ;En effet au départ je comptais régler les dizaines de minutes, puis les minutes ,; puis les dizaines de secondes , puis les secondes . mais la je regle directement de 0 à 60 en tournant l'encodeur .
 

BESQUEUT

Senior Member
Oups !!!! Je le ferais plus :(
En punition, vous écrirez un programme pour conjuguer le verbe faire au futur simple...
Pas la même hauteur ? C'est rarissime en typographie...
Normalement, seul le 1 est plus étroit et nécessite une bande vide de chaque coté pour le centrage.
C'est à vous de choisir entre typographie "originale" et donc processeur plus puissant, ou typographie "optimisée"et réduction de la taille du code.
 

dje8269

Senior Member
En punition, vous écrirez un programme pour conjuguer le verbe faire au futur simple...
Nonnn ! pas de conjugaison !!!! Je me demande bien comment vous avez pus remarquez que je détestai ça !!! :confused:

Pas la même hauteur ? C'est rarissime en typographie...
Oui juste une ligne de plus sur certain chiffre je me souviens plus lesquel ;
 

BESQUEUT

Senior Member
Nonnn ! pas de conjugaison !!!! Je me demande bien comment vous avez pus remarquez que je détestai ça !!! :confused:
Là par contre, ce sont un participe, un infinitif et un subjonctif...
Mais vous avez raison : on n'est pas là pour parler de ça :)
 
Top