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)
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 2589
Âge : 73
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#201 Message par paulfjujo » mar. 13 mars 2018 12:45

satinas a écrit :Dans mon cas le MSB est shifté 8 fois à gauche, puis 3 fois à droite, ça fait bien 5 à l'arrivée :)


Exact, mais moins évident pour ma "comprenette" personelle.

:?: et au sujet du delta maxi-mini de mesure x ou y, que j'obtiens,
nettement plus faible que tes resultats ?
une piste , suggestion, idée ?

en attendant, je vais faire un test avec l'analyser logique , pour visualiser l'echange de datas..
Aide toi, le ciel ou FantasPic t'aidera

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

#202 Message par satinas » mar. 13 mars 2018 13:37

ouille x = xx >>3;

de l'avantage de la syntaxe C qui suit, on évite de taper 2 fois la même chose, source d'erreur
x >>= 3;

Toujours déclarer les variables le plus tard possible, si xx était déclarée dans le for, le compilateur ne laissait pas passer. Et xx est un très mauvais choix de nom de variable, là c'est ma faute :)

écran tactile 2.4 TFT LCD 240 x 320 (version ASM)
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 2589
Âge : 73
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#203 Message par paulfjujo » mar. 13 mars 2018 15:59

:sifflotte: OK, je l'avions même pas vu !
nouvelle donne :

Résumé Calibration
Relevé moyenné X, Y
En Haut a Gauche X= 3548 Y= 3744
En Haut a Droite X= 540 Y= 3728
En Bas a Droite X= 788 Y= 684
En Bas a Gauche X= 3228 Y= 480
au Centre X= 1920 Y= 1985
Press moyen = 183
Aide toi, le ciel ou FantasPic t'aidera

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

#204 Message par satinas » mar. 13 mars 2018 17:23

Code : Tout sélectionner

        Press= 4095 -(z0>3);
        T_CS = 1;
        Press = 4095-(z2-z1);

Je comprends pas, ce serait pas plutôt
Press = 4095 - (z0>>3);

Et je vois pas ou tu remets à zéro x, y et z0

écran tactile 2.4 TFT LCD 240 x 320 (version ASM)
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 2589
Âge : 73
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#205 Message par paulfjujo » mar. 13 mars 2018 18:55

:-D j'avais déja rectifié ..

Code : Tout sélectionner


       Arme_Interrupt_RB0
();
        while(
Flag_RB0==0);
        
CS 1;
        
T_CS 0;
    
x=0;y=0;z0=0;z1=0;z2=0;
        for (
i=0;i<12;i++)
        {
           
xx tsGet(0xd1);    // read yp (xp=Vcc, xn=Gnd, penirq disabled)
           
yy tsGet(0x90);    // read xp (yp=Vcc, yn=Gnd, penirq enabled, power down)
           
z1 tsGet(0xb1);   // read xp (yp=Vcc, xn=Gnd, penirq disabled)
           
z2 tsGet(0xc0);   // read yn (yp=Vcc, xn=Gnd, penirq enabled, power down)
             
if ((>= 2) && (10))
           {
           
=xx;
           
yyy;
           
z0 z0+(z2-z1);
           }
        }
        
        
xxx >>3;   // moyenne de 8 valeurs
        
yyy >>3;
        
Press4095 -(z0>3);
        
T_CS 1;
 



je suis en train d'essayer de traiter les infos Touch panel DANS l'interrupt RB0
en simil ASM .. vu que les fonction SPI_Write et Read ne sont pas re entrantes .

Mais je pense même traiter independament, en mode bit bang le Touch panel
pour pouvoir separer completement les 2 traitements Touch Panel et LCD

.. actuellement commun , par le SPI MSSP MOSI et MISO . soit l'un , soit l'autre via les pin de selection
_CS et T_CS
Aide toi, le ciel ou FantasPic t'aidera

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

#206 Message par satinas » mar. 13 mars 2018 19:16

Press = 4095 -(z0>3);
ça manque encore de rectification ...
Voila pourquoi je préfère mettre z0/8, le compilo shiftera quand même

J'ai pas de problème à mettre le tactile et l'affichage sur le même port spi, mais il faut changer la vitesse spi à la volée, car le tactile est limité à 2MHz.
Par contre la sdcard n'aime pas partager son port spi. Même si le SD_CS est high, le simple fait d'insérer une sd empêche le tactile de marcher, essais sur un ESP32 (qui n'a qu'un port spi).

