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

écran tactile 2.4 TFT LCD 240 x 320 (version ASM)
satinas
Expert
Expert
Messages : 1225
Enregistré en : novembre 2015

#131 Message par satinas » mer. 18 oct. 2017 11:52

Bonjour JMarc,

Si tu veux tester le SPFD5408, il faut savoir que contrairement au ILI9341, on envoie des commandes et des datas 16 bits.
Donc il faut te faire 2 autres sous-programmes SendCmd16(cmd) et SendData16(data). Ils envoient des commandes et des datas de 16 bits, d'abord l'octet de poids fort, ensuite l'octet de poids faible.
Ensuite on resette l''écran, on envoie l'init, c'est à dire toutes les cmd+data de ce fichier (tiré de la bibliothèque Arduino Mcufriend)
Start_SPFD5408.txt

Exemple :
call SendCmd16(0x00e5)
call SendData16(0x8000)

Ensuite pour remplir un rectangle rouge
call SendCmd16(0x0050)
call SendData16(x1)
call SendCmd16(0x0051)
call SendData16(x2)
call SendCmd16(0x0052)
call SendData16(y1)
call SendCmd16(0x0053)
call SendData16(y2)
call SendCmd16(0x0022)
call SendData16(0xf800) // call d'envoi couleur rouge à exécuter n fois, avec n = (x2-x1+1)*(y2-y1+1)

Si j'ai bien tout compris, t'auras le fameux rectangle rouge tant attendu :)
Comme au reset la couleur de l'écran est indéterminée, il vaut mieux remplir d'abord un rectangle blanc (couleur 0xffff) de 240*240 pour assurer le coup.

Sous- réserves, car je vois pas bien le lien entre les commandes 0x20/0x21 et les commandes 0x50/0x51/0x52/0x53
Temps-x doit avoir son avis ...
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.

écran tactile 2.4 TFT LCD 240 x 320 (version ASM)
JMarc
Confirmé
Confirmé
Messages : 605
Enregistré en : août 2016
Localisation : Dans le Sud...

#132 Message par JMarc » mer. 18 oct. 2017 13:37

Bonjour Satinas

J'avais bien compris le coup des 16 bits , je t'avais mis le code dans les posts précédents :cry:

écran tactile 2.4 TFT LCD 240 x 320 (version ASM)
satinas
Expert
Expert
Messages : 1225
Enregistré en : novembre 2015

#133 Message par satinas » mer. 18 oct. 2017 13:39

Certaines autres bibliothèques ILI9320 envoient la commande en 8 bits et les datas en 16 bits, faut y aller sans certitudes. Vaut mieux se fier à l'Arduino d'abord, car c'est les plus nombreux :)

Ok, mes excuses, j'avais pas vu ton programme, mais pourquoi tu dis que tu sais pas faire alors. Il te manquait l'init, mais celle-là, difficile de l'inventer, en espérant qu'elle soit bonne.

Il est plus simple pour les calculs et la config du contrôleur de faire des rectangles dont l'un des points est en 0,0.

écran tactile 2.4 TFT LCD 240 x 320 (version ASM)
JMarc
Confirmé
Confirmé
Messages : 605
Enregistré en : août 2016
Localisation : Dans le Sud...

#134 Message par JMarc » mer. 18 oct. 2017 18:33

Bon je n'ai pas calculé la boucle mais rien ne change, pas la moindre trace rouge :cry:

Code : Tout sélectionner

satinas
;call SendCmd16(0x00e5)
    
movlw   0x00
    movwf   cmd1
    movlw   0xE5
    movwf   cmd2
    rcall   Envoi_cmd

;call SendData16(0x8000)
    
movlw   0x80
    movwf   data1
    movlw   0x00
    movwf   data2
    rcall   Envoi_data

;Ensuite pour remplir un rectangle rouge
;call SendCmd16(0x0050)

    
movlw   0x00
    movwf   cmd1
    movlw   0x50
    movwf   cmd2
    rcall   Envoi_cmd
    
;call SendData16(x1)
    
movlw   0x0
    movwf   data1
    movlw   0x50
    movwf   data2
    rcall   Envoi_data

;call SendCmd16(0x0051)
    
movlw   0x00
    movwf   cmd1
    movlw   0x51
    movwf   cmd2
    rcall   Envoi_cmd

;call SendData16(x2)
    
movlw   0x80
    movwf   data1
    movlw   0x00
    movwf   data2
    rcall   Envoi_data

;call SendCmd16(0x0052)
    
movlw   0x00
    movwf   cmd1
    movlw   0x10
    movwf   cmd2
    rcall   Envoi_cmd

;call SendData16(y1)
    
movlw   0x80
    movwf   data1
    movlw   0x00
    movwf   data2
    rcall   Envoi_data

;call SendCmd16(0x0053)
    
