Bienvenue aux nouveaux arrivants sur FantasPic !

- Pensez à lire les règles durant votre visite, il n'y en a pas beaucoup, mais encore faut-il les respecter .
- N’hésitez pas à faire des remarques et/ou suggestions sur le Forum, dans le but de l'améliorer et de rendre vos prochaines visites plus agréables.
- Vous pouvez regarder votre "panneau de l'utilisateur" afin de configurer vos préférences.
- Un passage par "l'utilisation du forum" est recommandé pour connaître les fonctionnalités du forum.

--- L’équipe FantasPic ---
Forum général sur le langage C !

Modérateur : Jérémy

test OLED DM13-625 SPI driver SSD1106
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 2589
Âge : 73
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#1 Message par paulfjujo » lun. 27 sept. 2021 19:09

bonsoir,


Je viens de recevoir un OLED 1,3" en mode SPI/I2C .. MAIS ce n'est pas un modele SSD1306 !
je l'ai testé avec la version ASM de TempsX , mais probleme d'affichage bigorné..
Je reprends donc à zero, mais en C !
avec la datasheet du OLED
DM-OLED13-625_SH1106_Datasheet.pdf



J'utilise la lib SPI1 Hardware de mikroC
Test liaison SPI OK avec SQA analyser.

en me fiant à l'init montrée dans la datasheet page 16 -> RIEN !
j'ai donc utilisé l'init donnée dans l'ordinogramme page 14

Code : Tout sélectionner



Hardware
:
//  SPI1
sbit Chip_Sel at LATC0_bit;//RC0 active ou désactive la transmission
sbit RES at  LATC.B1;  //RC1  reset de l'écran
sbit DC_mode  at  LATC.B2;  //RC2 sélection du mode : commande = 0 , donnée = 1
sbit Sck at  LATC.B3;  // RC3 horloge de synchronisation  SPI
sbit MOSI at LATC.B5; // RC5 envoye les données sur écran oled 128x64

sbit Chip_Sel_Dir at TRISC0_bit;
sbit RES_dir at       TRISC.B1;  //RC1  reset de l'écran
sbit DC_mode_dir  at TRISC.B2;
sbit Sck_dir at  TRISC.B3;  // RC3 horloge de synchronisation  SPI
sbit MOSI_dir at TRISA.B5;



unsigned char Init_A_Chaine[]={
// init page 14 datasheet  DM-OLED13-625
 0xD5,0x80,
 0xA8,0x3F,
 0xD3,0x00,
 0x40,
 0xAD,0x8B,
 0xA1,
 0xC8,
 0xDA,0x12,
 0x81,0xBF,
 0xD9,0x22,
 0xDB,0x40,
 0x32,0xA6,
 0xAF,
 0xFF  // terminateur !
 };

 


j'ai reutilisé mon affichage de char defini pour un OLED SSD1306
et réussi à afficher 4 lignes avec des chars
une ligne de cracra verticale apparait en bout d'ecran
ce qui confirmerait (?) que la RAM ecran est de 132x64 au lieu de 128x64
voir video ....

Test_2_OLED_SPI_1-3p_ABCD_2021-0927.jpg


rajouté l'ecriture de A en position X=4 sinon il est un peut bouffé sur le coté et char Z en 120
Nota: si j'ecris le char 'Z' en position X=124 on le voit en entier ! il y a bien 132 position sens X! sinon il serait bouffé coté droit

Code : Tout sélectionner


CPrint
(" Init (A) OLED 1,3\" SSD1106 LCD 128x64\r\n");
   RES=1;
   Delay_ms(100);
   RES=0;
   Delay_ms(1000);
   RES=1;
   Delay_ms(1000);
   SPI1_Write(0xAE);    // display OFF
   i=0;
    SQA=1;
   Chip_Sel=0;
   SQA=0;
   do
   
{
     Led_R=0;
    SPI1_Write(Init_A_Chaine[i]);
    Led_R=1;
   //SQA=0;
  i++ ;
   }while (Init_A_Chaine[i]<0xFF) ;
 do
  
