Bienvenue aux nouveaux arrivants sur FantasPic !

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

--- L’équipe FantasPic ---
Forum général sur l'Assembleur !

Modérateur : mazertoc

Ecran OLED rond GC9A01
francois77
Passioné
Passioné
Messages : 307
Enregistré en : avril 2022

#71 Message par francois77 » mar. 21 mars 2023 18:19

Hello,

j'avais pas compris ta question a priori :sifflotte: , mais tu as trouvé le programme

Je viens de trouver ce lien

https://forum.microchip.com/s/topic/a5C ... AO/t312553

Je vais tenter de comprendre le fonctionnement d'un module SPI du 18f26k22

A+

Ecran OLED rond GC9A01
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 2589
Âge : 73
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#72 Message par paulfjujo » mar. 21 mars 2023 19:19

francois77 a écrit :Hello,

j'avais pas compris ta question a priori :sifflotte: , mais tu as trouvé le programme

Je viens de trouver ce lien

https://forum.microchip.com/s/topic/a5C ... AO/t312553

Je vais tenter de comprendre le fonctionnement d'un module SPI du 18f26k22

A+



SLRCONx register
C'est exactement à cause de cela , que mon analyser logique ne detectait pas les bons codes SPI
Limited Rate par defaut !

bit 2 SLRC: PORTC Slew Rate Control bit
1 = All outputs on PORTC slew at a limited rate
0 = All outputs on PORTC slew at the standard rate
SLRCON.B2=0
Aide toi, le ciel ou FantasPic t'aidera

Ecran OLED rond GC9A01
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 2589
Âge : 73
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#73 Message par paulfjujo » mer. 22 mars 2023 08:52

bonjour Francois et à tous,

j'ai passé ce matin, la vitesse SPI de 8MHz à 16MHz
j'avais déja testé auparavant, mais vu le peu de resultat probant,
oops j'en avais déduit, à tord, qu'il ne commutait pas en 16MHz !
reprise des tests :
verifié à l'oscillo : le SPI est bien à 16MHz : periode mesurée = 62.5nS
par contre le resultat reste peu probant,
:eek: voir décevant ,
:-D mais l'amelioration existe quand meme .

mesures avec SMT1 et SPI à 16MHz .... gain global en durée tres minime !

(08:31:17.025) Init OLED Rond CG9A01
(08:31:17.057) Start SMT1 pour Init_CG9A01();
(08:31:17.806) Stop. SMT1=12401186 ,soit 775074 uS 775mS ( 775mS à 8MHz)

l'init globale reste quasi inchangée , vu qu'il y a des tempos importantes pour la séquence power ON et RST (415mS!!)
inclue dans l'init...

Code : Tout sélectionner

 
 void Init_CG9A01