movlw   0x00
    movwf   cmd1
    movlw   0x53
    movwf   cmd2
    rcall   Envoi_cmd

;call SendData16(y2)
    
movlw   0x80
    movwf   data1
    movlw   0x00
    movwf   data2
    rcall   Envoi_data

;call SendCmd16(0x0022)
    
movlw   0x00
    movwf   cmd1
    movlw   0x22
    movwf   cmd2
    rcall   Envoi_cmd

;call SendData16(0xf800// call d'envoi couleur rouge à exécuter n fois, avec n = (x2-x1+1)*(y2-y1+1)
    
movlw   0xF8
    movwf   data1
    movlw   0x00
    movwf   data2

    movlw   0xFF
    movwf   c1
    movlw   0xFF
    movwf   c2
boucle3
    rcall   Envoi_data
    decfsz  c1
,f
    bra     boucle3
    decfsz  c2
,f
    bra     boucle3
    bsf     LCD_CS

écran tactile 2.4 TFT LCD 240 x 320 (version ASM)
satinas
Expert
Expert
Messages : 1225
Enregistré en : novembre 2015

#135 Message par satinas » mer. 18 oct. 2017 18:38

Tu n'as mis qu'une seule ligne de l'init, il y en a plein, dont celle qui lève le sleep, et le display on ... ?
Fais toi des macros, indispensables car il y en a un paquet de commandes dans l'init ...
On peut pas avoir des variables 16 bits dans l'assembleur ? je sais plus, va falloir que je révise mon asm :)
L'envoi de x2 est pas net, celui de 0x52 non plus, les suivants non plus, tu vois, les macros ça aide à faire moins d'erreurs

écran tactile 2.4 TFT LCD 240 x 320 (version ASM)
JMarc
Confirmé
Confirmé
Messages : 605
Enregistré en : août 2016
Localisation : Dans le Sud...

#136 Message par JMarc » mer. 18 oct. 2017 19:11

La premiere parti est ici

Code : Tout sélectionner

;*****************************************************************
    
bcf     LCD_CS
    bsf     LCD_WR
    bsf     LCD_RD
    bsf     LCD_RST
    Tempo_10ms .20
    bcf     LCD_RST
    Tempo_10ms .1
    bsf     LCD_RST
    Tempo_10ms .20

    movlw   D
'216'
    
movwf   c1      boucle pour write graphic in ram
    movlw   D
'4'
    
movwf   c2

    movlw   D
'255'
    
movwf   c01

    bcf     LCD_CS

;********************************* 
    
clrf    cmd1
    movlw   0x10    
power control 1
    movwf   cmd2
    rcall   Envoi_cmd
    clrf    data1
    movlw   
b'00110000'
    
movwf   data2
    rcall   Envoi_data 

    bra     satinas


pour les macros, pour l'instant rien ne fonctionne donc c'est plus simple de changer directement dans le source
mais bien sur qu'il y aura des sous programmes et des macros avec passages de paramètres

écran tactile 2.4 TFT LCD 240 x 320 (version ASM)
satinas
Expert
Expert
Messages : 1225
Enregistré en : novembre 2015

#137 Message par satinas » mer. 18 oct. 2017 19:21

je suis pas trop d'accord, cela me semble infaisable sans erreur, vu la complexité de l'init.
après avoir survolé la doc, je m'avance peut être, mais on doit pouvoir faire une macro du style

snd_cmd_data 0xe5,0x8000
....
snd_cmd_data 0x50,0
snd_cmd_data 0x51,239
...

Tu penses pouvoir le faire, sinon on peut le faire ensemble, faudra juste que je me réacclimate, de toute façon ça m'amuse de repartir un peu sur les pics.
Bon, je vois que y a pas que Temps-x qui est têtu, on est trois :)

écran tactile 2.4 TFT LCD 240 x 320 (version ASM)
Jérémy
Administrateur du site
Administrateur du site
Messages : 2722
Âge : 44
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#138 Message par Jérémy » mer. 18 oct. 2017 20:08

Quand à la solution de repli, bien non non et non, cela sera en asm !!!

Et tu as entièrement raison.

Courage les gars!!
C'est en faisant des erreurs, que l'on apprend le mieux !!!

écran tactile 2.4 TFT LCD 240 x 320 (version ASM)
satinas
Expert
Expert
Messages : 1225
Enregistré en : novembre 2015

#139 Message par satinas » mer. 18 oct. 2017 20:40

La voila la solution de repli, et avec des macros, les tempos sont très approximatives, et ça clignote sur le lcd :)

Code : Tout sélectionner

        list        p=18F4685         ; lcd uno ILI9341
        #include  <p18f4685.inc>

        config  OSC = IRCIO67
        config  WDT = OFF