{
   SQA=0;
   Chip_Sel=1;
   Delay_ms(100);
   Chip_Sel=0;
   OLED_CLS();
   OLED_SetPos(0,0);
   Write_Char_At(4,1,'A');
   Write_Char_At(124,1,'Z');  // occupe la place de 124 à 131 
   Delay_ms(2000);
   OLED_CLS();

  CPrint(" ABCD ligne 1\r\n");
   Chip_Sel=0;
   OLED_CLS();
   OLED_SetPos(0,0);
   Write_Char_At(8,1,'A');
    Write_Char_At(16,1,'B');
     Write_Char_At(24,1,'C');
      Write_Char_At(32,1,'D');
       Chip_Sel=1;
        Delay_ms(1000);
   CPrint(" EFGH ligne 3\r\n");
   Chip_Sel=0;
   Write_Char_At(40,2,'E');
    Write_Char_At(48,2,'F');
     Write_Char_At(56,2,'G');
      Write_Char_At(64,2,'H');
       Chip_Sel=1;
       Delay_ms(1000);
   CPrint(" IJKL  ligne 3\r\n");
   Chip_Sel=0;
   Write_Char_At(72,3,'I');
    Write_Char_At(80,3,'J');
     Write_Char_At(88,3,'K');
      Write_Char_At(96,3,'L');
       Chip_Sel=1;
        Delay_ms(1000);
   CPrint(" MNO  ligne 4\r\n");
   Chip_Sel=0;
   Write_Char_At(104,4,'M');
    Write_Char_At(112,4,'N');
     Write_Char_At(120,4,'O');
       Chip_Sel=1;
   Delay_ms(1000);
   _asm btg LATA,4
   
//    CPrint(" image4 128x64 (C) cheval \r\n");
  }
  while(1);



fichier hex de ce test
OLED_SPI_DM13_625_18F26K22_2021-09.zip
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Aide toi, le ciel ou FantasPic t'aidera

test OLED DM13-625 SPI driver SSD1106
Jérémy
Administrateur du site
Administrateur du site
Messages : 2722
Âge : 44
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#2 Message par Jérémy » lun. 27 sept. 2021 20:16

Bonsoir à tous,

Il me semble avoir aussi quelques déboires avec ce genre d'écran.
JE faisais un RAZ memoire au démarrage, et je crois que j'avais un offset aussi sur des axes.

Bon courage Paul !
C'est en faisant des erreurs, que l'on apprend le mieux !!!

test OLED DM13-625 SPI driver SSD1106
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 2589
Âge : 73
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#3 Message par paulfjujo » mar. 28 sept. 2021 20:36

bonsoir,

il y a 4 pixels qui trainent sur les lignes (horizontales)
Pour effacer COMPLETEMENT l'ecran , en particulier le cra cra qui restait sur la partie droite de l'ecran
je suis obligé de razer 132x64 pixels au lieu de 128x64..
de plus avec les memes commandes que le SSD1306, il faut que je rajoute 4 pixels sur l'origine des X pour
que les caracteres ne soit pas à moitié bouffés.. le dernier caractere de la ligne commençant en 124 ( ou lieu de 120)
124+8=132 ...
Le resultat actuel N'EST PAS PARFAIT ! voir 1ere ligne en haut des images BMP ??
d'ou vient ce probleme de 4 pixels ???

nota: j'utilise SPI1 Hardware du 18F26K22

lien sur le source du projet mikroC
avec projet zippé. (dont le *.hex)
lien surla video de ce Test

nota pour Temps X : je n'ai pas pu tester ta version asm .. l'ecran reste noir..
Aide toi, le ciel ou FantasPic t'aidera

test OLED DM13-625 SPI driver SSD1106
satinas
Expert
Expert
Messages : 1225
Enregistré en : novembre 2015

#4 Message par satinas » mar. 28 sept. 2021 22:15

Bonsoir Paul et à tous

As-tu essayé un décalage de 2 plutôt que 4 ?
https://forum.arduino.cc/t/whats-the-di ... 6/247368/5

test OLED DM13-625 SPI driver SSD1106
Temps-x
Avatar de l’utilisateur
Expert
Expert
Messages : 2596
Enregistré en : juillet 2016
Localisation : Terre

#5 Message par Temps-x » mer. 29 sept. 2021 00:24

Bonsoir paulfjujo, satinas, et tout le forum,

paulfjujo a écrit :Source du message je suis obligé de razer 132x64 pixels au lieu de 128x64

C'est une erreur de faire cela, tu vas démarrer avec 32 pixels de plus sur ton écran, et quand tu vas lire une image tu vas avoir un décalage d'une ligne vers le haut

Quand tu arrives à la fin de ton écran tu as 128 pixels, si tu continus a écrire sans revenir à la ligne tu écrits en ram, mais en même temps sur ton écran, ce qui nous fait.

