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)
Temps-x
Avatar de l’utilisateur
Expert
Expert
Messages : 2596
Enregistré en : juillet 2016
Localisation : Terre

#21 Message par Temps-x » dim. 1 oct. 2017 00:46

Bonjour JMarc, et tous le monde,

Le lien que tu viens de donnée explique très bien comment mettre en fonction l'écran, j'attends le miens avec impatience pour
commencer, j'ai bien peur qu'il n'arrive jamais, avec la poste de chez moi :mad:

Merci ! pour le lien

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

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

#22 Message par JMarc » dim. 1 oct. 2017 00:54

Bonjour temps-x

Il n'y a pas de raison qu'il n'arrive pas. Ce le même lien ou nous avons commandé.

Je me surprend à lire les forum d'arduino :cry: pour arriver à faire fonctionner ce lcd :langue:

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

#23 Message par satinas » dim. 1 oct. 2017 08:22

Bonjour,

https://www.youtube.com/watch?v=Js4wykWY6zg
Je penche pour un ILI9342. A mon avis tous les ILI démarrent avec les mêmes commandes simples de base. Après il y a toute une batterie de commandes secondaires de réglage, gamma, scroll, ...
La commande de lecture de l'ID code permet avec un peu de chances d'identifier le contrôleur, mais ce n'est pas garanti, quand on voit les sources Arduino où cela tâtonne sur. Effectivement Arduino, cela a un côté Shadok
La bibliothèque Arduino Mcufriend est là, avec sa commande readID() dans MCUFRIEND_kbv.cpp
https://github.com/prenticedavid/MCUFRIEND_kbv

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

#24 Message par Temps-x » dim. 1 oct. 2017 13:47

Bonjour satinas, et bonjour a tous,

Ouais, ben je crois que tu as raison, ça doit être un ILI9342, datasheet mis en début de poste : viewtopic.php?p=6793#p6793

Mais actuellement j'attends toujours mon écran (enfin je peux toujours rêvé avec la poste de chez moi) :furieux:

Pour l'instant je m'informe, en examinant soigneusement le schéma éléctronique, le schéma que je possède corresponds à un SPFD5408A
mais sa me permets de comprendre plein de chose.

J'ai fait pas mal de découverte, là dessus, surtout sur le touché de contrôl de l'écran, qui est piloté par un ADS7843.
datasheet mis en début de poste : viewtopic.php?p=6793#p6793

Très instructif de regarder un schéma, car on peu prendre élément par élément pour on comprendre leur fonctionnement.
A savoir que l'écran, et un écran résistif, mais pas capacitif.

L'explication d'un écrans tactiles résistifs :

Les écrans tactiles résistifs sont relativement moins chers que les écrans tactiles capactifis.
Ils sont construits avec deux feuilles flexibles revêtues d'un matériau résistif et séparées par des micro-pointes.
lorsqu'on effectue une pression, les feuilles viennent en contact et enregistre le point de contact.

Merci de participé :wink:

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

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

#25 Message par satinas » dim. 1 oct. 2017 14:22

:( non, il n'y a pas d'ADS7843, contrôleur qui gère avec son adc un tactile résistif, et qui sort les mesures sur une interface sérielle spi. C'est aussi le cas du lcd dont je t'avais parlé, qui a lui un XPT2046.

Le lcd dont on parle n'a aucun contrôleur, il faut se taper les mesures avec l'adc du pic, et c'est pas simple. J'ai fait mes propres fonctions, en m'inspirant fortement des librairies Arduino existantes, merci à leurs concepteurs au passage. Je trouve dommage de s'embêter avec tout cela, mais bon, quand on aime on compte pas :)

Avec l'ADS7843, il suffit de lire 2 ou 3 octets sur le port spi et on a la mesure, sans lui voila ce que cela donne ...

Code : Tout sélectionner

