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 ---
- 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 ---
Modérateur : mazertoc
Ecran OLED rond GC9A01
-
francois77
Passioné- Messages : 307
- Enregistré en : avril 2022
Hello,
j'avais pas compris ta question a priori , 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+
j'avais pas compris ta question a priori , 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
Expert- Messages : 2589
- Âge : 73
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
francois77 a écrit :Hello,
j'avais pas compris ta question a priori , 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
Ecran OLED rond GC9A01
- paulfjujo
Expert- Messages : 2589
- Âge : 73
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
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,
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,
voir décevant ,
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...
(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 ...
en somme , c'est un TGV omnibus avec plein de station de gare..
j'ai passé ce matin, la vitesse SPI de 8MHz à 16MHz
j'avais déja testé auparavant, mais vu le peu de resultat probant,
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,
voir décevant ,
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 ...
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.
Ecran OLED rond GC9A01
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.
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
Expert- Messages : 2589
- Âge : 73
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
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
L'OLED arrive à suivre !
globalement le gain de vitesse n'est pas flagrant avec la vitesse SCLK SPI ...
peut etre qu'un 18F26K22 est plus rapide ..
vu qu'il a un MSSP plus simple que le 18F27K42 ...
Ecran OLED rond GC9A01
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.
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
Ecran OLED rond GC9A01
-
francois77
Passioné- Messages : 307
- Enregistré en : avril 2022
Bonjour
Vous êtes en train de me perdre
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 ?
Vous êtes en train de me perdre
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
Retourner vers « Langage ASM »
Qui est en ligne
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 47 invités