128 pixels x 8 lignes = 1024 pixels
132 pixels x 8 lignes = 1056 pixels

:sifflotte: Tu n'auras pas de problème avec les caractères, mais avec tout ce qui est graphique, tu on auras si tu continus dans la direction que tu es parti, j'ai tout expliqué ICI

paulfjujo a écrit :Source du message nota pour Temps X : je n'ai pas pu tester ta version asm .. l'ecran reste noir..

J'ai refait un essai, et ça fonctionne très bien chez moi avec le fichier que j'ai déposé sur le forum de Fantas-Pic, c'est le même fichier que tu as essayé et qui fonctionnait sur ton écran, j'ai seulement rajouté 10 lignes de plus, qui n’ont rien a voir avec le démarrage de l'écran.

Nota : j'ai branché tout les fils (qui son au nombre de 7 fils avec alimentation de comprise)

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

test OLED DM13-625 SPI driver SSD1106
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 2589
Âge : 73
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#6 Message par paulfjujo » mer. 29 sept. 2021 19:11

bonsoir,


Affichage BMP correct avec decalage x de 4 pixels par ligne
car avec une config SSD1306 , les cracra ne sont qu'à droite et le 1er char est bouffé à moitié

malgré ceci :

(1) About control chip SSH1106:
SSG1106 compatible with SSD1306 basic, difference is that SSH1106 control chip RAM space is 132*64,
while SSD1306 space is 128*64.
The 1.3-inch OLED 128*64 dot matrix, so in the middle of the screen production took 128 row.
When using SSD1306 program point SSH1106 screen, only need to change address to 0x02 row to start.
(2) There is only one small difference between SSD1306 and SH1106:
The SH1106 controller has an internal RAM of 132x64 pixel.
The SSD1306 only has 128x64 pixel.

First problem for standard 128x64 OLEDs with SH1106 controller is:
How is the 128x64 window mapped into the 132x64 RAM?
It seems, that the 128x64 OLED is centered in most cases within the 132x64 area,
that means pixel (2,0) in ram is pixel (0,0) on the display.


Etonnant qu'on ne trouve pas de trace de tout cela, dans la datasheet !
Une VRAI explication serait bienvenue.

test avec 7 images BMP ..OK
sauf un petit probleme avec 2 fichier image en include fichier H (images BMP)
m'obligeant à mettre le contenu dans le source ..je ne sais pas encore pourquoi ?
les 5 autres fichiers include sont pourtant OK ..

Code : Tout sélectionner


Les fichiers 
*.h contiennent les images BMP en N&, de 1024 bytes ( pour 128x64= 8192 bits -> 8192/8=1024 Bytes)

#include "../__common/BMP_128x64_Cheval.h"
#include "../__common/BMP_128x64_Vumetre.h"
#include "../__common/BMP_128x64_Popeye.h"
#include "../__common/BMP_Truck.h"
#include "../__common/BMP_Bip_bip_Coyote_128x64.h"
//#include "../__common/BMP_128x64_Monroe_blanc.h"
//#include "../__common/BMP_Tigre_128x64.h"
Les pointeurs ..
unsigned const char *p1;
unsigned const char *Tableau_BMP[]={cheval,Bip_bip_Coyote_128x64,Popeye_Olive,Vumetre,truck_bmp} ;
unsigned const char *Tableau_Titre[]={" cheval"," Bip_bip et Coyote","Popeye et Olive","Vu metre","Truck"}

l' affichage en boucle

