SH1106 et SSD1327

Bonjour,
Je viens de faire un essai.
Si un des fils du GY-21 est déconnecté, la valeur lue dans les registres est 65535 (voir si le SH1106 est identique ?), mais l'écran du SSD est noir à la mise sous tension, sinon, il est figé.
Il suffit donc de faire un test de cette valeur pour afficher une erreur "---,-" par ex. (le caractère - est déjà activé dans la liste).
MM
 
Last edited:
Bonjour,
Je viens de recevoir le SH1106, plus grand et beaucoup plus lisible que le SSD.
Après quelques ajustements, tout est OK!
Avec un affichage en cas de GY déconnecté:

SHG1106.jpg
Et le mode erreur (sda débranché):
SH1106 err - 1K JPEG.jpg
Revient en mode normal si erreur réparée
Le code:
MM
 

Attachments

Bonjour,
Une bonne nouvel. Je regardé tous ça demain après midi.
Pour info, pour avoir un affichage stable, j'ai eu besoin 'une R de tirage (vers + Vdd) sur sda mais rien sur scl ...Pourquoi ?? Peut être lié au montage sur ma console de test...
MM
 
Bonjour.
En fait ton module GY-21 possède déjà des résistance pull up de 4k7 pour le bus i2c. Regarde le lien dans présentation.
Du coup ci tu déconnecte ton GY-21 tu doit ajouté les résistance de 4k7 si tu veux que le SH1106 fonctionne correctement.

Bonjour,
Ben, justement, les pull up de 4k7 sont déjà présentes, donc, il n'y a pas normalement besoin d'en ajouter. Et là, sans une R en plus sur sda, (et pas sur scl), c'est instable, c'est bizarre . Je parle du fonctionnement normal, sans débranchement.
MM
 
Je suis entrain de crée un programme a mètre sur un 20x2 pour permettre de commander un SH1107 en lui envoilant des codes avec un deuxième picaxe qui se présenterons comme ceci :

SEROUT b.7, N9600_64,(DrawsRectangle,39,39,50,50)
do
loop until Status=1

SEROUT b.7, N9600_64,(ClearRectangleStipple,39,39,50,50)
do
loop until Status=1

SEROUT b.7, N9600_64,(ClearRectangle,39,39,50,50)
do
loop until Status=1

SEROUT b.7, N9600_64,(DrawsPixel,64,64,0,0)
do
loop until Status=1

SEROUT b.7, N9600_64,(DrawsCircle,64,64,10,10)
do
loop until Status=1
 
Je parlais de celui poster dans #55 (Lib_SH1106_PICAXE_20X2_V2). C'est la version tout option. C'est celui ci que je suis entrain de modifier pour commander un SH1107 avec un second picaxe en envoilent des codes.
 
A tu testé mon programme sur ton SH1106 ?
Bonjour,
Sur un 20X2, à 64MHz, contraste à 255.
J'obtiens un demi cercle, avec un rayon, et un petit carré qui se dessine, s’efface, se dessine, etc
Et SH1106
Avec les caractères inutiles en commentaire (;), on a exactement la même chose en passant de 3800 à 1782 mémoires
MM
 
Bonjour,
C'est un programme de démonstration. Le code qui commande le programme dois être écrie dans StarCode.
Le petit carré qui se dessine, s’efface sers a présenter le programme pour montré les possibilités offerte.
Tu peut animé l"aiguille en ajoutant ce code:

b41 = b40
readtemp c.1, b40
if b41 = b40 then

x1 = 58'x_LongeurDeLaLigneEnPixel
'AngleX1 = 175'AngleDeLaLigneEndegres ( mini0 maxi 360)
AngleX1 = b40 *2 + 180
x0 = 63'x_CordonnerDepartEnPixel
y0 = 63'y_CordonnerDepartEnPixel
stipple = 0
ClearPixel = 0
gosub DrawsLine 'dessine une ligne
else
x1 = 58'x_LongeurDeLaLigneEnPixel
'AngleX1 = 175'AngleDeLaLigneEndegres ( mini0 maxi 360)
AngleX1 = b41 *2 + 180
x0 = 64'x_CordonnerDepartEnPixel
y0 = 63'y_CordonnerDepartEnPixel
stipple = 0
ClearPixel = 1
gosub DrawsLine 'dessine une ligne
endif

