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 tactile ILI9341
JMarc
Confirmé
Confirmé
Messages : 605
Enregistré en : août 2016
Localisation : Dans le Sud...

#21 Message par JMarc » lun. 6 nov. 2017 18:38

Bonjour Satinas


satinas a écrit :Juste un petit problème d'orientation :)


Elle est bien mon orientation, je l'ai tourné exprès :sifflotte: pour une fois que j'y arrive tout seul ...

J'ai sorti le voltmètre, compris ou sont les résistances, je suppose qu'il faut mettre le port data niveau haut et mesurer en analogique l'autre côté des résistances.

J'avais réussi a lire les valeurs en analogique sur un lcd 4 lignes mais avant d'utiliser le tactile, je vais créé une routine et afficher la valeur sur l'écran

Tiens voici mon cuiseur d'œuf qui ce modernise

Image

Ecran tactile ILI9341
Temps-x
Avatar de l’utilisateur
Expert
Expert
Messages : 2595
Enregistré en : juillet 2016
Localisation : Terre

#22 Message par Temps-x » mar. 7 nov. 2017 01:41

Bonjour JMarc, Satinas, et tous le forum,

:bravo: JMarc , je suis vraiment loin derrière toi, mais pour l'instant j'ai pas le temps de m’occupè de cela. :cry:
Je fais mon possible pour revenir avec vous le plus vite possible, merci pour satinas, et c'est précieux conseils.

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

Ecran tactile ILI9341
JMarc
Confirmé
Confirmé
Messages : 605
Enregistré en : août 2016
Localisation : Dans le Sud...

#23 Message par JMarc » jeu. 9 nov. 2017 19:35

Bonjour tout le monde


Temps-x a écrit :Bonjour JMarc, Satinas, et tous le forum,

:bravo: JMarc , je suis vraiment loin derrière toi, mais pour l'instant j'ai pas le temps de m’occupè de cela. :cry:
Je fais mon possible pour revenir avec vous le plus vite possible, merci pour satinas, et c'est précieux conseils.

A+


Y a pas de soucis temp-x et merci Satinas pour ta patience :bravo:





Aller, le fruit de mes recherches

Ecran 5408, j'ai 550homs entre d6 et rs . Pareil entre d7 et rs mais avec des variations si appuyé
550homs entre d7 et wr

Ecran ili 9341,300homs c'est entre d0 et rs et d1 et rs pour les variations, il y a aussi 550 Homs entre d1 et cs

Si je met d0 a 0volt et d1 a 5 volts alors j'ai les y sur cs compris entre 2,2 et 4,4 volts
Les x sur rs entre 0,3 et 1,4 volts

Ces valeurs ne sont pas vraiment stable mais il falais que je vous fasse profiter dehors!!

Ecran tactile ILI9341
venom
Avatar de l’utilisateur
Confirmé
Confirmé
Messages : 953
Âge : 38
Enregistré en : avril 2016
Localisation : Klyntar
Contact :

#24 Message par venom » ven. 10 nov. 2017 22:46

:eek: Alors sa c'est du cuiseur d’œuf. Ils vont être plus que parfait avec un tel appareil :wink:
Bravo pour vos travaux. Et vive la persévérance :-D 8-)






@++
Mon site web
Mon discord : venom#4888

Ecran tactile ILI9341
JMarc
Confirmé
Confirmé
Messages : 605
Enregistré en : août 2016
Localisation : Dans le Sud...

#25 Message par JMarc » sam. 11 nov. 2017 22:11

Bonjour tous le monde

venom a écrit ::eek: Alors sa c'est du cuiseur d’œuf. Ils vont être plus que parfait avec un tel appareil :wink:
Bravo pour vos travaux. Et vive la persévérance :-D 8-)

@++


Merci



Donc travaux en cours...
Changement de port pour les commandes, j'ai tout passé sur le portA pour avoir accès a l'analogique
Donc après affichage, je passe trisA en mode entrée, envoi 1 sur portD, choisi le canal 2 puis 3 pour les numérisation, rebelote avec 2 sur portD puis repasse trisA en sorti et affiche le résultat

La colonne de gauche est x et à droite y

image.jpg

image.jpg

image.jpg

image.jpg

image.jpg
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.

Ecran tactile ILI9341
satinas
Expert
Expert
Messages : 1225
Enregistré en : novembre 2015

#26 Message par satinas » dim. 12 nov. 2017 18:57

Bonjour à tous,

JMarc, on a les 2 mêmes lcds, à part que j'ai un ST7783 au lieu du SPFD5408. Tu as été beaucoup plus perspicace, car tu as détecté que les plaques du tactile analogique ne sont pas sur les mêmes pins. Cela explique pourquoi je n'étais pas arrivé à le faire fonctionner, ne pouvant pas imaginer qu'ils livraient des lcds d'aspect identique, avec des brochages différents :)