for (i=0;i<5;i++)
{
CPrint(" Image :"); UART1_Write(i+49);UART1_Write('
 ');
CPrint(Tableau_Titre[i]); CRLF1();
SH1106_ClearDisplay();
p1=Tableau_BMP[i];
Display_Picture(p1) ;
Delay_2sec();
}

rajoutd'
un  parametre , pour affichage inverse video , dans la fonction :
void Display_Picture(unsigned const char * pic, char Reverse)
...
cz= (*(pic+k));
if (Reverse==0) WriteDat(cz); else WriteDat(~cz);



exemple affichage normal,puis reverse

Capture-Symboles.jpg


sur terminal YAT
Image :1 cheval
Image :2 Bip_bip_Coyote_128x64
Image :3 Popeye_Olive
Image :4 Vumetre
Image :5 truck_bmp
Image :6 Monroe_128x64_bmp
Image :7 Marilyn-Monroe_blanc
Image :8 paulfjujo

.... + Symboles Normal et reverse

voir video sur ma page web..

source complet et Hex dispo !
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Aide toi, le ciel ou FantasPic t'aidera

test OLED DM13-625 SPI driver SSD1106
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 2589
Âge : 73
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#7 Message par paulfjujo » dim. 3 oct. 2021 19:12

mise à jour...

suite à l'imperfection de l'image "Symboles" on ne voyait pas la 1ere jambe de la lettre U du mot USE
avec au final un decalage de seulement 2 pixel sens X
l'image de 128 pixel s'affiche entre x=2 et x=130 !

un nouveau probleme rencontré
avec les #include des images BMP inclus dans le programme principal .
PB au delà de 6 fichiers images BMP inclus
si le contenu du fichier est directement inclus dans le source , no problemo !

1 371 Specifier needed bmp_tigre_128x64.h
1 396 Invalid declarator expected'(' or identifier bmp_tigre_128x64.h
598 324 Undeclared identifier 'Tigre' in expression OLED_SPI_DM13_625_18F26K22_2021_1003.c

y aurait-il un nombre maxi de fichiers pouvant etre inclus ?
fichier avec suffixe *.h ou *.Inc ou *.txt c'est idem
je ne me suis pas attardé la dessus .. mais j'aime bien comprendre !
Aide toi, le ciel ou FantasPic t'aidera

test OLED DM13-625 SPI driver SSD1106
Temps-x
Avatar de l’utilisateur
Expert
Expert
Messages : 2596
Enregistré en : juillet 2016
Localisation : Terre

#8 Message par Temps-x » lun. 4 oct. 2021 00:26

Bonsoir paulfjujo, et tout le forum,

paulfjujo a écrit :Source du message mise à jour...


Merci ! pour cette mise à jour que j'ai lu avec attention, mais j'ai voulu télécharger le fichier : Zip mikroC : OLED_SPI_DM13_625_18F26K22_2021-0929.zip

:sad: malheureusement impossible, j'ai un message qui me renvoi sur la page de free :roll: même si je fais pas du mikroC j'arrive à le comprendre, et c'est toujours instructive.

Je regarde très souvent ton site, que s'apprécie beaucoup, :bravo: pour tout cette mine de documentation 8-)

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

test OLED DM13-625 SPI driver SSD1106
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 2589
Âge : 73
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#9 Message par paulfjujo » lun. 4 oct. 2021 08:42

bonjour Temps-X et à tous,

Temps-x a écrit :.....
Merci ! pour cette mise à jour que j'ai lu avec attention, mais j'ai voulu télécharger le fichier : Zip mikroC : OLED_SPI_DM13_625_18F26K22_2021-0929.zip
:sad: malheureusement impossible, j'ai un message qui me renvoi sur la page de free :roll: même si je fais pas du mikroC j'arrive à le comprendre, et c'est toujours instructif.


:sifflotte: petit erreur de mise à jour, pointe maintenant sur la derniere version ZIP du 3/10

un petit UP sur le post #7
Pourquoi mon fichier include concernant l'image Tigre genere cette erreur
alors que j'ai déja inclus d'autres fichiers images auparavant , sans qu'une erreur soit generée
et que si j'incorpore directement le contenu du fichier Tigre , je n'ai pas d'erreur .
:sifflotte: AI-je fais ( encore) une boulette ou si c'est un MikroC probleme ?
Aide toi, le ciel ou FantasPic t'aidera

test OLED DM13-625 SPI driver SSD1106
Temps-x
Avatar de l’utilisateur
Expert
Expert
Messages : 2596
Enregistré en : juillet 2016
Localisation : Terre

#10 Message par Temps-x » mar. 5 oct. 2021 00:01

Bonsoir paulfjujo, et tout le forum,

paulfjujo a écrit :Source du message Pourquoi mon fichier include concernant l'image Tigre genere cette erreur

Aucune idée, j'ai regardé le fichier tigre, et je n'ai pas vue d'erreur dessus, apparemment tu travailles en décimal sur les fichiers graphique.
paulfjujo a écrit :Source du message :sifflotte: AI-je fais ( encore) une boulette ou si c'est un MikroC probleme ?

Moi je me pencherais plutôt vers MicroC, il faut revenir au source paulfjujo, ASM, il y a que ça de vrai (car on sait ou on va dans les sous programmes)

Bon exit car je vais me faire expulsé.

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


Retourner vers « Langage C »

Qui est en ligne

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