C'est un exemple pour une sonde de température DS18B20 mais tu devrais pouvoir l'adapter selon tes besoin.

Maintenant le but sera de trouver le moyen d'appeler les commande du programme a partir d'un second picaxe en utilisant par exemple:

high Status
serin [100 ,main],Com, N9600_64,CodeSelect : Code_X = 0
serin [5,Graphique],Com, N9600_64,Code_X : Code_Y = 0
serin [5,Graphique],Com, N9600_64,Code_Y : x1 = 0
serin [5,Graphique],Com, N9600_64,x1 : y1 = 0
serin [5,Graphique],Com, N9600_64,y1 : y2 = 0
serin [5,Graphique],Com, N9600_64,y2

pour recevoir les donner .
Je suis entrain de regarder ça mais pour le moment , il y a beaucoup de bug. Le programme ne sera pas disponible tous de suite.
De plus, il faudra que je mète les caractères dans une 24LC512.
 
Last edited:
Bonjour,
Voici une version betta du programme.
Pour le moment , il ne prend pas en charge le texte. Seul les fonctions graphique sont utilisable.
Le fichier (SH1107_PICAXE_20X2_SensCarracteres_9600) a mètre sur le 20x2 qui contrôle le SH1107 et le second fichier (Commande_SH1107_9600)
a métre sur le second picaxe
 

Attachments