#define LCD_RD  LATC,0    ; write mode
#define LCD_WR  LATC,1    ; enable
#define LCD_RS  LATC,2
#define LCD_CS  LATC,3
#define LCD_RST LATC,4    ; reset
#define LED     LATC,5

mloop1  equ     0x10
wloop1  equ     0x11
wloop2  equ     0x12
wloop3  equ     0x13
wloop4  equ     0x14

        org     0
   
movadr  macro   arg,val
        movlw   val
        movwf   arg
        endm

cmd     macro   reg
        movlw   reg
        call    send_cmd
        endm

cmd_val macro   reg,val
        movlw   reg
        call    send_cmd
        movlw   val
        call    send_data
        endm

        movadr  ADCON1,0x0f
        movadr  OSCCON,0x73
        movadr  TRISC,0
        movadr  TRISD,0
        movadr  LATC,0

        movadr  mloop1,6
t10     call    wait_100ms
        call    wait_100ms
        btg     LED
        decfsz  mloop1,f
        goto    t10
   
        bsf     LCD_CS
        bsf     LCD_WR
        bsf     LCD_RD
        bsf     LCD_RST
        call    wait_100ms
        bcf     LCD_RST
        call    wait_1ms
        bsf     LCD_RST
        call    wait_100ms

        bcf     LCD_CS
        cmd_val 0x3A,0x55   ; 16 bits/pixel   65K couleurs  rgb565
        cmd     0x20        ; inverse vidéo off
        cmd     0x11        ; sleep out
        cmd     0x29        ; ecran on
        cmd_val 0x36,0x88   ; Memory access control, set orientation
        bsf     LCD_CS
        call    wait_100ms

altern
        bcf     LCD_CS
        cmd     0x28        ; ecran off
        bsf     LCD_CS
        call    wait_1s
        bcf     LCD_CS
        cmd     0x29        ; ecran on
        bsf     LCD_CS
        call    wait_1s
        bra     altern

send_cmd
        movwf   LATD
        bcf     LCD_RS
        bcf     LCD_WR
        bsf     LCD_WR
        bsf     LCD_RS
        return

send_data
        movwf   LATD
        bcf     LCD_WR
        bsf     LCD_WR
        return

wait_1s movadr  wloop1,10
t91     call    wait_100ms
        decfsz  wloop1,f
        goto    t91

wait_100ms
        movadr  wloop2,100
t92     call    wait_1ms
        decfsz  wloop2,f
        goto    t92

wait_1ms
        movadr  wloop3,2
t93     clrf    wloop4
t94     decfsz  wloop4,f
        goto    t94
        decfsz  wloop3,f
        goto    t93
        return

        end

écran tactile 2.4 TFT LCD 240 x 320 (version ASM)
Temps-x
Avatar de l’utilisateur
Expert
Expert
Messages : 2595
Enregistré en : juillet 2016
Localisation : Terre

#140 Message par Temps-x » mer. 18 oct. 2017 22:30

Bonjour satinas, JMarc, Jérémy, et tous le forum,

JMarc à écrit :

j’apprends même le C pour arrivé à comprendre humour!! Traitre

Quand à la solution de repli, bien non non et non, cela sera en asm !!! :+1:


Jérémy à écrit :

Je vois que vous galérer grave..... désolé pour vous . 

Pas du tous, on prends notre pied, t’inquiète on te feras des bibliothèques pour le C+ :lol: 


écrit par satinas

Là j'ai pas compris.


Ne pas oublier que c'est un écran 6 bits, voir ici pour les branchement, mais j'ai des doutes, car l'auteur dit pas mal de bêtise. :sifflotte:
http://ouilogique.com/2-4-in_TFT_Touch_screen/

Voilà ce que j'ai trouvé, euh..... JMarc va hurler, si tu lui expliques. :lol:
https://mikesmodz.wordpress.com/2015/03 ... -displays/

Datasheet mis en début de poste du ST7781

Pour recherche du drivers je me suis inspiré de
http://www.microcontroller-project.com/ ... o-uno.html

A tous hasard, sais tu comment ça fonctionne ?

Code : Tout sélectionner


void lcdWrite8
(uint16_t data)
{
    digitalWrite(LCD_D0, data & 1);
    digitalWrite(LCD_D1, (data & 2) >> 1);
    digitalWrite(LCD_D2, (data & 4) >> 2);
    digitalWrite(LCD_D3, (data & 8) >> 3);
    digitalWrite(LCD_D4, (data & 16) >> 4);
    digitalWrite(LCD_D5, (data & 32) >> 5);
    digitalWrite(LCD_D6, (data & 64) >> 6);
    digitalWrite(LCD_D7, (data & 128) >> 7);
}
 


A+
:roll: Les requins, c'est comme le langage ASM, c'est le sommet de la chaîne alimentaire. :wink:


Retourner vers « Langage ASM »

Qui est en ligne

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