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
satinas
Expert
Expert
Messages : 1225
Enregistré en : novembre 2015

#91 Message par satinas » ven. 24 mars 2023 12:13

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

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

#92 Message par paulfjujo » ven. 24 mars 2023 14:06

bonjour à tous,

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.
Aide toi, le ciel ou FantasPic t'aidera

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

#93 Message par francois77 » ven. 24 mars 2023 15:46

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

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

#94 Message par satinas » ven. 24 mars 2023 15:57

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.

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

#95 Message par satinas » ven. 24 mars 2023 21:24

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.

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é
Passioné
Messages : 307
Enregistré en : avril 2022

#96 Message par francois77 » ven. 24 mars 2023 22:14

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
Modifié en dernier par francois77 le sam. 25 mars 2023 07:42, modifié 1 fois.

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

#97 Message par satinas » sam. 25 mars 2023 06:07

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".

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é
Passioné
Messages : 307
Enregistré en : avril 2022

#98 Message par francois77 » sam. 25 mars 2023 07:47

Bonjour Satinas

Voleur d'idée humour!!

J'avais commencé aussi a traiter le traitement sans le btfss SSP1STAT,BF et cela est prometteur

Je vais regarder cela dans la journée, le soleil n'étant pas particulièrement présent ce matin

On doit pouvoir s'amuser avec ce petit écran

A+

Francois

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

#99 Message par francois77 » sam. 25 mars 2023 08:58

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

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

#100 Message par satinas » sam. 25 mars 2023 09:09

Le test de bit bouffe 3 cycles à la fois, avec nop on travaille au cycle près.
Ce que je ne comprends pas dans mon code, c'est qu'il y a environ 8 cycles exécutés entre les écritures de SSPBUF, donc le temps mort devrait être minime et pas 0,4us. Mais bon, l'oscillo a toujours raison sur le code :)


Retourner vers « Langage ASM »

Qui est en ligne

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