Bonjour,
Voici une version betta du programme.
Pour le moment , il ne prend pas en charge le texte. Seul les fonctions graphique sont utilisable.
Le fichier (SH1107_PICAXE_20X2_SensCarracteres_9600) a mètre sur le 20x2 qui contrôle le SH1107 et le second fichier (Commande_SH1107_9600)
a métre sur le second picaxe
Bonjour,
Le projet évolue, mais quel est le but final? Que comptes tu faire de tout cela ?
D'autre part, je vois les variables binaires bit0 à bit15.. Ces variables sont b1 et b0, utilisés d'autre part. Y a t il un risque de conflit ?
Il est utile de déclarer en tête le picaxe utilisé (#picaxe 20X2), la détection d'erreurs de syntaxe est améliorée.
Tu dis vouloir placer le tableau des caractères en mémoire annexe 20LC512, mais auras tu besoin de TOUS les caractères?
MM
 
Il n'y a pas de risque de conflit avec les variable b0 et b1 qui correspond au variables binaires bit0 à bit15. C'est volontaire. Car ci non il ne serais pas possible de dessiner des formes géométriques. Mais ci tu pose la question c'est que tu n'a pas compris comment le programme fonctionne.
Je vais donc te le décortiquer pour que tu comprenne.
Ci on veut dessiner un pixel
Tout d'abors on a:
select case R_graphiqueLCD
case 0 : R_graphiqueLCD = 0x01
case 1 : R_graphiqueLCD = 0x02
case 2 : R_graphiqueLCD = 0x04
case 3 : R_graphiqueLCD = 0x08
case 4 : R_graphiqueLCD = 0x10
case 5 : R_graphiqueLCD = 0x20
case 6 : R_graphiqueLCD = 0x40
case 7 : R_graphiqueLCD = 0x80
endselect

qui correspond a un segment d'une page sur l'afficheur.
Si y = 0 je vais me retrouver dans la case 0 de (R_graphiqueLCD) donc sur mon premier segment j'aurais ceci : 0000001
ci sur ce même segment je veut allumer un second pixel y = 1, je me retrouve avec ceci : 0000010.
je ne peut donc pas le faire.
Du coup je dois commencer par charger le contenu de nom segment (hi2cin SETSTARTLINE,(BitTempon,L_graphiqueLCD))
je récupère ( L_graphiqueLCD) qui vaut 0000001 dans mon exemple. (Symbol L_graphiqueLCD = b0).
J'isole les bits des l'exemple :
if bit0 = 1 then : bit8 = 1 endif
if bit1 = 1 then : bit9 = 1 endif
ensuite je peut écrire:
hi2cout (SETSTARTLINE,R_graphiqueLCD) (Symbol R_graphiqueLCD = b1)
qui vaut maintenant : 00000011.

Pour info l'afficheur fonctionne comme ceci (exemple):
hi2cin SETSTARTLINE,(b3,b1,b2)
hi2cout (SETSTARTLINE,b1,b2,b3)
Il faut minimum charger 2 varriables (hi2cin SETSTARTLINE,(BitTempon,L_graphiqueLCD) ci on en charge qu'une on aurai une fois sur 2
la valeur b28 et b1 charger.

( Symbol BitTempon = b28 ) qui n'est pas utiliser mais nécessaire pour que l'afficheur sache dans quel sens charger les valeurs.
 
Last edited:
Il n'y a pas de risque de conflit avec les variable b0 et b1 qui correspond au variables binaires bit0 à bit15. C'est volontaire. Car ci non il ne serais pas possible de dessiner des formes géométriques. Mais ci tu pose la question c'est que tu n'a pas compris comment le programme fonctionne.
Je vais donc te le décortiquer pour que tu comprenne.
Merci, j'avoue avoir regardé tout cela très superficiellement, sans y voir toutes les subtilités. Ce n'était qu'une simple question.
MM
 
Bonjour,
Voici une nouvelle version du pilote SH1106 (SH1106_PICAXE_20X2_AvecCarracteres_9600)
ou
SH1107 (SH1107_PICAXE_20X2_AvecCarracteres_9600)
au chois a mettre sur un picaxe 20x2 . Le pilote prend en charge le texte (12 carracteres maxi)
Les fichiers (Commande_SH1106_9600) et (Commande_SH1107_9600) , sont a mètre sur le second picaxe
Les photos montre ce que fond les codes:
 

Attachments

Bonjour,
Je viens juste de recevoir mon module GY-21. Je viens de réaliser des mesures entre : Vin et SCL et j'ai une valeur de 10 k et entre Vin et Sda
une valeur de 10k . Ce qui expliquerais le rajout d'une résistance de 10 k sur SDA pour un affichage stable puisque SDA est le signale qui doit être parfaitement propre pour que l'afficheur puisse fonctionner correctement. SCL est la fréquence d'horloge qui n'a pas besoin d'être parfaitement propre. N'oublions pas que sur un bus i2c les résistance de tirages doivent avoir une valeur de 4K7.

Je testerais la sonde cette après midi.
 
Bonne année a toi aussi. je viens de faire un essais , le module GY-21 est très réactif niveau mesure pour le tau d' humidité.
Tu métra des photos quand tu aura mis le total dans un petit boitier.
Oui j'avais déjà vus la page sur ton site sur le GY21 et le SH1106. C'est intéressant de pouvoir faire un appareil miniature pour connaitre le tau d' humidité est la température.
Ton programme fonctionne parfaitement bien. Et quand je retire le module , les --- s'affiche a la place des valeurs. Tous est conforme.
Merci a toi , ce programme me sera trés utile.
 
Last edited:
Bonjour,
Voici des nouveau carractéres (chiffres) en version hauteur 16 pixel et 8 pixel en longueur.
Le programme a été tester sur un 20x2 et un SH1107.
Il y a donc deux police de carractére possible. Plus tard, je ferais la même chose pour les lettres. Car c'est très long.
Il faut déjà les dessiner avec pain.net et ensuite les encoder.
Il s'agi du programme de démonstration du GY21 de MGU.
Les valeurs son beaucoup plus visible avec la nouvelle police.
 

Attachments

Last edited:
Bonjour,
Voici des nouveau carractéres (chiffres) en version hauteur 16 pixel et 8 pixel en longueur.
Le programme a été tester sur un 20x2 et un SH1107.
Il y a donc deux police de carractére possible. Plus tard, je ferais la même chose pour les lettres. Car c'est très long.
Il faut déjà les dessiner avec pain.net et ensuite les encoder.
Il s'agi du programme de démonstration du GY21 de MGU.
Les valeurs son beaucoup plus visible avec la nouvelle police.
Bonjour Anubis,
J'avais bien l'intention de me fabriquer un joli afficheur de température et humidité.
Hélas, LIDL a commercialisé de tous petits afficheurs, à moins de 8 € les trois.
J'ai lâchement abandonné...
Mais je garde tes programmes pour d'autres applications
MM
tempH.jpg
 
Bonjour,

Quel dommage d'avoir lâchement abandonné. Ci ça t 'intéresse MGU,

J'ai mis a jour le jeu de caractères précéda-ment mis en (#103). finalement je ne dessinerais pas les lettres car cela prend énormément le mémoire.
J'ai optimiser la nouvelle police de caractères qui sera valable uniquement pour les chiffres de façon qu'elle sois simple d'utilisation.
exemple:

Avec l'ancienne police de caractères.

for LongeurNumASCII = 0 to 5
lookup LongeurNumASCII,(4," ",cen,unit,",",decim), NumASCII
if bit0=1 and LongeurNumASCII>0 then
NumASCII = "-"
endif
gosub Numero
next

deviens:

for LongeurNumASCII = 0 to 5
lookup LongeurNumASCII,(5," ",cen,unit,",",decim), NumASCII
if bit0=1 and LongeurNumASCII>0 then
NumASCII = " "
endif
gosub Numero_16
next

Avec la nouvelle police de caractères.
On ne peut pas faire plus simple.
Je te laisse découvrir le code remis en (#103) . Tu me dira ce que tu en pence.
 
Last edited:
Bonjour,

Quel dommage d'avoir lâchement abandonné. Ci ça t 'intéresse MGU,

J'ai mis a jour le jeu de caractères précéda-ment mis en (#103). finalement je ne dessinerais pas les lettres car cela prend énormément le mémoire.
J'ai optimiser la nouvelle police de caractères qui sera valable uniquement pour les chiffres de façon qu'elle sois simple d'utilisation.
exemple:

Avec l'ancienne police de caractères.

for LongeurNumASCII = 0 to 5
lookup LongeurNumASCII,(4," ",cen,unit,",",decim), NumASCII
if bit0=1 and LongeurNumASCII>0 then
NumASCII = "-"
endif
gosub Numero
next

deviens:

for LongeurNumASCII = 0 to 5
lookup LongeurNumASCII,(5," ",cen,unit,",",decim), NumASCII
if bit0=1 and LongeurNumASCII>0 then
NumASCII = " "
endif
gosub Numero_16
next

Avec la nouvelle police de caractères.
On ne peut pas faire plus simple.
Je te laisse découvrir le code remis en (#103) . Tu me dira ce que tu en pence.
Bonsoir Anubis,
Merci, je reviendrai bien sûr sur ces afficheurs très pratiques, mais j'ai actuellement des projets de bricolage sur une 4L...entre autres...
A bientôt
MM
 
Bonjour,
J'ai réussi a configurer un SSD1327 pour le rendre utilisable avec un picaxe 20x2.

Voici le code minimum pour dessiner 3 pixels avec son intensité lumineuse sur un SSD1327.
Le programme est valable pour un PICAXE 20X2.
L'intensité des pixels se règle de 0 a 255 comme ceci :

hi2cout (SETSTARTLINE,15,8,15) 'Intensité des pixels (Mini 0 Maxi 15)

Chaque valeur contrôle 2 pixels : le 15 mais le premier pixel a son intensité lumineuse au maximum et le second et étain
Ci on veut faire le contraire , il faudra mètre la valeur a 240 a la place du 15.
Ci on veut allumer les 2 pixels a leur intensité lumineuse maxi , il faut mètre 255.

240 = 11110000
15 = 00001111

les 4 premier bitt contrôle le premier pixel et les 4 second bitt contrôle le second pixel

Le programme présenté affiche 3 pixels espacer d'un pixel au centre de l’écran. Voir la photo.
A noté que le SSD1327 ne fonctionne pas sur une tension de 5 voltes. dans ce programme il fonctionne sur une tension de 4,6 Voltes.
 

Attachments

Last edited:
Bonjour,
Sur la datasheet, le SSD1327 est donné pour 4V max. , 3,5V ou 3,3 V serait donc plus sécure pour lui.
Pourquoi un 20X2 à 64MHz, un 08M2 à 32MHz en 3,5V donnerait probablement des résultats, si il n'y a pas d'incompatibilités que j'ignore.
Merci de faire découvrir ces afficheurs sympathiques...
MM
 
Bonjour,
Mon afficheur SSD1327 est donner pour fonctionner entre 3,3 v mini et 5,0 v maxi (voir le lien au je l'ai acheté) :


Le programme pourrais fonctionner sur un 08M2 a 32Mhz. Mais attention se sera plus lent dans l'exécution car on ne contrôle que 2 pixels a la fois au lieu de 8 pixels comme sur un SH1106-07. Ces 2 afficheurs SH1106-07 et SSD1327 son totalement compatibles avec un picaxe. Cependant le SSD1327 demandera un programme un peut plus volumineux puisque il y a la luminosité du pixel a géré en 16 niveau d'intensité.
 
Bonjour,
Une librairie pour utiliser un SSD1327 via un picaxe 20x2 est en court de fabrication. Je la métrais a disposition d'ici 1 mois car en ce moment je n'est pas beaucoup de temps. La photo montre en avent première ce qui est possible de faire. La librairie ne prend pas en charge le texte car j'ai des bugs avec la fonction ( DrawsPixel ) que je dois d’abord finir de corriger avent de passer a la suite.

Comme le montre la photo , il sera possible de dessiner des carré , des rectangles, des cercles , des ellipse , des lignes avec l'inclinaison en degré par rapport a x , et des pixels le tous avec des niveaux de gris différant.
 

Attachments

  • SSD1327_22-03-2026 .jpg
    SSD1327_22-03-2026 .jpg
    48 KB · Views: 2
Bonjour,

Pour mon SSD1327, je voudrais lire le contenu d'un segment. J'ai procéder de la même façon que pour le SH1106 et SH1107.
Le problème c'est que quand par exemple R_Color = 15 , je me retrouve avec L_Color = 2 et BitTempon = 2.
Ci je change la valeur de R_Color la valeur de L_Color et toujours égale a 2. Le code teste est disponible en piéce jointe.
Sur le SSD1327, il sera dessiner un pixel au centre de l'afficheur pour le teste.
J'ai absolument besoin de lire le contenu d'un segment ci je veux pouvoir dessiner des forme géométrique sen bug d'affichage.
 

Attachments

Bonjour,
J'ai peur de ne pas pouvoir t'aider, je ne vois déjà pas de quel segment il s'agit...
Où est produit ce segment ?
MM
 
Bonjour,

Il s'agi de ce segment:

x = 32 : y = 64
R_Color = 15

gosub SetPosition : hi2cout (SETSTARTLINE,R_Color)

( R_Color ) désigne un segment composer de 2 pixels dans le sens horizontale de l'afficheur. Le 15 désigne le segment de droite a son intensité lumineuse maxi car (15 = 00001111) . ( x = 32 car 2 segment ) et ( y = 64 ) désigne ses cordonner.

Ensuite, j'aimerais pouvoir recharger ces valeurs pour le teste en procédant de cette façon avec ses même cordonner :
x = 32 : y = 64
gosub SetPosition : hi2cin SETSTARTLINE,(BitTempon,L_Color)

Normalement pour ( L_Color ) , je devrais lire ( L_Color = 15 ) sauf que dans mon teste , je me retrouve avec ( L_Color = 2 ).
Ci je change ( R_Color = 240 ) , L_Color est toujour égale a 2 .

Autre chose. J'ai trouvez comment afficher du texte avec le SSD1327 cela est possible avec la fonction Set Re-map ( A0 ) ci ça t’intéresse.
 
Bonjour,
Merci, J'ai lâché un peu les afficheurs actuellement.
Pour ton problème, je ne vois pas ce que je peux faire, je dirais sans doute des bêtises..
MM
 
Bonjour,

Ok . Merci tu ma déjà pas mal aider.
Voila une librairie ( Lib_Texte_SSD1327_PICAXE_20X2 ) faite maison comme promis pour afficher du texte sur un SSD1327 a partir d'un picaxe 20x2.
Il y a 2 polices de disponible . La photo montre ce que fais le programme.

Pour mon autre problème , je regarderais dans une librairie arduino pour voir ci il y a pas une manip a faire pour activer la ram par exemple.
 

Attachments

Bonjour,

Ok . Merci tu ma déjà pas mal aider.
Voila une librairie ( Lib_Texte_SSD1327_PICAXE_20X2 ) faite maison comme promis pour afficher du texte sur un SSD1327 a partir d'un picaxe 20x2.
Il y a 2 polices de disponible . La photo montre ce que fais le programme.

Pour mon autre problème , je regarderais dans une librairie arduino pour voir ci il y a pas une manip a faire pour activer la ram par exemple.
Bonjour,
Merci pour cette nouvelle police de chiffres.
MM
 
Back
Top