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 : Jérémy
OLED GC9A01 et SPI Hardw 18F27K42
- paulfjujo
Expert- Messages : 2737
- Âge : 73
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
Bonjour à tous ,
voici la version 18F27K42 en XC8 MPLAB
la version SPI bit bang est OK ...
mais impossible à ce jour ,d'initialiser l'écran en SPI Hardware
testé à plusieurs vitesses 125Khz, 1Mhz ,4Mhz ...
Ce SPI harware donne du fil à retordre ... beaucoup plus compliqué que sur un 18F26K22 ..
et malgré la discussion sur ce sujet ([PIC18F27K42] Projet "superviseur de charge" pour 4 batteries 12V) post#26 à 28
et la datasheet sus nommée ...
j'arrive à voir ma sequence d'init OLED ..quasiment la meme au niveau SQA analyser ...mais il n'en veut pas ...
il me semble que le SPI Hardware ne peut se synchroniser que sur le front montant, ou au milieu ... mais pas sur le front descendant ...
Mon analyser logique (50MHz) est peut etre ric rac pour voir certains details temporels ..
utilisé avec un decodeur de protocole SPI .(incorpoé au SQA). qui a peut etre aussi ses faiblesses.
tout comme le bonhomme !
sur la datasheet OLED GC9A01 page 29, je lis :
la pin _SC (chip selection) est mise à zero par le MCU ( PIC18F Host)
le _DC bit (choix Commande si 0 ou 1 si data ) est lu sur le front montant de SCL (clock SPI RC3)
et sur le front descendant le bit DATA MSB est lu ( depuis RC5 MOSI MCU ) ... et ainsi de suite pour les autres datas..
je ne vois pas comment initialiser le SPI pour lecture data sur front descendant ...
Satinas et DVIPER16 ideas ?
projet MPLAB XC8 2.36 et C99
directive de compilation à valider pour le choix mode Software ou Hardware
#define VERSION "2022-0318"
#define With_SPI_Software // Test OLED OK !
//#define With_SPI_Hardware // problemo
en mode SPI soft bit bang
voici la version 18F27K42 en XC8 MPLAB
![Très content :-D](./images/smilies/icon_e_biggrin.gif)
![colere :mur:](./images/smilies/icon_mur.gif)
testé à plusieurs vitesses 125Khz, 1Mhz ,4Mhz ...
Ce SPI harware donne du fil à retordre ... beaucoup plus compliqué que sur un 18F26K22 ..
et malgré la discussion sur ce sujet ([PIC18F27K42] Projet "superviseur de charge" pour 4 batteries 12V) post#26 à 28
et la datasheet sus nommée ...
j'arrive à voir ma sequence d'init OLED ..quasiment la meme au niveau SQA analyser ...mais il n'en veut pas ...
il me semble que le SPI Hardware ne peut se synchroniser que sur le front montant, ou au milieu ... mais pas sur le front descendant ...
Mon analyser logique (50MHz) est peut etre ric rac pour voir certains details temporels ..
utilisé avec un decodeur de protocole SPI .(incorpoé au SQA). qui a peut etre aussi ses faiblesses.
![siffleur :sifflotte:](./images/smilies/icon_sifflotte.gif)
sur la datasheet OLED GC9A01 page 29, je lis :
Host processor drives the CSX pin to low and starts by setting the D/CX bit on SDA. The bit is read by
GC9A01 on the first rising edge of SCL signal. On the next falling edge of SCL, the MSB data bit (D7) is set
on SDA by the host. On the next falling edge of SCL, the next bit (D6) is set on SDA.
la pin _SC (chip selection) est mise à zero par le MCU ( PIC18F Host)
le _DC bit (choix Commande si 0 ou 1 si data ) est lu sur le front montant de SCL (clock SPI RC3)
et sur le front descendant le bit DATA MSB est lu ( depuis RC5 MOSI MCU ) ... et ainsi de suite pour les autres datas..
![!!!!! :!!:](./images/smilies/Attention.png)
![idée idea !](./images/smilies/idee.png)
projet MPLAB XC8 2.36 et C99
directive de compilation à valider pour le choix mode Software ou Hardware
#define VERSION "2022-0318"
#define With_SPI_Software // Test OLED OK !
//#define With_SPI_Hardware // problemo
en mode SPI soft bit bang
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
OLED GC9A01 et SPI Hardw 18F27K42
Hello,
Où est la doc qui parle de ça ?
Lignes à enlever, réservées au mode slave
SPI1SCKPPS = 0x13; // RC3 SCK ->SPI1:SCK1;
SPI1SSPPS=0x05; // RA5 par defaut
Ligne à enlever, il vaut mieux démarrer en pilotant SS en mode i/o donc avec LATC2
RC2PPS = 0x20; // RC2->SS1
L'avantage de ce nouveau module est de choisir la taille en bits des mots et paquets échangés.
Essaie de tester cela, BMODE = 1 semble se comporter comme les anciens modules spi, 1 seul mot de 8 bits only.
SPIxTCNT write is optional TXR/RXR = 1/1 and BMODE=1. If BMODE=0, a write to SPIxTCNT is required to start
Avec BMODE=1, il envoie des mots de TWIDTH bits (compteur optionnel de mots TCNT décrémenté).
Avec BMODE=0, il envoie TCNT mots de 8 bits puis un mot de TWIDTH bits (j'ai pas compris si TCNT décompte des mots ou des bits).
Quand cela marchera, tu pourras tester :
- BMODE = 0 et TCNT.
- le mode Transmit Only avec RXR = 0 (qui devrait aussi marcher avec BMODE=1 et sans TCNT).
- le SS piloté par le module SPI (là on a besoin de TCNT pour savoir quand le transfert est fini).
Il faut ajuster CKE et CKP selon le mode SPI 0 à 3 utilisé par l'afficheur.
Pour la sdcard et les lcds SPI, j'utilise le mode 0 (CKP=0, CKE=1) ou le mode 3 (CKP=1, CKE=0)
Les 2 autres modes sont mode 1 (CKP=CKE=0) et mode 2 (CKP=CKE=1).
En mode 0 et 3, le pic écrit le bit au front descendant, le slave lit au front montant.
En mode 1 et 2, le pic écrit le bit au front montant, le slave lit au front descendant.
https://en.wikipedia.org/wiki/Serial_Pe ... _Interface
PS: Les registres config SPI non renseignés sont à 0 au reset :)
Où est la doc qui parle de ça ?
le _DC bit (choix Commande si 0 ou 1 si data ) est lu sur le front montant de SCL (clock SPI RC3)
et sur le front descendant le bit DATA MSB est lu ( depuis RC5 MOSI MCU ) ... et ainsi de suite pour les autres datas..je ne vois pas comment initialiser le SPI pour lecture data sur front descendant ...
Lignes à enlever, réservées au mode slave
SPI1SCKPPS = 0x13; // RC3 SCK ->SPI1:SCK1;
SPI1SSPPS=0x05; // RA5 par defaut
Ligne à enlever, il vaut mieux démarrer en pilotant SS en mode i/o donc avec LATC2
RC2PPS = 0x20; // RC2->SS1
L'avantage de ce nouveau module est de choisir la taille en bits des mots et paquets échangés.
Essaie de tester cela, BMODE = 1 semble se comporter comme les anciens modules spi, 1 seul mot de 8 bits only.
SPIxTCNT write is optional TXR/RXR = 1/1 and BMODE=1. If BMODE=0, a write to SPIxTCNT is required to start
Avec BMODE=1, il envoie des mots de TWIDTH bits (compteur optionnel de mots TCNT décrémenté).
Avec BMODE=0, il envoie TCNT mots de 8 bits puis un mot de TWIDTH bits (j'ai pas compris si TCNT décompte des mots ou des bits).
Code : Tout sélectionner
void My_Init_SPI1(void)
{
SPI1CON0 = 0x03; // off, msb first, master, BMODE=1
SPI1CON1 = 0x00; // SMP=0, CKE=0, CKP=0, FST=0, SSP=0, SDIP=0, SDOP=0
SPI1CON2 = 0x03; // SSET=0, TXR=1, RXR=1
SPI1CLK = 1; // 3->CLKREF 2->MFINTOSC=500Khz 1->HFINTOSC=16Mhz 0->FOSC=64MHz
SPI1BAUD = 3; // SPI Speed 16MHz / (2x(3+1)) = 16/8 = 2MHz
LATCbits.LATC2 = 1; // SS high
SPI1CON0bits.EN = 1;// on
}
void SendData(Byte c) // SS low par LATC2=0 ayant été fait au préalable
{
_DC = 1;
SPI1TXB = c;
while (!PIR2bits.SPI1RXIF) { }
c = SPI1RXB;
}
Quand cela marchera, tu pourras tester :
- BMODE = 0 et TCNT.
- le mode Transmit Only avec RXR = 0 (qui devrait aussi marcher avec BMODE=1 et sans TCNT).
- le SS piloté par le module SPI (là on a besoin de TCNT pour savoir quand le transfert est fini).
Il faut ajuster CKE et CKP selon le mode SPI 0 à 3 utilisé par l'afficheur.
Pour la sdcard et les lcds SPI, j'utilise le mode 0 (CKP=0, CKE=1) ou le mode 3 (CKP=1, CKE=0)
Les 2 autres modes sont mode 1 (CKP=CKE=0) et mode 2 (CKP=CKE=1).
En mode 0 et 3, le pic écrit le bit au front descendant, le slave lit au front montant.
En mode 1 et 2, le pic écrit le bit au front montant, le slave lit au front descendant.
https://en.wikipedia.org/wiki/Serial_Pe ... _Interface
PS: Les registres config SPI non renseignés sont à 0 au reset :)
OLED GC9A01 et SPI Hardw 18F27K42
- paulfjujo
Expert- Messages : 2737
- Âge : 73
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
bonjour à tous,
Merçi Satinas pour tes éclairements toujours utiles ..
Des nouvelles du Front ( pas national!)
modif init -> usage du mode0
mais ..
RIEN NE SE PASSE !
mais , en même temps que la rosée , l'inspiration du matin !
Suppression des tests SPI préalables à 'init du LCD !
qui devait etre déboussolé par les cdes du test :
CPrint(" SPI HARDW 10 Sequences : 0x01 0x80 0xAA 0x0F 0x55 0xF0 \r\n");
à priori , réutiliser la 1ere commande dans l'init GC9A01
soit SendCmd(0x01) "init logiciel" ne fait pas le menage dans le LCD !
... donc
NE PAS TESTER LE SPI AVANT L'INIT LCD
le mieux est l'ennemi du bien !
Test sur l'init SPI :
SPI à 2MHz ...OK (source FOSC/4=16Mhz)
SPI à 4MHz ..BAD ..(source FOSC/4=16Mhz)
pas d'init OLED !
SPI à 8MHz ...OK (source FOSC=64Mhz)
resultats assez curieux ! BAD à 4MHZ et OK à 8MHz !
je vais faire des chronos sur effacement d'ecran complet
et/ou chargement image 240x240 65K couleurs .. pour verifier à 8MHz
à priori on n' a pas de notion d'esclave ,ni on ne se sert de lecture du OLED,
hormis si on voulait recuperer les infos ID1,2,3, ..
Il me semble qu'on peut inhiber completement la partie SS ( pas ceux avec la croix !)
SPI1CON2bits.SSET=1; // 1 = SS(out) is driven to the active state continuously ?
Merçi Satinas pour tes éclairements toujours utiles ..
Des nouvelles du Front ( pas national!)
modif init -> usage du mode0
mais ..
![Triste :sad:](./images/smilies/icon_e_sad.gif)
mais , en même temps que la rosée , l'inspiration du matin !
Suppression des tests SPI préalables à 'init du LCD !
qui devait etre déboussolé par les cdes du test :
CPrint(" SPI HARDW 10 Sequences : 0x01 0x80 0xAA 0x0F 0x55 0xF0 \r\n");
à priori , réutiliser la 1ere commande dans l'init GC9A01
soit SendCmd(0x01) "init logiciel" ne fait pas le menage dans le LCD !
... donc
![!!!!! :!!:](./images/smilies/Attention.png)
le mieux est l'ennemi du bien !
Test sur l'init SPI :
SPI à 2MHz ...OK (source FOSC/4=16Mhz)
SPI à 4MHz ..BAD ..(source FOSC/4=16Mhz)
![oops oops](./images/smilies/CASJ1XDY.png)
SPI à 8MHz ...OK (source FOSC=64Mhz)
![Question :?:](./images/smilies/icon_question.gif)
je vais faire des chronos sur effacement d'ecran complet
et/ou chargement image 240x240 65K couleurs .. pour verifier à 8MHz
Code : Tout sélectionner
void My_Init_SPI1(void)
{
SPI1CON0 = 0x03; // off, msb first, master, BMODE=1
SPI1CON1 = 0x00; // SMP=0, CKE=0, CKP=0, FST=0, SSP=0, SDIP=0, SDOP=0
SPI1CON2 = 0x03; // SSET=0, TXR=1, RXR=1
// CLKREF : 2->MFINTOSC=500Khz , 1->HFINTOSC=16Mhz ,0->FOSC=64MHz
// SPI1CLK = 1; //CLKREF =1
// SPI1BAUD = 3; // SPI Speed 16MHz / (2x(3+1)) = 16/8 = 2MHz .. OK
// SPI1CLK = 1;
// SPI1BAUD = 1; // SPI Speed 16MHz / (2x(1+1)) = 16/4 = 4MHz .. BAD
SPI1CLK = 0; // CLKREF =0 ->FOSC=64MHz
SPI1BAUD = 3; // SPI Speed 64MHz / (2x(3+1)) = 64/8 = 8MHz ..OK!!
//En mode 0 et 3, le pic écrit le bit au front descendant, le slave lit au front montant.
//En mode 1 et 2, le pic écrit le bit au front montant, le slave lit au front descendant.
//mode 0 (CKP=0, CKE=1)
//mode 1 (CKP=CKE=0)
//mode 2 (CKP=CKE=1).
//mode 3 (CKP=1, CKE=0)
SPI1CON0bits.BMODE=1;
SPI1CON1bits.CKP=0;
SPI1CON1bits.CKE=1;
LATCbits.LATC2 = 1; // SS high
SPI1CON0bits.EN = 1;// on
}
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;
}
à priori on n' a pas de notion d'esclave ,ni on ne se sert de lecture du OLED,
hormis si on voulait recuperer les infos ID1,2,3, ..
Il me semble qu'on peut inhiber completement la partie SS ( pas ceux avec la croix !)
SPI1CON2bits.SSET=1; // 1 = SS(out) is driven to the active state continuously ?
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
OLED GC9A01 et SPI Hardw 18F27K42
Bonjour,
En fait je ne vois pas l'intérêt de générer automatiquement le slave select, puisque le plus souvent on le descend avant d'envoyer une flopée de données, c'est peu de chose. Nécessaire si on fait du DMA peut être.
Par contre le port parallèle des pics plus évolués permet de générer automatiquement le strobe de validation, on peut donc simplifier et accélérer le transfert d'un buffer vers l'afficheur, testé sur l'afficheur Arduino parallèle 8 bits. Sans compter l'emploi du DMA, que je n'ai pas pu tester, mais je connais quelqu'un pas loin qui va s'y coller sur SPI
Il y a un exemple de DMA SPI dans la doc "Using the SPI Module on 8-Bit PIC® Microcontrollers".
Autre chose, en mode Transmit Only, il doit falloir attendre entre les écritures du registre SPIxTBX, ton premier programme en tenait compte. Je n'ai pas trouvé la taille du TXFIFO.
En fait je ne vois pas l'intérêt de générer automatiquement le slave select, puisque le plus souvent on le descend avant d'envoyer une flopée de données, c'est peu de chose. Nécessaire si on fait du DMA peut être.
Par contre le port parallèle des pics plus évolués permet de générer automatiquement le strobe de validation, on peut donc simplifier et accélérer le transfert d'un buffer vers l'afficheur, testé sur l'afficheur Arduino parallèle 8 bits. Sans compter l'emploi du DMA, que je n'ai pas pu tester, mais je connais quelqu'un pas loin qui va s'y coller sur SPI
![Sourire :-)](./images/smilies/icon_e_smile.gif)
Il y a un exemple de DMA SPI dans la doc "Using the SPI Module on 8-Bit PIC® Microcontrollers".
Autre chose, en mode Transmit Only, il doit falloir attendre entre les écritures du registre SPIxTBX, ton premier programme en tenait compte. Je n'ai pas trouvé la taille du TXFIFO.
OLED GC9A01 et SPI Hardw 18F27K42
- paulfjujo
Expert- Messages : 2737
- Âge : 73
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
Test OK avec SPI à 8MHz
Transfert d'une image BMP240x240 65K couleurs en RGB565 --> 250 mS
verifié avec SQA analyser..
l'effacement d'ecran ..dure aussi 18mS !
y a pas photo, le SPI Hardware demenage ...
Le seul probleme est qu'on a que 128K de flash ..1 seule image à la fois
il reste la SD card au dos du module ...
et le DMA à tester !
mais je vais en rester là, pour l'instant ..
le Squelette 18F27K42 en SPI Hardw est OK , finalement prêt .. à etre habillé avec d'autres fonctionalités.
Je vais pouvoir retourner sur le sujet Audiophone ...
nota :
il y a beaucoup de warning dans le fichier de compilation ..mais est-ce bien utile de vouloir tous les éradiquer ?
sachant que meme un accent francais ex: "é" genere aussi un warning ..
je finis d'ailleurs à ne plus les ecrire , ces accents !
.. la poussiere..sous le tapis !
. .. pas bien .. hein !
Transfert d'une image BMP240x240 65K couleurs en RGB565 --> 250 mS
verifié avec SQA analyser..
l'effacement d'ecran ..dure aussi 18mS !
y a pas photo, le SPI Hardware demenage ...
Le seul probleme est qu'on a que 128K de flash ..1 seule image à la fois
![siffleur :sifflotte:](./images/smilies/icon_sifflotte.gif)
et le DMA à tester !
mais je vais en rester là, pour l'instant ..
le Squelette 18F27K42 en SPI Hardw est OK , finalement prêt .. à etre habillé avec d'autres fonctionalités.
Je vais pouvoir retourner sur le sujet Audiophone ...
![!!!!! :!!:](./images/smilies/Attention.png)
il y a beaucoup de warning dans le fichier de compilation ..mais est-ce bien utile de vouloir tous les éradiquer ?
sachant que meme un accent francais ex: "é" genere aussi un warning ..
je finis d'ailleurs à ne plus les ecrire , ces accents !
![siffleur :sifflotte:](./images/smilies/icon_sifflotte.gif)
![Surprise :eek:](./images/smilies/icon_e_surprised.gif)
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Modifié en dernier par paulfjujo le dim. 19 mars 2023 20:39, modifié 1 fois.
OLED GC9A01 et SPI Hardw 18F27K42
-
francois77
Passionné- Messages : 307
- Enregistré en : avril 2022
OLED GC9A01 et SPI Hardw 18F27K42
- paulfjujo
Expert- Messages : 2737
- Âge : 73
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
![pas content :furieux:](./images/smilies/icon_pas_content.gif)
Pourquoi ne puis-je pas initialiser la vitesse SPI à 4 MHz , soit à partir de FOSC=64Mhz , soit à partir de FOSC/4 16Mhz
// SPI1CLK = 1; //CLKREF =1
// SPI1BAUD = 3; // SPI Speed 16MHz / (2x(3+1)) = 16/8 = 2MHz .. OK
// SPI1CLK = 1;
// SPI1BAUD = 1; // SPI Speed 16MHz / (2x(1+1)) = 16/4 = 4MHz .. BAD
SPI1CLK = 0; // CLKREF =0 ->FOSC=64MHz
SPI1BAUD = 3; // SPI Speed 64MHz / (2x(3+1)) = 64/8 = 8MHz ..OK!!
// SPI1CLK = 0; // CLKREF =0 ->FOSC=64MHz
// SPI1BAUD = 7; // SPI Speed 64MHz / (2x(7+1)) = 64/16 = 4MHz ..NON ! =8MHz ?BAD
je veux tester à 4 MHz, parce que mon analyser logique semble perdre les pedales avec un SPI à 8MHz
nota : le decodage SPI se fait par l'application ScanStudio 4.0.17 SQA IKALOGIC
les valeurs de datas ne correspondent pas aux etats lus visuellement sur le signal MOSI !
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
OLED GC9A01 et SPI Hardw 18F27K42
- paulfjujo
Expert- Messages : 2737
- Âge : 73
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
![oops oops](./images/smilies/CASJ1XDY.png)
je me suis rappelé d'un probleme qui concernait la sortie RA6 FOSC Out
sur laquelle la frequence n'etait pas OK ( normale FOSC/4 -> 64/4=16Mhz
probleme de config hardware et registre SLRCONA
Bon dieu mais c'est bien sur ,comme disait l'inspecteur Bourrel !
modif config Init_Harware
SLCONC =0x80; // RC7 =RX UART PORT SPI débridé!
![idée idea !](./images/smilies/idee.png)
je refais la manip ...
Code : Tout sélectionner
CPrint(" TEST signaux SCLK et MOSI SPI Hardware avec SQA analyser (RA3=Synchro capture)\r\n");
CPrint(" SPI HARDW Sequence : 0x01 0x10 0X20 0x40 0x80 0xAA 0x0F 0x55 0xF0 \r\n");
CPrint(" Armer la capture dans 3 sec !\r\n");
Delay_xSec(3);
Led_R=0;
_DC=1;
SQA=1;
SPI1_WriteByte(0x01);
SPI1_WriteByte(0x10);
SPI1_WriteByte(0x20);
SPI1_WriteByte(0x40);
SPI1_WriteByte(0x80);
SPI1_WriteByte(0xAA);
SPI1_WriteByte(0x0F);
SPI1_WriteByte(0x55);
SPI1_WriteByte(0xF0);
SQA=0;
Analyser OK !
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
OLED GC9A01 et SPI Hardw 18F27K42
Bravo ![Sourire :-)](./images/smilies/icon_e_smile.gif)
j'allais t'écrire de regarder la page 765, je sais pas si c'est lié.
En théorie SCK monte à 10MHz en full-duplex et 16MHz en Transmit Only.
Note 1: SPIxCON1.SMP bit must be set and the slew rate control must be disabled on the clock and data pins
(clear the corresponding bits in SLRCONx register) for SPI to operate over 4 MHz.
![Sourire :-)](./images/smilies/icon_e_smile.gif)
j'allais t'écrire de regarder la page 765, je sais pas si c'est lié.
En théorie SCK monte à 10MHz en full-duplex et 16MHz en Transmit Only.
Note 1: SPIxCON1.SMP bit must be set and the slew rate control must be disabled on the clock and data pins
(clear the corresponding bits in SLRCONx register) for SPI to operate over 4 MHz.
OLED GC9A01 et SPI Hardw 18F27K42
- paulfjujo
Expert- Messages : 2737
- Âge : 73
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
bonsoir
testé : SPIxCON1.SMP bit must be set
... ne change rien !
Rajout du chronometrage avec SMT1
SPI à 8MHz ?
(20:43:42.426) Init et Test Compteur 24 bits SMT1 sur FOSC 64MHz
(20:43:42.454) Start SMT1 pour __delay_ms(50);
(20:43:42.482) Stop. SMT1 =3200008 soit 50000 uS
(20:43:45.502) Init OLED Rond CG9A01
(20:43:45.502) Start SMT1 pour Init_CG9A01();
(20:43:46.281) Stop. SMT1 =16051236 soit 250800 uS <------ 250mS
(20:43:46.580) Test duree Ecran Noir (SPI 8MHz!) avec SMT1 compteur <----- ~30mS
(20:43:46.879) Duree = 1886808 soit 29481 uS
(16:56:48.064) Test Duree de Chargement image Voltmetre.bmp <------------- 133 mS
(16:56:48.465) Stop. SMT1=8509260 ,soit 132957 uS
(16:56:48.474)
testé : SPIxCON1.SMP bit must be set
![Exclamation :!:](./images/smilies/icon_exclaim.gif)
Rajout du chronometrage avec SMT1
SPI à 8MHz ?
(20:43:42.426) Init et Test Compteur 24 bits SMT1 sur FOSC 64MHz
(20:43:42.454) Start SMT1 pour __delay_ms(50);
(20:43:42.482) Stop. SMT1 =3200008 soit 50000 uS
(20:43:45.502) Init OLED Rond CG9A01
(20:43:45.502) Start SMT1 pour Init_CG9A01();
(20:43:46.281) Stop. SMT1 =16051236 soit 250800 uS <------ 250mS
(20:43:46.580) Test duree Ecran Noir (SPI 8MHz!) avec SMT1 compteur <----- ~30mS
(20:43:46.879) Duree = 1886808 soit 29481 uS
(16:56:48.064) Test Duree de Chargement image Voltmetre.bmp <------------- 133 mS
(16:56:48.465) Stop. SMT1=8509260 ,soit 132957 uS
(16:56:48.474)
Code : Tout sélectionner
CPrint(" Test duree Ecran Noir (SPI 8MHz!) avec SMT1 compteur\r\n");
SMT1_Init();
ST=&SMT1_Measure; // pointeur Byte sur debut entier long 32 bits
SMT1_Measure=0;
SMT1STATbits.RST=1; // init FFFFFF
SMT1CON0bits.SMT1STP=0;
SMT1CON1bits.SMT1GO=1; // start chrono
Ecran_Noir();
SMT1CON1bits.SMT1GO=0; // stop chrono
*(ST)= SMT1TMRL;
*(ST+1)=SMT1TMRH;
*(ST+2)=SMT1TMRU;
*(ST+3)=0;
sprintf(txt, "\r\n Duree = %lu soit ",SMT1_Measure);
Print(txt);
L1=SMT1_Measure>>6; //64
sprintf(txt, "%lu uS \r\n",L1);
Print(txt);
CRLF1();
Qui est en ligne
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 6 invités