Après quelques jours de boulot intensif, le ST7783 marche bien (sur Arduino), mais il est très inférieur au ILI9341. Notamment pour l'orientation beaucoup plus complexe. Sur le ILI9341, on modifie un registre pour passer du mode portrait au mode paysage, et tout suit derrière. Sur l'autre il faut changer 3 registres, et il faut aussi en tenir compte chaque fois qu'on définit une fenêtre à remplir. De plus il n'a pas de scroll hardware (le SPFD5408 a ce scroll).
Bref, ce 2ème lcd va partir à la poubelle, car je vais pas maintenir une bibliothèque de plus, avec un brochage différent, pour un lcd de capacités inférieures. Si quelqu'un est intéressé je lui envoie, mais il ne vaut pas le coup.
Vive Banggood, en fin de compte, il coûtait juste, 1 euro de plus ...

Pour lire le x d'un appui, on polarise la plaque X et on mesure sur la pin analogique de la plaque Y. Pour lire y, on fait l'inverse. Mais avant cela, il faut détecter l'appui en mesurant la pression d'appui. Voila comment Arduino lit cette pression, dans la boucle du main.
En utilisant les pins Vref- et Vref+ de l'ADC du pic, tu dois pouvoir améliorer la précision, si nécessaire. Arduino ne le fait pas.

Code : Tout sélectionner

       ILI9341        SPFD5408/ST7783
_xm    lcd_rs         lcd_rs  (analogique)
_xp    lcd_d0         lcd_d6
_ym    lcd_d1         lcd_d7                     
_yp    lcd_cs         lcd_wr  (analogique)

uint16_t TouchScreen::pressure(void) {
  // Set X+ to ground
  pinMode(_xp, OUTPUT);
  digitalWrite(_xp, LOW);
 
  // Set Y- to VCC
  pinMode(_ym, OUTPUT);
  digitalWrite(_ym, HIGH);
 
  // Hi-Z X- and Y+
  digitalWrite(_xm, LOW);
  pinMode(_xm, INPUT);
  digitalWrite(_yp, LOW);
  pinMode(_yp, INPUT);
 
  int z1 = analogRead(_xm);
  int z2 = analogRead(_yp);

  return (1023-(z2-z1));
}


Tu vas finir par lire couramment le C :)
Bon courage pour la suite

Ecran tactile ILI9341
JMarc
Confirmé
Confirmé
Messages : 605
Enregistré en : août 2016
Localisation : Dans le Sud...

#27 Message par JMarc » dim. 12 nov. 2017 21:14

Bonjour Satinas

Merci pour tes infos, memes si je ne les traites pas immédiatement, j'en prend note pour plus tard.

je n'ai pas bien compris la pression de l'appuis, c'est d'ailleur mon probleme pour l'instant de meme que la valeur x ou y de droite et gauche ne sont pas identique. effectivement je n'ai pas la meme valeur si appuis avec le stylet ou bien si appuis avec le doit mais effectivement j'ai l'ecart inverse si j'inverse la polarisation donc il doit y avoir une formule pour faire la moyenne

tien un bout de code car maintenant je commande les boutons valid et start sans probleme

Code : Tout sélectionner

    movlw   b'00001100'
    
movwf   TRISA
    movlw   
b'00000010'         ;D1=>A2 RS
    movwf   LATD

    clrf    ADCON1
    movlw   
B'00010010'
    
movwf   ADCON2
    movlw   
B'00001001'     canal 2 RS
    movwf   ADCON0
    Tempo_10us .5       
;5X10us
    bsf     ADCON0
,GO
    Tempo_ms .15        
15 ms
    movlw     0x06                
port A en mode numérique
    movwf    ADCON1                
dans registre de contrôle
    clrf    TRISA
    movf    ADRESH
,w
    movwf   mesure_x1

;******************************************
    
movlw   b'00001100'
    
movwf   TRISA
    movlw   
b'00000001'     ;D0=>A2
    movwf   LATD
    clrf    ADCON1
    movlw   
B'00010010'
    
movwf   ADCON2
    movlw   
B'00001001'     canal 2
    movwf   ADCON0
    Tempo_10us .5       
;5X10us
    bsf     ADCON0
,GO
    Tempo_ms .15        
15 ms
    movlw     0x06                
port A en mode numérique
    movwf    ADCON1                
dans registre de contrôle
    clrf    TRISA
    movf    ADRESH
,w
    movwf   mesure_x2

