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
D'après calcul, il faut 57 ms à SCK=16 MHz pour effacer l'écran 240x240.
D'abord il faudrait vérifier à l'oscillo que tu es bien à 16MHz. Cela dépend aussi du programme.
La seule option restante est l'utilisation du timer2 à FOSC/4, si j'ai bien lu, il sortirait 16 MHz.
En mettant PR2 à 1, TMR2 passe de 0 à 1 puis retour à 0.
SPICON1 -> 0011 = SPI Master mode, clock = TMR2 output/2
et donc 32 MHz sur SCK.
Ah Ah rectificatif, c'est 8 MHz et pas 32MHz, j'en loupe pas une :)
Donc je ne vois pas comment aller plus vite que 16MHz
D'abord il faudrait vérifier à l'oscillo que tu es bien à 16MHz. Cela dépend aussi du programme.
La seule option restante est l'utilisation du timer2 à FOSC/4, si j'ai bien lu, il sortirait 16 MHz.
En mettant PR2 à 1, TMR2 passe de 0 à 1 puis retour à 0.
SPICON1 -> 0011 = SPI Master mode, clock = TMR2 output/2
et donc 32 MHz sur SCK.
Ah Ah rectificatif, c'est 8 MHz et pas 32MHz, j'en loupe pas une :)
Donc je ne vois pas comment aller plus vite que 16MHz
Ecran OLED rond GC9A01
- paulfjujo
Expert- Messages : 2589
- Âge : 73
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
bonjour à tous,
en theorie ...et dans le cas d'une serialisation où les bytes sont strictement jointifs , et où on envoie toujours la meme data=0
(effacement ecran)
la preuve en est que la difference de temps entre SPI à 8,16,32 MHZ n'est absolument pas inversement proportionnelle.
dans la pratique il faut rajouter
la durée de boucle d'envoi des 115200 valeurs ... qui est constante (cycle à FOSC/4)
pour une image BMP, rajouter le chargement des datas à envoyer
satinas a écrit :D'après calcul, il faut 57 ms à SCK=16 MHz pour effacer l'écran 240x240.
en theorie ...et dans le cas d'une serialisation où les bytes sont strictement jointifs , et où on envoie toujours la meme data=0
(effacement ecran)
la preuve en est que la difference de temps entre SPI à 8,16,32 MHZ n'est absolument pas inversement proportionnelle.
dans la pratique il faut rajouter
la durée de boucle d'envoi des 115200 valeurs ... qui est constante (cycle à FOSC/4)
pour une image BMP, rajouter le chargement des datas à envoyer
Modifié en dernier par paulfjujo le ven. 24 mars 2023 16:47, modifié 1 fois.
Ecran OLED rond GC9A01
-
francois77
Passioné- Messages : 307
- Enregistré en : avril 2022
Hello,
Merci Satinas, j'ai lu et relu le paragraphe 15-2 au moins 20 fois et a chaque fois je devais sauter la dernière configuration
SSPxM<3:0> :Bits de sélection du mode de port série
synchrone 0000 =Mode maître SPI, horloge = FOSC/4 0001 =
Mode maître SPI, horloge = FOSC/16 0010 =Mode maître SPI,
horloge = FOSC/64 0011 =Mode maître SPI, horloge = sortie
TMR2/2
0011 = SPI Master mode, clock = TMR2 output/2
SPP1CON1 configurer movlw B'00100011' => c''est ok et ca fonctionne a la vitesse d'escargot
BIT 5 = mise en service du SPI
BIT
Il me reste a configurer TMR2 et c'est encore la galère
A priori c'est le registre T2CON
movlw B'00001000' ;
movwf T2CON
Merci Satinas, j'ai lu et relu le paragraphe 15-2 au moins 20 fois et a chaque fois je devais sauter la dernière configuration
SSPxM<3:0> :Bits de sélection du mode de port série
synchrone 0000 =Mode maître SPI, horloge = FOSC/4 0001 =
Mode maître SPI, horloge = FOSC/16 0010 =Mode maître SPI,
horloge = FOSC/64 0011 =Mode maître SPI, horloge = sortie
TMR2/2
0011 = SPI Master mode, clock = TMR2 output/2
SPP1CON1 configurer movlw B'00100011' => c''est ok et ca fonctionne a la vitesse d'escargot
BIT 5 = mise en service du SPI
BIT
Il me reste a configurer TMR2 et c'est encore la galère
A priori c'est le registre T2CON
movlw B'00001000' ;
movwf T2CON
Ecran OLED rond GC9A01
Arrête tout et relis mon dernier post, avec le timer 2 on ne dépasse pas 8 MHz, donc SCK 16MHz max avec ce pic.
Moi aussi je galère :) j'avais multiplié 16MHz par 2, au lieu de diviser par 2 :)
J'ai ressorti la carte de Pedro. Il avait prévu un connecteur SD, et c'est le seul que je n'avais pas testé, donc je regarde le spi du 18F47Q10 qui ressemble étrangement au 18F26K22.
Moi aussi je galère :) j'avais multiplié 16MHz par 2, au lieu de diviser par 2 :)
J'ai ressorti la carte de Pedro. Il avait prévu un connecteur SD, et c'est le seul que je n'avais pas testé, donc je regarde le spi du 18F47Q10 qui ressemble étrangement au 18F26K22.
Ecran OLED rond GC9A01
Test avec 18F47Q10 et SCK = 16MHz.
0,5us pour l'envoi de la data puis 0,7us de silence, je ne vois pas pourquoi il est si long. J'ai aussi essayé de tester le bit SSP2IF, le problème est qu'il n'est pas dans la même bank que SSP2BUF, et il faut le remettre à 0. Sur le 18F26K22 je crois qu'ils sont dans la mémoire access, donc aucun souci de bank.
En remplaçant le test de bit par des nop, on doit pouvoir diminuer le temps mort, mais sans afficheur je ne peux rien tester. Comme disait Temps_x on peut aussi ne pas lire SSPBUF, la variable spi_byte n'est alors plus nécessaire.
0,5us pour l'envoi de la data puis 0,7us de silence, je ne vois pas pourquoi il est si long. J'ai aussi essayé de tester le bit SSP2IF, le problème est qu'il n'est pas dans la même bank que SSP2BUF, et il faut le remettre à 0. Sur le 18F26K22 je crois qu'ils sont dans la mémoire access, donc aucun souci de bank.
Code : Tout sélectionner
test movlb high SSP2BUF
spi_w movff spi_byte,SSP2BUF
; temps masqué pour placer prochaine data dans spi_byte
spi_wait btfss SSP2STAT,BF
bra spi_wait
movf SSP2BUF,W
bra spi_w
En remplaçant le test de bit par des nop, on doit pouvoir diminuer le temps mort, mais sans afficheur je ne peux rien tester. Comme disait Temps_x on peut aussi ne pas lire SSPBUF, la variable spi_byte n'est alors plus nécessaire.
Ecran OLED rond GC9A01
-
francois77
Passioné- Messages : 307
- Enregistré en : avril 2022
Bonsoir,
Un Bilan du fonctionnement de notre 18f26k22 avec un écran GC9A01 ou un Ecran ILI 9341
4 Mode de fonctionnement possible pour le module SPI et test sur l’affichage d’un écran en 240*240 en couleur Noir
1MHZ = 1.0946 Seconde
4MHZ = 360 ms
16MHZ = 165ms
Mode TMR2 pour l’instant cela bloque … car je ne comprends pas comment le régler à 8 MHZ pour faire les essais
Pour le côté programmation on peut gagner pas mal de ms en optimisant les procédures
L’intérêt est évidement sur les grosses écritures…
Un nop * 240 *240 *2 , cela commences à faire des ms à la fin
La suite demain, mais le ms ne sont pas négligeables
Un Bilan du fonctionnement de notre 18f26k22 avec un écran GC9A01 ou un Ecran ILI 9341
4 Mode de fonctionnement possible pour le module SPI et test sur l’affichage d’un écran en 240*240 en couleur Noir
1MHZ = 1.0946 Seconde
4MHZ = 360 ms
16MHZ = 165ms
Mode TMR2 pour l’instant cela bloque … car je ne comprends pas comment le régler à 8 MHZ pour faire les essais
Pour le côté programmation on peut gagner pas mal de ms en optimisant les procédures
L’intérêt est évidement sur les grosses écritures…
Un nop * 240 *240 *2 , cela commences à faire des ms à la fin
La suite demain, mais le ms ne sont pas négligeables
Modifié en dernier par francois77 le sam. 25 mars 2023 07:42, modifié 1 fois.
Ecran OLED rond GC9A01
Bonjour,
En fait à 16MHz le temps mort de 0,7 us est normal, il y a une dizaine d'instructions après l'écriture de SSPBUF, et on ne fait rien pendant l'envoi de la data.
Voilà un code optimisé qui utilise ce temps mort et efface l'écran avec une seule couleur. On arrive à 0,4us, le cycle complet est inférieur à 1us. Il faut ajuster le nombre de nop, et plus besoin de test de bit.
Pour afficher un bitmap, on remplace "movlw data" par "tblrd*+ movf TABLAT,W".
Pour le timer 2 18F26K22 il faut mettre 1 dans T2PR et démarrer le timer sans prescaler avec 0x04 dans T2CON.
Les timers du 18F47Q10 sont plus complexes.
En fait à 16MHz le temps mort de 0,7 us est normal, il y a une dizaine d'instructions après l'écriture de SSPBUF, et on ne fait rien pendant l'envoi de la data.
Voilà un code optimisé qui utilise ce temps mort et efface l'écran avec une seule couleur. On arrive à 0,4us, le cycle complet est inférieur à 1us. Il faut ajuster le nombre de nop, et plus besoin de test de bit.
Pour afficher un bitmap, on remplace "movlw data" par "tblrd*+ movf TABLAT,W".
Code : Tout sélectionner
test movlb high SSP2BUF ; bank SSPBUF/SSPCON
clrf cpt2 ; 65536 (115200 = 65536+49664)
loop12 clrf cpt1
loop11 nop
movf SSP2BUF,W
movlw 0x83
movwf SSP2BUF
decfsz cpt1
bra loop11
decfsz cpt2
bra loop12
movlw 194 ; 49664
movwf cpt2
loop22 clrf cpt1
loop21 nop
movf SSP2BUF,W
movlw 0x83
movwf SSP2BUF
decfsz cpt1
bra loop21
decfsz cpt2
bra loop22
Pour le timer 2 18F26K22 il faut mettre 1 dans T2PR et démarrer le timer sans prescaler avec 0x04 dans T2CON.
Les timers du 18F47Q10 sont plus complexes.
Ecran OLED rond GC9A01
-
francois77
Passioné- Messages : 307
- Enregistré en : avril 2022
Ecran OLED rond GC9A01
-
francois77
Passioné- Messages : 307
- Enregistré en : avril 2022
Hello,
Pas testé ton programme mais testé un équivalent maison
Ca marche en simu mais pas en réel ? (80 ms pour écrire un l'écran)
Je te propose une nouvelle solution qui fonctionne sur mes essais
attends
btfss SSP1STAT,BF ; Attente si dispo
bra attends
movf Couleur_H,w ;
movwf SSP1BUF ; on écrit
NOP ....... ou instruction
attends
btfss SSP1STAT,BF ; Attente si dispo
bra attends
movf Couleur_H,w ;
movwf SSP1BUF ; on écrit
Si il y x instruction avant le test BF on passe directement a l'écriture
L'avantage c'est de ne plus attendre pour rien
A suivre
Pas testé ton programme mais testé un équivalent maison
Ca marche en simu mais pas en réel ? (80 ms pour écrire un l'écran)
Je te propose une nouvelle solution qui fonctionne sur mes essais
attends
btfss SSP1STAT,BF ; Attente si dispo
bra attends
movf Couleur_H,w ;
movwf SSP1BUF ; on écrit
NOP ....... ou instruction
attends
btfss SSP1STAT,BF ; Attente si dispo
bra attends
movf Couleur_H,w ;
movwf SSP1BUF ; on écrit
Si il y x instruction avant le test BF on passe directement a l'écriture
L'avantage c'est de ne plus attendre pour rien
A suivre
Ecran OLED rond GC9A01
Retourner vers « Langage ASM »
Qui est en ligne
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 52 invités