//-----------------------------------------------------------------------------
bool Lcd_pm8_240x320::tsPressed()
//-----------------------------------------------------------------------------
// ts adc uno, retourne booleen en cours d'appui, renseigne _tsPress
// appui avec un stylet -> 500 a 600
// appui avec le doigt  -> 500 a 900
{
  pinMode(TS_XMA, INPUT);  digitalWrite(TS_XMA, 0);   // x- input analogique, no pullup (lcd_rs hi)
  pinMode(TS_YPA, INPUT);  digitalWrite(TS_YPA, 0);   // y+ input analogique, no pullup (lcd_cs hi)
  digitalWrite(TS_XP,  0);                            // x+ output numerique, low       (lcd_d0 0)
  digitalWrite(TS_YM,  1);                            // y- output numerique, high      (lcd_d1 1)
  _tsPress = 1023-(analogRead(TS_YPA)-analogRead(TS_XMA));
  pinMode(TS_XMA, OUTPUT);                            // x- output numerique, low       (lcd_rs 0)
  digitalWrite(TS_YPA, 1); pinMode(TS_YPA, OUTPUT);   // y+ output numerique, high      (lcd_cs off)
  return _tsPress >= TOUCH_PRESSURE;                  // x+ output numerique, low       (lcd_d0 0)
}                                                     // y- output numerique, high      (lcd_d1 1)

//-----------------------------------------------------------------------------
void Lcd_pm8_240x320::tsRead()                        // dure 1ms environ
//-----------------------------------------------------------------------------
// ts adc uno, acquisition, renseigne _tsCpt,_tsMs,_tsX,_tsY
//
//  si _tsCpt = 0  -> pas d'appui en cours
//     _tsMs       -> duree en ms dernier appui
//     _tsX,_tsY   -> coordonnees ts du dernier appui
//
//  si _tsCpt != 0 -> appui en cours, nb d'appels a tsRead() ayant retourne des coordonnees valides
//     _tsMs       -> top depart millis()  de l'appui
//     _tsX,_tsY   -> coordonnees de l'appui en cours
{
  if (tsPressed()) {                                  // appui ts, read _tsX
    pinMode(TS_YM,  INPUT);  digitalWrite(TS_YM,  0); // y- input numerique, no pullup  (lcd_d1 hi)
    pinMode(TS_YPA, INPUT);  digitalWrite(TS_YPA, 0); // y+ input analogique, no pullup (lcd_cs hi)
    digitalWrite(TS_XMA, 0);                          // x- output numerique, low       (lcd_rs 0)
    digitalWrite(TS_XP,  1);                          // x+ output numerique, high      (lcd_d0 1)
    int xval = analogRead(TS_YPA);                   
    int val  = analogRead(TS_YPA);
    val -= xval; if (val < 0) val = -val;
    if (val < 2) {                                    // _tsX ok, read _tsY
      pinMode(TS_XMA, INPUT);                         // x- input analogique, no pullup (lcd_rs hi)
      pinMode(TS_XP,  INPUT); digitalWrite(TS_XP, 0); // x+ input numerique, no pullup  (lcd_d0 hi)
      pinMode(TS_YM,  OUTPUT);                        // y- output numerique, low       (lcd_d1 0)
      digitalWrite(TS_YPA, 1);pinMode(TS_YPA, OUTPUT);// y+ output numerique, high      (lcd_cs off)
      int yval = analogRead(TS_XMA);
      val      = analogRead(TS_XMA);
      val -= yval; if (val < 0) val = -val;
      if (val < 2) {                                  // _tsX et _tsY ok
        _tsX = xval; _tsY = yval;
        if (!_tsCpt) _tsMs = millis();                // appui ts, demarrer chronometre
        _tsCpt++;
      }
    }
    digitalWrite(TS_YPA, 1); pinMode(TS_YPA, OUTPUT); // y+ output numerique, high      (lcd_cs off)
    pinMode(TS_XMA, OUTPUT);                          // x- output numerique, low       (lcd_rs 0)
    pinMode(TS_YM,  OUTPUT);                          // y- output numerique, low       (lcd_d1 0)
    pinMode(TS_XP,  OUTPUT);                          // x+ output numerique, low       (lcd_d0 0 ou 1)
  }
  else if (_tsCpt) {
    _tsCpt = 0; _tsMs = millis()-_tsMs;               // relachement ts, sauver duree de l'appui
  }
}

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