(void)
{
 //power init
   _CS=1;
   _RST=1;
   __delay_ms(250);
   _RST=0;
    __delay_ms(20);
    _RST=1;
    __delay_ms(20);
   _CS=0;
   SendCmd(0x01);
   __delay_ms(125);
    SQA=1;                  //   <-- armement capture sequence analyser
     SendCmd(0xEF);
     SendCmd(0xFE);
     SendCmd(0xEF);
     
     SendCmd
(0x84);
     SendData(0xFF);
     ... etc ..........


(08:31:18.060) Test duree Ecran Noir (SPI 8MHz!)
(08:31:18.316) Stop. SMT1=3974743 ,soit 248421 uS 248mS ( 291mS à 8MHz)

(08:31:26.720) Test Duree de Chargement image Voltmetre.bmp
(08:31:27.064) Stop. SMT1=5630418 ,soit 351901 uS 351mS ( 395ms à 8MHz)

le gain global est de l'ordre de 15% et non de 100% en doublant la vitesse
cela s'explique bien au vu de la capture de l'init OLED (ci jointe)
gaps entre chaque pulses...
gap important entre chaque Byte ...

Vitesse_SPI_mais_pas_que.jpg


:sifflotte: en somme , c'est un TGV omnibus avec plein de station de gare..
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Aide toi, le ciel ou FantasPic t'aidera

Ecran OLED rond GC9A01
satinas
Expert
Expert
Messages : 1225
Enregistré en : novembre 2015

#74 Message par satinas » mer. 22 mars 2023 09:25

Bonjour,
Très intéressant tout ça. Pourquoi parler de l'init, on le fait qu'une seule fois au départ.
Est-ce en transmit Only ?
Tu testes quel bit entre 2 envois ?
Peux tu donner juste la routine d'envoi de byte.
Je regrette de ne pas avoir regardé à l'oscillo la fréquence SPI lors du test vidéo sur ILI9341 avec le Raspberry Pi.

Ecran OLED rond GC9A01
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 2589
Âge : 73
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#75 Message par paulfjujo » mer. 22 mars 2023 09:46

satinas a écrit : Pourquoi parler de l'init, on le fait qu'une seule fois au départ.


la capture Analyser SQA de l'init OLED est faite apres la sequence POWER ON
et montre la succession d'envoi de byte ...
dans le meme contexte que l'effacement ecran
mais alterne Commande et Data

L'affichage image est plus lent car recupere les datas en flash pour les envoyer ensuite
L'effacement ecran envoie directement la valeur 0 dans l'espace de 115200 bytes
(RAM de l'OLED ..)

satinas a écrit :?
Peux tu donner juste la routine d'envoi de byte.


Code : Tout sélectionner


void SendData
(Byte c) // SS low par LATC2=0 ayant été fait au préalable
{
  _DC = 1;
  SPI1TXB = c;
  while (!PIR2bits.SPI1RXIF) { };
  c = SPI1RXB;
}


void SendCmd(Byte c) // SS low par LATC2=0 ayant été fait au préalable
{
  _DC = 0;
  SPI1TXB = c;
  while (!PIR2bits.SPI1RXIF) { };
   c = SPI1RXB;
}
 


je viens de rajouter le test à SPI clock = 32Mhz ... coté C
:-D L'OLED arrive à suivre !

globalement le gain de vitesse n'est pas flagrant avec la vitesse SCLK SPI ...
idea ! peut etre qu'un 18F26K22 est plus rapide ..
vu qu'il a un MSSP plus simple que le 18F27K42 ...
Aide toi, le ciel ou FantasPic t'aidera

Ecran OLED rond GC9A01
satinas
Expert
Expert
Messages : 1225
Enregistré en : novembre 2015

#76 Message par satinas » mer. 22 mars 2023 09:56

Donc c'est l'accès aux datas du pic qui intervient. C'est vrai que le cycle SPI est le même que le cycle cpu, on a donc droit à une seule instruction machine pour aller chercher la data ! Faut voir en DMA ce que cela donne.
Sur le 16F1936 on peut faire de l'adressage indirect sur la flash (POSTINC), sur les 18F peut être aussi.
Pour les essais de rapidité, tu peux passer en Transmit Only et vire le test de bit, si cela pose problème tu le verras sur l'écran :)
Il parle de mettre SMP à 1 à haute vitesse, car à mi-cycle le pic n'a pas le temps d'échantillonner et l'afficheur peut être un peu poussif sur les timings.

Ecran OLED rond GC9A01
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 2589
Âge : 73
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#77 Message par paulfjujo » mer. 22 mars 2023 11:33

Aide toi, le ciel ou FantasPic t'aidera

Ecran OLED rond GC9A01
francois77
Passioné
Passioné
Messages : 307
Enregistré en : avril 2022

#78 Message par francois77 » mer. 22 mars 2023 11:36

Bonjour
Vous êtes en train de me perdre :cry:

Pas eu le temps de faire ce matin un message car il fallait remplir le garde-manger ….
J’ai cependant fait un petit test ce matin pour améliorer la vitesse d’écriture en mode big band
Pour écrire la couleur d’un pixel on utilise la procédure de Temps-x.
Le souci c’est le temps de traitement ! 96 instructions)

Mon idée, ne fonctionne qu’avec un nombre réduit couleur.
Au lieu d’utiliser la procédure de Temps-x j’ai créé une procédure spécifique par couleur
donner_oled1:
bsf LCD_DC ; DC = 1 en mode donnée

bcf LCD_MOSI ; envoie 0
bsf LCD_SCK ;
bcf LCD_SCK ;

; bcf LCD_MOSI ; à mettre si nécessaire
bsf LCD_SCK ;
bcf LCD_SCK ;

; bcf LCD_MOSI ; à mettre si nécessaire
bsf LCD_SCK ;
bcf LCD_SCK ;

A faire pour le 16bits en fonction de la couleur choisi
Ecriture d’un écran noir complet 187 ms pour un codage 0000 0000 0000 0000 (36 instructions)
238 ms soit 50 instructions par pixel si modification LCD_MOSI systématique
Utilisable uniquement avec un nombre restreint de couleur mais suffisants pour une interface assez rapide
De toute façon la limite d’écriture c’est une instruction de 62.5ms ?

Ecran OLED rond GC9A01
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 2589
Âge : 73
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#79 Message par paulfjujo » mer. 22 mars 2023 13:34

62.5 nano secondes

voir test 32MHz et ecran noir à 98mS coté C
Aide toi, le ciel ou FantasPic t'aidera

Ecran OLED rond GC9A01
francois77
Passioné
Passioné
Messages : 307
Enregistré en : avril 2022

#80 Message par francois77 » mer. 22 mars 2023 14:27

paulfjujo a écrit :62.5 nano secondes

voir test 32MHz et ecran noir à 98mS coté C



Oui, nano secondes .....

Pour l'instant j'essaie de trouver un exemple de SPI un 18f26k22 :langue:


Retourner vers « Langage ASM »

Qui est en ligne

Utilisateurs parcourant ce forum : Roger et 50 invités