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 ---
- 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 ---
Modérateur : mazertoc
écran tactile 2.4 TFT LCD 240 x 320 (version ASM)
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)
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 ...
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)
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)
écran tactile 2.4 TFT LCD 240 x 320 (version ASM)
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.
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)
Bon je n'ai pas calculé la boucle mais rien ne change, pas la moindre trace rouge
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)
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
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)
La premiere parti est ici
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
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)
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 :)
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)
écran tactile 2.4 TFT LCD 240 x 320 (version ASM)
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)
Bonjour satinas, JMarc, Jérémy, et tous le forum,
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.
http://ouilogique.com/2-4-in_TFT_Touch_screen/
Voilà ce que j'ai trouvé, euh..... JMarc va hurler, si tu lui expliques.
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 ?
A+
JMarc à écrit :
j’apprends même le C pour arrivé à comprendre Traitre
Quand à la solution de repli, bien non non et non, cela sera en asm !!!
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+
é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.
http://ouilogique.com/2-4-in_TFT_Touch_screen/
Voilà ce que j'ai trouvé, euh..... JMarc va hurler, si tu lui expliques.
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+
Retourner vers « Langage ASM »
Qui est en ligne
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 72 invités