#26 Message par Temps-x » dim. 1 oct. 2017 16:18

écrit par satina :

:( non, il n'y a pas d'ADS7843, contrôleur


J'ai pas la platine sous la main, comme explique j'ai pas encore l'écran :furieux: alors je travaille avec un plans d'écran SPFD5408A,
Ce que je voulais, c'est comprendre le principe, pour le programmer c'est plus simple, quand j'ai bien compris.

En tous cas un grand merci à toi, avec ça on peu déjà créer un petit programme

y- = lcd_d1
y+ = lcd_cs
x- = lcd_rs
x+ = lcd_cs

Je me demande si c'est détectable avec un multimètre, j'ai hâte de passé à la programmation.

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

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

#27 Message par satinas » dim. 1 oct. 2017 16:33

Le principe est simple, pour avoir la coordonnée en x, on polarise les pins X et on fait une mesure analogique sur les pins Y. Ensuite on fait l'inverse pour avoir la coordonnée en y. Le programme ci-dessus fonctionne sur mon premier écran, le 2ème écran ne voulant rien savoir, j'en suis resté là, car entre-temps le lcd full spi était sorti. Le premier reçu n'avait pas de XPT2046 câblé, sacré chinois ! Depuis ils sont vendus complets et opérationnels. De toute façon, vu leurs prix, faut pas hésiter à en tester plusieurs et faire le tri. Le contrôleur a aussi l'avantage de fournir une pin irq qui indique s'il y a appui.
Pour le multimètre j'ai pas le souvenir d'avoir essayé, j'avais juste constaté que la résistance des plaques était très différente entre les 2 lcds.

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

#28 Message par JMarc » lun. 2 oct. 2017 14:42

bonjour a tous

quand pensez vous ?

Code : Tout sélectionner

PORT_DONNEES EQU LATD
#DEFINE LCD_RD  LATC,0
#DEFINE LCD_WR  LATC,1
#DEFINE LCD_RS  LATC,2
#DEFINE LCD_CS  LATC,3
#DEFINE LCD_RST LATC,4 


Comme cela chacun choisi son port


et pour l'envoi des données

Code : Tout sélectionner

    bsf     LCD_RST 

debut
    movf    adresse
,w
    movwf   PORT_DONNEES
    bcf     LCD_CS
    bcf     LCD_RS
    bcf     LCD_WR
    nop
    nop
    nop
    nop
    bsf     LCD_WR
    nop
    bsf     LCD_RS
    nop
    nop
    nop
    nop
    movf    donnees
,w   
    movwf   PORT_DONNEES
    bcf     LCD_WR
    nop
    nop
    nop
    nop
    bsf     LCD_WR
    nop
    nop
    nop
    nop
    bsf     LCD_CS

    incf    adresse
    decfsz  c1
    bra     debut

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

#29 Message par Temps-x » mar. 3 oct. 2017 01:29

Bonjour JMarc, satinas,et tous le monde,

:bravo:

#DEFINIE PORT_DONNEES LATD

#DEFINE LCD_RD  LATC,0
#DEFINE LCD_WR  LATC,1
#DEFINE LCD_RS  LATC,2
#DEFINE LCD_CS  LATC,3
#DEFINE LCD_RST LATC,4 



JMarc à écrit :

quand pensez vous ?


:+1: Bien sur qu'il faut procéder comme cela, par contre pour les tempo, utiliser des variables de bank communes.

il faut éviter les macros(quand on peux), les sous programmes réduise la taille du fichier ASM, et son préconisé.
Des que je reçois mon écran (je peux toujours rêver :furieux:) je me mets dessus, j'ai déjà compris comment programmer le touché tactile.


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

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

#30 Message par JMarc » jeu. 5 oct. 2017 21:42

Bonsoir Temps-x et satinas et ceux qui veulent participer bien sur :sifflotte:

suite au renseignement de Satinas dans la partie "C", voici mon premier jet
http://www.fantaspic.fr/viewtopic.php?f=10&t=117&start=130

pour les sous routines, j'ai essayé avec 1 envoi par wr et aussi par 2 envois par wr pour simuler les bits 15:8 et 7:0

Code : Tout sélectionner

Envoi_cmd
    movwf   PORT_DONNEES
    bcf     LCD_RS
    bcf     LCD_WR
    nop
    nop
    nop
    nop
    bsf     LCD_WR
    nop
    nop
    nop
    nop
    nop
    nop
    bcf     LCD_WR
    nop
    nop
    nop
    nop
    bsf     LCD_WR
    nop
    nop
    nop
    nop
    nop
    nop
    return

Envoi_data
    movwf   PORT_DONNEES
    bsf     LCD_RS
    bcf     LCD_WR
    nop
    nop
    nop
    nop
    bsf     LCD_WR
    nop
    nop
    nop
    nop
    bcf     LCD_WR
    nop
    nop
    nop
    nop
    bsf     LCD_WR
    nop
    nop
    nop
    nop
    return



et la partie programme

Code : Tout sélectionner

   movlw   D'81'
    movwf   c1      ; boucle pour write graphic in ram

    bsf     LCD_WR
    bsf     LCD_RD
    bsf     LCD_RST

    Tempo_10ms .20

debut
    bcf     LCD_CS

    movlw   0x00
    rcall   Envoi_cmd


    movlw   0x01        
; reset
    rcall   Envoi_cmd

    bsf     LCD_CS

    Tempo_10ms  .100

    bcf     LCD_CS


    movlw   0x3A        
; colmod
    rcall   Envoi_cmd
    movlw   0x55        
; 16 bits/pixel   65K couleurs  rgb 565 '1010101'
    rcall   Envoi_data

    movlw   0x20        
; inverse vidéo off
    rcall   Envoi_cmd

    movlw   0x11        
; ecran off
    rcall   Envoi_cmd

    bsf     LCD_CS

    Tempo_10ms .100
    
    bcf     LCD_CS

    movlw   0x29        
; ecran on
    rcall   Envoi_cmd

    movlw   0x36        
; Memory access control
    rcall   Envoi_cmd
    movlw   0x88        
; set orientation    '10001000'
    rcall   Envoi_data

    bsf     LCD_CS
    Tempo_10ms .100

    bcf     LCD_CS
    

    movlw   0x2A        
; set colonne adress
    rcall   Envoi_cmd
    movlw   0x00
    rcall   Envoi_data
    movlw   0x10
    rcall   Envoi_data
    movlw   0x00
    rcall   Envoi_data
    movlw   0x10
    rcall   Envoi_data      

    movlw   0x2B        
; set page
    rcall   Envoi_cmd
    movlw   0x00
    rcall   Envoi_data
    movlw   0x20
    rcall   Envoi_data
    movlw   0x00
    rcall   Envoi_data
    movlw   0x20
    rcall   Envoi_data


    movlw   0x2C        
; write graphic in ram
    rcall   Envoi_cmd
    movlw   0xF8        
; 1 pixel rouge
    rcall   Envoi_data
    movlw   0x00
    rcall   Envoi_data

    bsf     LCD_CS
    Tempo_10ms .100
    bcf     LCD_CS


    movlw   0x2A        
; set colonne adress
    rcall   Envoi_cmd
    movlw   0x00
    rcall   Envoi_data
    movlw   0x20
    rcall   Envoi_data
    movlw   0x00
    rcall   Envoi_data
    movlw   0x40
    rcall   Envoi_data


    movlw   0x2B        
; page adress
    rcall   Envoi_cmd
    movlw   0x00
    rcall   Envoi_data
    movlw   0x30
    rcall   Envoi_data
    movlw   0x00
    rcall   Envoi_data
    movlw   0x70
    rcall   Envoi_data

    movlw   0x2C        
; write graphic in ram
    rcall   Envoi_cmd

boucle

    movlw   0xF8        
; 1 pixel rouge
    rcall   Envoi_data
    decfsz  c1
,f
    bra     boucle
    bsf     LCD_CS
fin
    

   bra fin


mais pour l'instant cela ne fonctionne pas :mur:


Retourner vers « Langage ASM »

Qui est en ligne

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