Pour la réentrance je comprends pas exactement le problème. Tout dépend de l'appli et de son utilisation du tactile. Si une interruption du tactile se produit pendant qu'on envoie des datas sur le spi lcd, c'est ça ?

écran tactile 2.4 TFT LCD 240 x 320 (version ASM)
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 2589
Âge : 73
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#207 Message par paulfjujo » mar. 13 mars 2018 20:42

satinas a écrit :Pour la réentrance je comprends pas exactement le problème. Tout dépend de l'appli et de son utilisation du tactile.


si dans le traitement interrupt RB0 , je met une fonction mikroC SPI_Write ou SPI_Read
le compilo n'est pas content .. error !

//84 365 Reentrancy is not allowed: function 'SPI1_Write' called from two threads __Lib_SPI_c345b123.c


Si une interruption du tactile se produit pendant qu'on envoie des datas sur le spi lcd, c'est ça ?


Des l'apparition du flag_rb0 à 1 ,
je mets l'aiguillage sur T_CS=0 _CS=1 . etapres recup des coordonnées. le remet sur LCD T_CS=1 _CS=0

à priori on est bien obligé de gerer l'aiguillage du SPI vers l'un OU l'autre ?
ce qui oblige à prevoir , au niveau de l'application , une surveillance de l'interruption (Stylet) en mode pooling..
on ne fait donc rien d'autre en attendant l'appui du stylet ..

si on peut lire la position du stylet DANS l' interrupt , on n'est plus bloqué dans une boucle d'attente
et gerer cette info position stylet ailleurs dans le programme . L'ideal etant de separer les 2 fonctions SPI..
j'ai 2 SPI sur mon PIC .. séparation à tenter.


avec FOSC=32MHz clock FOSC/4 pour le SPI1_Init classique => 8MHZ
semble pourtant suivre cette cadence ..
mais je vais tester aussi avec le SPI1_Init_Advanced pour clock= FOSC/16 => 2MHz
Aide toi, le ciel ou FantasPic t'aidera

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

#208 Message par satinas » mar. 13 mars 2018 21:13

Pour MikroC, si tu mets le SPI_Read() et Spi_Write() dans une fonction appelée par la routine d'interruption, ça passe pas ?

Les 2 MHz viennent du Tack qui doit être > 1,5us. Comme il dure 3 périodes d'horloge, ça donne une période d'horloge spi minimale de 0,5us.
Sur Arduino et ESP32 je maîtrise pas bien le bas niveau. Actuellement le tactile est en mode polling.

On peut inhiber l'interruption tactile pour éviter qu'elle se produise pendant des affichages spi.
Ou alors (En C18) on laisse faire, et on peut imaginer 2 fonctions spi différentes. Une classique utilisée par l'affichage qui ne fait que de l'envoi, l'autre un peu spéciale utilisée par l'interruption tactile. Si la routine d'interruption détecte un envoi spi en cours, elle le termine en testant les flags et en lisant SPIBUF. Ensuite elle passe à 2 MHz, lit les datas tactiles, les stocke ou les traite, remet le spi à plein pot et se termine. Au pire il y a 2 lectures successives de SPIBUF, mais cela devrait passer.

écran tactile 2.4 TFT LCD 240 x 320 (version ASM)
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 2589
Âge : 73
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#209 Message par paulfjujo » mer. 14 mars 2018 09:00

satinas a écrit :Pour MikroC, si tu mets le SPI_Read() et Spi_Write() dans une fonction appelée par la routine d'interruption, ça passe pas ?


:cry: oui, c'est bien là, le blème ..

de meme qu'on ne peut pas mettre un UART_WRITE dans une interrupt , pour faire du tracage programme
Dans une autre application, j'ai été obligé de mettre un UART3_Write_Text 100% assembler , à la place de la fonction MikroC.

à la rigueur, seul le TX1REG peut etre utilisé, puisque c'est un registre MCU.
Aide toi, le ciel ou FantasPic t'aidera

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

#210 Message par satinas » mer. 14 mars 2018 09:24

Bonjour,
tiré du programme nrf, pourquoi s'embêter avec des bibliothèques ? Même l'init spi, c'est 2 ou 3 registres du pic à renseigner.

Code : Tout sélectionner

static BYTE NrfWriteReadSpi(BYTE b)
// module spi nRF24L01, écrire/lire octet
{
  SSPBUF = b;
  while (!SSPSTATbits.BF) ;
  return SSPBUF;
}


Retourner vers « Langage ASM »

Qui est en ligne

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