Ecran tactile ILI9341
satinas
Expert
Expert
Messages : 1225
Enregistré en : novembre 2015

#28 Message par satinas » dim. 12 nov. 2017 22:10

Mesures faites sur le lcd ILI9341

Code : Tout sélectionner

        110           830
                y-
  80      -------------   
         |             |
  120    |-------------|
         |             |
         |             |
      x- |             | x+
         |             |
         |             |
         |             |
         |             |
  830     -------------
                y+

plage de mesure adc en x -> 110 à 830
plage de mesure adc en y -> 80 à 830 (80 à 120 zone boutons en dehors du lcd)

Pour lire la pression, je le comprends comme ça :
- On met x+ à 0V et y- à Vcc
- On mesure z1 sur x-. Si pas d'appui l'adc trouve 0V donc z1 = 0, si appui, z1 augmente
- On mesure z2 sur y+. Si pas d'appui l'adc trouve Vcc donc z2 = 850, si appui, z2 diminue
Donc si appui (z2-z1) diminue progressivement de 850 à 300 environ.
Pour avoir une valeur croissante avec la pression d'appui, on fait 1023-(z2-z1)

Ecran tactile ILI9341
JMarc
Confirmé
Confirmé
Messages : 605
Enregistré en : août 2016
Localisation : Dans le Sud...

#29 Message par JMarc » lun. 13 nov. 2017 19:01

Bonjour a tous

Satinas, maintenant que cela s'affiche, j'effectue les modifications et essais que tu m'as demandé

Donc la routine d'envoi des commandes et des données pour que cela serve aux forumeurs :wink:

Code : Tout sélectionner

Envoi_cmd
    bcf     LCD_RS
    movwf   LCD_DATA
    bcf     LCD_WR
    nop
    bsf     LCD_WR
    
return
    
Envoi_data_8
    bsf     LCD_RS
    movwf   LCD_DATA
    bcf     LCD_WR
    nop    
    bsf     LCD_WR
    clrf    LCD_DATA
    
return 


J'ai aussi déconnecté la broche rst et cela fonctionne également

et la macro pour l'initialisation faite au minimum

Code : Tout sélectionner

INITIALISATION_TFT  macro
;****************************************************************
;                    
Debut initialisation par JMarc
;*****************************************************************
    
Tempo_10ms .100
    bcf     LCD_CS
    bsf     LCD_WR
    bsf     LCD_RD
    bsf     LCD_RST
    Tempo_10ms .20
    bcf     LCD_RST    
reset hard
    Tempo_10ms .10
    bsf     LCD_RST

    Tempo_10ms .20    
200 millisecondes

    movlw   0x01        
reset soft
    call   Envoi_cmd 

    Tempo_10ms .10

    movlw   0x3A        
colmod
    call   Envoi_cmd
    movlw   0x55        
16 bits/pixel   65K couleurs  rgb 565 '1010101'
    
call   Envoi_data_8

    movlw   0x11        
sleep out
    call   Envoi_cmd

    movlw   0x29        
ecran on
    call   Envoi_cmd

 
;************************Fin de l'initialisation********   
    movlw   0x36        ; memory access control
    call   Envoi_cmd
    movlw   b'
11100000' ; inversion ecran
    call   Envoi_data_8
    endm

Ecran tactile ILI9341
satinas
Expert
Expert
Messages : 1225
Enregistré en : novembre 2015

#30 Message par satinas » lun. 13 nov. 2017 19:39

Pas facile de se comprendre, sans en mettre des tartines ...
J'ai beaucoup parlé de macros, mais c'était pour démarrer le SPFD5408 qui demande beaucoup de commandes d'initialisation. Du style la macro c8_d16 qui figure dans le dernier programme que tu as testé.

Code : Tout sélectionner

init_5408 bcf     LCD_CS
          c8_d16  0xb0, 0x0000
          c8_d16  0xe5, 0x8000
          c8_d16  0x00, 0x0001
          c8_d16  0x01, 0x0100
          c8_d16  0x02, 0x0700
          c8_d16  0x03, 0x1030
          c8_d16  0x04, 0x0000
          ...


J'ai continué à en parler pour l'ILI9341, là c'était une erreur. Pour le ILI9341 qu'on démarre avec seulement 3 commandes, ce n'est pas absolument nécessaire d'avoir une telle macro pour l'init, et encore moins une macro qui fait toute l'init. Soit tu mets tout ça en début de programme, soit tu fais juste le reset puis tu appelles l'init qui est un sous-programme.

On reparlera des macro plus tard, quand il s'agira d'optimiser en vitesse. On oublie, fais des sous-programmes, tu seras plus à l'aise.


Retourner vers « Langage ASM »

Qui est en ligne

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