Précédent   Forum des professionnels en informatique > Autres langages > Assembleur
Assembleur Forum d'entraide Assembleur. Avant de poster -> F.A.Q Assembleur Tutoriels Assembleur
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 18/09/2011, 16h31   #1
Membre du Club
 
Inscription : novembre 2008
Messages : 332
Détails du profil
Informations forums :
Inscription : novembre 2008
Messages : 332
Points : 69
Points : 69
Par défaut éditeur pour afficheurs LCD graphiques

Salut a tous, forum

Après maintes recherche sur le net.

Je suis donc a la recherche svp d'un logiciel gratuit et en francais
Un éditeur pour afficheurs LCD graphiques

je souhaiterai créer un police de caractères avec des hauteurs de lettrine différentes sur mème type d'écran, voir svp photo ci-jointe

Merci a vous et de votre temps, bonne fin de dimanche a vous

Ray
Images attachées
Type de fichier : jpg TempoMatos.jpg (150,4 Ko, 10 affichages)
eliot.raymond est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/09/2011, 17h00   #2
Membre confirmé
 
Avatar de golden boy
 
Homme Enzo
Lycéen
Inscription : novembre 2010
Messages : 120
Détails du profil
Informations personnelles :
Nom : Homme Enzo
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Lycéen

Informations forums :
Inscription : novembre 2010
Messages : 120
Points : 224
Points : 224
Je ne comprends pas bien ce que tu cherches exactement mais comment veux-tu faire ta police si tu dois utiliser un 7 segments comme sur tes images ?
__________________
Real ASM
golden boy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/09/2011, 17h37   #3
Membre du Club
 
Inscription : novembre 2008
Messages : 332
Détails du profil
Informations forums :
Inscription : novembre 2008
Messages : 332
Points : 69
Points : 69
Citation:
Envoyé par golden boy Voir le message
Je ne comprends pas bien ce que tu cherches exactement mais comment veux-tu faire ta police si tu dois utiliser un 7 segments comme sur tes images ?
Merci pour ta réponse

En fait je souhaite refaire des matrices de caracteres comme sur la photo un LCD graphique

le but faire un temporisateur (0-50 mn) digital avec clavier pour insoleuse un peu perso mais aussi dans le but de m'initier a la programmation, (je débute)

donc des grands affichages pour (les minutes) plus petites pour les secondes

et quelques divers utilitées.

Ray
eliot.raymond est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/09/2011, 20h39   #4
Membre éprouvé
 
Avatar de Forthman
 
Homme François
conception mécanique
Inscription : janvier 2005
Messages : 313
Détails du profil
Informations personnelles :
Nom : Homme François
Âge : 36
Localisation : France, Tarn et Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : conception mécanique
Secteur : Industrie

Informations forums :
Inscription : janvier 2005
Messages : 313
Points : 460
Points : 460
Il nous faudrait quelques précisions.

Ton afficheur est relié à un PC (port parallèle ou USB ) ?
Ou alors c'est un modèle autonome avec micro-contrôleur intégré ?

a+ François
Forthman est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/09/2011, 02h02   #5
Membre expérimenté
 
Avatar de edfed
 
être humain
Inscription : décembre 2007
Messages : 465
Détails du profil
Informations professionnelles :
Activité : être humain

Informations forums :
Inscription : décembre 2007
Messages : 465
Points : 582
Points : 582
tu pourrais déjà regarder du coté de ce site
http://www.crystalfontz.com/software/
ces logiciels permettent de prendre le controle des LCD depuis le port COM, LPT ou USB d'un PC. ça permet de tester si les ecrans sont en bon etat, t peut permettre de comprendre comment ça fonctionne.
sinon, en assembleur, j'ai déjà essayé de piloter un LCD de 128*64 pixels noir et blanc depuis le port LPT, j'avais juste reussi à faire tout blanc ou tout noir (probleme de timing).
sur le LCD 4 lignes, j'ai reussi à prendre le controle en assembleur, le code est celui là, et merite un bon remaniage, car les temps, c'est du n'importe quoi total, mais ça marche sur mon PC avec un 1604 sur le port LPT sous certaines conditions.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
 
macro delay .t {
        mov ecx,.t*1
local .a
.a:     loop .a
}
 
        org 100h
        delay 200
        call lcd.init
        delay 200
        call lcd.clear
        mov ax,001h
        call lcd.goto
        mov al,'0'
        call lcd.putc
        mov ax,003h
        call lcd.goto
        mov si,message
        call lcd.puts
@@:
        in al,60h
        cmp al,43h
        je .exit
        jmp @b
.exit:
        mov ax,3
        int 10h
        ret
message db 'hello',0
 
;LPT connection
;pin 1 = E = .ctrl bit0 1
;pin 16 = RS = .ctrl bit2 4
;pin 14 = R/W = .ctrl bit3  8
;pins 2 to 9 = data = .data
 
;LCD connection
;pin 1 = gnd
;pin 2 = +5V
;pin 3 = contrast
;pin 4 = Register Select
;pin 5 = Read /Write
;pin 6 = Enable
;pins 7 to 14 = data
lcd:
.lpt=378h
.data=.lpt+0
.stat=.lpt+1
.ctrl=.lpt+2
.rs=4
.e=1
.rw=8
.p1:
        mov dx,lcd.data
        ret
.p3:
        mov dx,lcd.ctrl
        ret
.rs0:
        in al,dx
        or al,.rs
        out dx,al
        ret
.rs1:
        in al,dx
        and al,not .rs
        out dx,al
        ret
.e0:
        in al,dx
        or al,.e
        out dx,al
        ret
.e1:
        in al,dx
        and al,not .e
        out dx,al
        ret
.rw0:
        in al,dx
        or al,.rw
        out dx,al
        ret
.rw1:
        in al,dx
        and al,not .rw
        out dx,al
        ret
.clear:
 
        mov dx,.ctrl
        in al,dx
        delay 20
        or al,not 4
        out dx,al
        mov al,1
        delay 20
        call lcd.write
        ret
 
.write:
        mov dx,.data
        out dx,al
        mov dx,.ctrl
        in al,dx
        or al,1
        out dx,al
        mov dx,.ctrl
        in al,dx
        delay 20
        and al,not 1
        out dx,al
        delay 20
        ret
 
.init:
 
    mov dx,.ctrl
 
    in al,dx
    delay 20
    and al,4
    out dx,al
    delay 20
    in al,dx
    delay 20
    or al,not 4
    out dx,al
 
    mov al,0fh
    call lcd.write
    delay 20
    mov al,1
    call lcd.write
    delay 20
    mov al,38h
    call lcd.write
    delay 20
    ret
 
 
.goto:
;al=x
;ah=y
    delay 20
    push ax
    mov dx,.ctrl
    in al,dx
    delay 20
    or al,not 4
    out dx,al
    delay 20
    pop ax
    cmp ah,1
    jne @f
    add al,40h
@@:
    cmp ah,2
    jne @f
    add al,10h
@@:
    cmp ah,3
    jne @f
    add al,50h
@@:
    or al,80h
    call lcd.write
    ret
 
 
.putc:
    delay 20
    rol ax,8
    mov dx,.ctrl
    in al,dx
    delay 20
    and al,4
    out dx,al
    delay 20
    ror ax,8
    call lcd.write
    ret
 
.puts:
    delay 20
    mov dx,.ctrl
    in al,dx
    delay 20
    and al,4
    out dx,al
@@:
    mov al,[si]
    cmp al,0
    je @f
    call .putc
    inc si
    jmp @b
@@:
    ret
sur les microncontroleurs, c'est plus simple car il y a moins de code à ecrire grace aux timers et autres facilités onchip telles que drivers LCD, qui generent la bonne trame quoi qu'il arrive. il suffit alors de programmer la memoire du driver LCD our qu'il se charge tout seul de l'envoi à l'ecran, tel une carte graphique rudimentaire.

ps: procure toi la doc de ton ecran aussi, sans ça, tu ne sauras pas quel sont ses timings et signaux, et donc, tu ne pourras pas le programmer.

la fonte quand à elle est vraiment un probleme basique qui ne demande pas des masses de travail.
soit par bitmaps, soit par calculs, dans tout les cas, ecrire des lettres à l'ecran vient largement après la gestion et le controle total de l'ecran. ou prendre un chronometre du commerce, ça ira plus vite.
__________________
http://www.pending.me.uk/nmc/bla_1356091200.png
Vivement 21/12/2012
edfed est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/09/2011, 06h42   #6
Membre du Club
 
Inscription : novembre 2008
Messages : 332
Détails du profil
Informations forums :
Inscription : novembre 2008
Messages : 332
Points : 69
Points : 69
Citation:
Envoyé par edfed Voir le message
tu pourrais déjà regarder du coté de ce site
http://www.crystalfontz.com/software/
ces logiciels permettent de prendre le controle des LCD depuis le port COM, LPT ou USB d'un PC. ça permet de tester si les ecrans sont en bon etat, t peut permettre de comprendre comment ça fonctionne.
sinon, en assembleur, j'ai déjà essayé de piloter un LCD de 128*64 pixels noir et blanc depuis le port LPT, j'avais juste reussi à faire tout blanc ou tout noir (probleme de timing).
sur le LCD 4 lignes, j'ai reussi à prendre le controle en assembleur, le code est celui là, et merite un bon remaniage, car les temps, c'est du n'importe quoi total, mais ça marche sur mon PC avec un 1604 sur le port LPT sous certaines conditions.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
 
macro delay .t {
        mov ecx,.t*1
local .a
.a:     loop .a
}
 
        org 100h
        delay 200
        call lcd.init
        delay 200
        call lcd.clear
        mov ax,001h
        call lcd.goto
        mov al,'0'
        call lcd.putc
        mov ax,003h
        call lcd.goto
        mov si,message
        call lcd.puts
@@:
        in al,60h
        cmp al,43h
        je .exit
        jmp @b
.exit:
        mov ax,3
        int 10h
        ret
message db 'hello',0
 
;LPT connection
;pin 1 = E = .ctrl bit0 1
;pin 16 = RS = .ctrl bit2 4
;pin 14 = R/W = .ctrl bit3  8
;pins 2 to 9 = data = .data
 
;LCD connection
;pin 1 = gnd
;pin 2 = +5V
;pin 3 = contrast
;pin 4 = Register Select
;pin 5 = Read /Write
;pin 6 = Enable
;pins 7 to 14 = data
lcd:
.lpt=378h
.data=.lpt+0
.stat=.lpt+1
.ctrl=.lpt+2
.rs=4
.e=1
.rw=8
.p1:
        mov dx,lcd.data
        ret
.p3:
        mov dx,lcd.ctrl
        ret
.rs0:
        in al,dx
        or al,.rs
        out dx,al
        ret
.rs1:
        in al,dx
        and al,not .rs
        out dx,al
        ret
.e0:
        in al,dx
        or al,.e
        out dx,al
        ret
.e1:
        in al,dx
        and al,not .e
        out dx,al
        ret
.rw0:
        in al,dx
        or al,.rw
        out dx,al
        ret
.rw1:
        in al,dx
        and al,not .rw
        out dx,al
        ret
.clear:
 
        mov dx,.ctrl
        in al,dx
        delay 20
        or al,not 4
        out dx,al
        mov al,1
        delay 20
        call lcd.write
        ret
 
.write:
        mov dx,.data
        out dx,al
        mov dx,.ctrl
        in al,dx
        or al,1
        out dx,al
        mov dx,.ctrl
        in al,dx
        delay 20
        and al,not 1
        out dx,al
        delay 20
        ret
 
.init:
 
    mov dx,.ctrl
 
    in al,dx
    delay 20
    and al,4
    out dx,al
    delay 20
    in al,dx
    delay 20
    or al,not 4
    out dx,al
 
    mov al,0fh
    call lcd.write
    delay 20
    mov al,1
    call lcd.write
    delay 20
    mov al,38h
    call lcd.write
    delay 20
    ret
 
 
.goto:
;al=x
;ah=y
    delay 20
    push ax
    mov dx,.ctrl
    in al,dx
    delay 20
    or al,not 4
    out dx,al
    delay 20
    pop ax
    cmp ah,1
    jne @f
    add al,40h
@@:
    cmp ah,2
    jne @f
    add al,10h
@@:
    cmp ah,3
    jne @f
    add al,50h
@@:
    or al,80h
    call lcd.write
    ret
 
 
.putc:
    delay 20
    rol ax,8
    mov dx,.ctrl
    in al,dx
    delay 20
    and al,4
    out dx,al
    delay 20
    ror ax,8
    call lcd.write
    ret
 
.puts:
    delay 20
    mov dx,.ctrl
    in al,dx
    delay 20
    and al,4
    out dx,al
@@:
    mov al,[si]
    cmp al,0
    je @f
    call .putc
    inc si
    jmp @b
@@:
    ret
sur les microncontroleurs, c'est plus simple car il y a moins de code à ecrire grace aux timers et autres facilités onchip telles que drivers LCD, qui generent la bonne trame quoi qu'il arrive. il suffit alors de programmer la memoire du driver LCD our qu'il se charge tout seul de l'envoi à l'ecran, tel une carte graphique rudimentaire.

ps: procure toi la doc de ton ecran aussi, sans ça, tu ne sauras pas quel sont ses timings et signaux, et donc, tu ne pourras pas le programmer.

la fonte quand à elle est vraiment un probleme basique qui ne demande pas des masses de travail.
soit par bitmaps, soit par calculs, dans tout les cas, ecrire des lettres à l'ecran vient largement après la gestion et le controle total de l'ecran. ou prendre un chronometre du commerce, ça ira plus vite.
Bonjour,

Merci bien de ta réponse ainsi que pour le code, je débute aussi autant avoir un but, c'est du luxe pour un tempo mais bon plaisir d'essayer de construire quelque chose moi mème, pour le chrono du commerce, c'est une bonne idée, je vais creuser ca, hiihihihihi.

Pour l'écran je l'attends et le PIC un 18F4525

Encore merci je regarde ca

Ray
eliot.raymond est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/09/2011, 06h53   #7
Membre du Club
 
Inscription : novembre 2008
Messages : 332
Détails du profil
Informations forums :
Inscription : novembre 2008
Messages : 332
Points : 69
Points : 69
Citation:
Envoyé par Forthman Voir le message
Il nous faudrait quelques précisions.

Ton afficheur est relié à un PC (port parallèle ou USB ) ?
Ou alors c'est un modèle autonome avec micro-contrôleur intégré ?

a+ François
Bonjour,

Merci pour la réponse, il ne sera pas relier au PC juste dans un boitier alimenter a part.

PIC un 18F4525
Ecran bleu rétro eclairé
Gestion par petit clavier 12 touches
Relais pour les tubes UV

Bonne journée merci

Ray
eliot.raymond est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/09/2011, 08h12   #8
Membre éprouvé
 
Avatar de Forthman
 
Homme François
conception mécanique
Inscription : janvier 2005
Messages : 313
Détails du profil
Informations personnelles :
Nom : Homme François
Âge : 36
Localisation : France, Tarn et Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : conception mécanique
Secteur : Industrie

Informations forums :
Inscription : janvier 2005
Messages : 313
Points : 460
Points : 460
J'y connais rien en PIC, mais il y a de la RAM là dedans ?
Je veux dire suffisamment pour stocker les images des caractères...

J'avais moi aussi fait mumuse avec un tel afficheur.
les octets étaient disposés verticalement (contrairement à un affichage sur PC)
et l'écran était coupé en deux (2 adresses différentes partie haute et basse)
Pour afficher des graphismes il fallait jongler pas mal

J'ai un gros doute sur le fait que ça soit une réalisation des plus simple ton truc
Forthman est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/09/2011, 13h40   #9
Membre expérimenté
 
Avatar de edfed
 
être humain
Inscription : décembre 2007
Messages : 465
Détails du profil
Informations professionnelles :
Activité : être humain

Informations forums :
Inscription : décembre 2007
Messages : 465
Points : 582
Points : 582
la realisation est simple si on utilise la ram pour stocker les pixels.
vu qu'il y a largement assez de ram dans le 18F4525 (plus de 3500 octets), ça permet de stocker plus de 3 fois la totalité des pixels d'un lcd noir et blanc de 128*64.
ça peut aussi permettre de stocker des pixels de 3 bits, donc, 8 niveau de gris.
pour ça, il faudra juste inclure une sorte de pwm de 8 pas pour chaque pixel lors du rafrachissement.

pour ce qui est de generer les caractères, le plus simple est de le faire dans le code source, sous forme de bitmaps en lecture seule, dans le programme.
il y a largement assez de memoire pour ça.

je vais d'ailleur me payer un 18F4525 pour tester, car en plus, j'ai besoin moi aussi de faire une gestion de LCD 128*64 bien rapide.

j'en profite pour poster un code en plus, ce code permet de gerer le 1604 depuis le port lpt, mais cette fois ci, les temps sont presque bon, et l'algo l'est aussi, la frequence de rafraichissement est respectable, et le rendu est sans flickers.

l'idée est de manipuler les bon bits au bon moment, dans le bon ordre.
dans ce code, je n'ai laissé que ce qui est chargé de l'affichage LCD.
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
 
macro delay .t
{
        mov ecx,.t*.t
@@:
        dec ecx
        jne @b
}
 
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
        org 100h
main:
        call init
        call refresh
        mov ax,3
        int 10h
        ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;; ;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;
;16 apparent chars, 24 virtual chars
message:
.0:     db '0123456789ABCDEF' ; xxxxxxxxxxxxxxxx
.1:     db 'c:/>fool/tetris ' ;                                        xxxxxxxxxxxxxxxx
.2:     db 'this code needs ' ;                 xxxxxxxxxxxxxxx
.3:     db 'Graphic screen  ' ;                                                        xxxxxxxxxxxxxxxx
.pad:   db '        '         ;                                xxxxxxxx                                xxxxxxxx
.end:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
refresh:
        mov si,message
@@:
        mov ah,[si]
        call putc
        inc si
        cmp si,message.1
        jne @b
        mov si,message.2
@@:
        mov ah,[si]
        call putc
        inc si
        cmp si,message.3
        jne @b
        mov si,message.pad
@@:
        mov ah,[si]
        call putc
        inc si
        cmp si,message.end
        jne @b
        mov si,message.1
@@:
        mov ah,[si]
        call putc
        inc si
        cmp si,message.2
        jne @b
        mov si,message.3
@@:
        mov ah,[si]
        call putc
        inc si
        cmp si,message.end
        jne @b
        ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
putc:
        push eax ebx ecx edx
        call lcd.writedatacheck
        pop edx ecx ebx eax
        ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
init:
        mov ah,38h        ;function set
        call lcd.writeinstnocheck
        call delay37
        mov ah,38h        ;function set
        call lcd.writeinstnocheck
        call delay37
 
        mov ah,0ch        ;display on
        call lcd.writeinstcheck
        call delay37
 
        call lcd.clear
 
        mov ah,6          ;entry mode set
        call lcd.writeinstcheck
        call delay37
        ret
 
;---------------------------------------------------------------------------------
;LPT connection
;pin 1 = E = .ctrl bit0, 1 inverted
;pin 14 = R/W = .ctrl bit1, 2 inverted
;pin 16 = RS = .ctrl bit2, 4
;pins 2 to 9 = data = .data
;
;LCD connection
;pin 1 = gnd
;pin 2 = +5V
;pin 3 = contrast
;pin 4 = Register Select
;pin 5 = Read /Write
;pin 6 = Enable
;pins 7 to 14 = data
;---------------------------------------------------------------------------------
delay37:
        delay 500
        ret
delay1520:
        delay 60
        ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
lcd:
.lpt=378h
.data=.lpt+0
.stat=.lpt+1
.ctrl=.lpt+2
.e=1
.rw=2
.rs=4
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
.p1:
        mov dx,lcd.data
        ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
.p2:
        mov dx,lcd.stat
        ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
.p3:
        mov dx,lcd.ctrl
        ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
.goto:
;al=x
;ah=y
        cmp ah,1
        jne @f
        add al,40h
@@:
        cmp ah,2
        jne @f
        add al,10h
@@:
        cmp ah,3
        jne @f
        add al,50h
@@:
        or al,80h
        call .writeinstcheck
        ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
.clear:
        mov ah,1
        call lcd.writeinstcheck
        call delay1520
        ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
.writedatacheck:
        call .busycheck
.writedatanocheck:
        call .dr
        call .wr
        call .en
        call .p1
        mov al,ah
        out dx,al
        call delay1520
        call .dis
        call .p1
        mov al,0ffh
        out dx,al
        ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
.writeinstcheck:
        call .busycheck
.writeinstnocheck:
        call .ir
        call .wr
        call .en
        call .p1
        mov al,ah
        out dx,al
        call delay1520
        call .dis
        call .p1
        mov al,0ffh
        out dx,al
        ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
.busycheck:
        call .ir
        call .rd
        call .en
        call .busy
        call .dis
        ret
.busy:
        call .p1
@@:
        in al,dx
        and al,80h
        je @b
        ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
.dr:
.datareg:
        call .p3
        in al,dx
        or al,.rs
        out dx,al
        ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
.ir:
.instreg:
        call .p3
        in al,dx
        and al,not .rs
        out dx,al
        ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
.dis:
.disable:
        call .p3
        in al,dx
        or al,.e
        out dx,al
        ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
.en:
.enable:
        call .p3
        in al,dx
        and al,not .e
        out dx,al
        ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
.wr:
.write:
        call .p3
        in al,dx
        or al,.rw
        out dx,al
        ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
.rd:
.read:
        call .p3
        in al,dx
        and al,not .rw
        out dx,al
        ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
__________________
http://www.pending.me.uk/nmc/bla_1356091200.png
Vivement 21/12/2012
edfed est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/09/2011, 20h00   #10
Membre du Club
 
Inscription : novembre 2008
Messages : 332
Détails du profil
Informations forums :
Inscription : novembre 2008
Messages : 332
Points : 69
Points : 69
Citation:
Envoyé par edfed Voir le message
la realisation est simple si on utilise la ram pour stocker les pixels.
vu qu'il y a largement assez de ram dans le 18F4525 (plus de 3500 octets), ça permet de stocker plus de 3 fois la totalité des pixels d'un lcd noir et blanc de 128*64.
ça peut aussi permettre de stocker des pixels de 3 bits, donc, 8 niveau de gris.
pour ça, il faudra juste inclure une sorte de pwm de 8 pas pour chaque pixel lors du rafrachissement.

pour ce qui est de generer les caractères, le plus simple est de le faire dans le code source, sous forme de bitmaps en lecture seule, dans le programme.
il y a largement assez de memoire pour ça.

je vais d'ailleur me payer un 18F4525 pour tester, car en plus, j'ai besoin moi aussi de faire une gestion de LCD 128*64 bien rapide.

j'en profite pour poster un code en plus, ce code permet de gerer le 1604 depuis le port lpt, mais cette fois ci, les temps sont presque bon, et l'algo l'est aussi, la frequence de rafraichissement est respectable, et le rendu est sans flickers.

l'idée est de manipuler les bon bits au bon moment, dans le bon ordre.
dans ce code, je n'ai laissé que ce qui est chargé de l'affichage LCD.
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
 
macro delay .t
{
        mov ecx,.t*.t
@@:
        dec ecx
        jne @b
}
 
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
        org 100h
main:
        call init
        call refresh
        mov ax,3
        int 10h
        ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;; ;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;
;16 apparent chars, 24 virtual chars
message:
.0:     db '0123456789ABCDEF' ; xxxxxxxxxxxxxxxx
.1:     db 'c:/>fool/tetris ' ;                                        xxxxxxxxxxxxxxxx
.2:     db 'this code needs ' ;                 xxxxxxxxxxxxxxx
.3:     db 'Graphic screen  ' ;                                                        xxxxxxxxxxxxxxxx
.pad:   db '        '         ;                                xxxxxxxx                                xxxxxxxx
.end:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
refresh:
        mov si,message
@@:
        mov ah,[si]
        call putc
        inc si
        cmp si,message.1
        jne @b
        mov si,message.2
@@:
        mov ah,[si]
        call putc
        inc si
        cmp si,message.3
        jne @b
        mov si,message.pad
@@:
        mov ah,[si]
        call putc
        inc si
        cmp si,message.end
        jne @b
        mov si,message.1
@@:
        mov ah,[si]
        call putc
        inc si
        cmp si,message.2
        jne @b
        mov si,message.3
@@:
        mov ah,[si]
        call putc
        inc si
        cmp si,message.end
        jne @b
        ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
putc:
        push eax ebx ecx edx
        call lcd.writedatacheck
        pop edx ecx ebx eax
        ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
init:
        mov ah,38h        ;function set
        call lcd.writeinstnocheck
        call delay37
        mov ah,38h        ;function set
        call lcd.writeinstnocheck
        call delay37
 
        mov ah,0ch        ;display on
        call lcd.writeinstcheck
        call delay37
 
        call lcd.clear
 
        mov ah,6          ;entry mode set
        call lcd.writeinstcheck
        call delay37
        ret
 
;---------------------------------------------------------------------------------
;LPT connection
;pin 1 = E = .ctrl bit0, 1 inverted
;pin 14 = R/W = .ctrl bit1, 2 inverted
;pin 16 = RS = .ctrl bit2, 4
;pins 2 to 9 = data = .data
;
;LCD connection
;pin 1 = gnd
;pin 2 = +5V
;pin 3 = contrast
;pin 4 = Register Select
;pin 5 = Read /Write
;pin 6 = Enable
;pins 7 to 14 = data
;---------------------------------------------------------------------------------
delay37:
        delay 500
        ret
delay1520:
        delay 60
        ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
lcd:
.lpt=378h
.data=.lpt+0
.stat=.lpt+1
.ctrl=.lpt+2
.e=1
.rw=2
.rs=4
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
.p1:
        mov dx,lcd.data
        ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
.p2:
        mov dx,lcd.stat
        ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
.p3:
        mov dx,lcd.ctrl
        ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
.goto:
;al=x
;ah=y
        cmp ah,1
        jne @f
        add al,40h
@@:
        cmp ah,2
        jne @f
        add al,10h
@@:
        cmp ah,3
        jne @f
        add al,50h
@@:
        or al,80h
        call .writeinstcheck
        ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
.clear:
        mov ah,1
        call lcd.writeinstcheck
        call delay1520
        ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
.writedatacheck:
        call .busycheck
.writedatanocheck:
        call .dr
        call .wr
        call .en
        call .p1
        mov al,ah
        out dx,al
        call delay1520
        call .dis
        call .p1
        mov al,0ffh
        out dx,al
        ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
.writeinstcheck:
        call .busycheck
.writeinstnocheck:
        call .ir
        call .wr
        call .en
        call .p1
        mov al,ah
        out dx,al
        call delay1520
        call .dis
        call .p1
        mov al,0ffh
        out dx,al
        ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
.busycheck:
        call .ir
        call .rd
        call .en
        call .busy
        call .dis
        ret
.busy:
        call .p1
@@:
        in al,dx
        and al,80h
        je @b
        ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
.dr:
.datareg:
        call .p3
        in al,dx
        or al,.rs
        out dx,al
        ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
.ir:
.instreg:
        call .p3
        in al,dx
        and al,not .rs
        out dx,al
        ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
.dis:
.disable:
        call .p3
        in al,dx
        or al,.e
        out dx,al
        ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
.en:
.enable:
        call .p3
        in al,dx
        and al,not .e
        out dx,al
        ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
.wr:
.write:
        call .p3
        in al,dx
        or al,.rw
        out dx,al
        ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
.rd:
.read:
        call .p3
        in al,dx
        and al,not .rw
        out dx,al
        ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Bonsoir

Merci de ta réponse, bon je pense que c'est réalisable pas facile mais je vais essayer quand meme avec un peu d'entraide c'est possible.

merci pour tes codes ca va me servir des que j'aurai bien compris comment ca marche

pour l'instant il faut que je recommande un ecran, pas recu le bon Greeeeuuuu

encore merci a toi
a plus tard bonne soirée

Raymond
eliot.raymond est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/09/2011, 20h03   #11
Membre du Club
 
Inscription : novembre 2008
Messages : 332
Détails du profil
Informations forums :
Inscription : novembre 2008
Messages : 332
Points : 69
Points : 69
Citation:
Envoyé par Forthman Voir le message
J'y connais rien en PIC, mais il y a de la RAM là dedans ?
Je veux dire suffisamment pour stocker les images des caractères...

J'avais moi aussi fait mumuse avec un tel afficheur.
les octets étaient disposés verticalement (contrairement à un affichage sur PC)
et l'écran était coupé en deux (2 adresses différentes partie haute et basse)
Pour afficher des graphismes il fallait jongler pas mal

J'ai un gros doute sur le fait que ça soit une réalisation des plus simple ton truc
bonsoir

merci pour ta réponse

si c'est possible, je suis tenace, et avec Developpez.com, j'y arriverai grace a tous meme si je débute.

Bonne soirée

Bye ray
eliot.raymond est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 21/09/2011, 07h06   #12
Membre éprouvé
 
Avatar de Forthman
 
Homme François
conception mécanique
Inscription : janvier 2005
Messages : 313
Détails du profil
Informations personnelles :
Nom : Homme François
Âge : 36
Localisation : France, Tarn et Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : conception mécanique
Secteur : Industrie

Informations forums :
Inscription : janvier 2005
Messages : 313
Points : 460
Points : 460
Ok, alors c'est tout bon

Moi je suis pas électronicien, ni même informaticien et j'avais réussi alors
Forthman est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/09/2011, 19h09   #13
Membre du Club
 
Inscription : novembre 2008
Messages : 332
Détails du profil
Informations forums :
Inscription : novembre 2008
Messages : 332
Points : 69
Points : 69
merci a tous de vos réponses, c'est sympa.

quelqu'un saurai t'il svp ou trouver un écran graphique 128X64 bleu et rétro éclairé avec controleur KS0107B

a prix résonable, j'ai chercher mais pas trop trouvé ce que je voulais, je ne doit pas etre doué pour le bussiness hihihihi

merci a vous et de votre temps

bonne soirée a vous

Raymond
eliot.raymond est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/09/2011, 14h54   #14
Membre expérimenté
 
Avatar de edfed
 
être humain
Inscription : décembre 2007
Messages : 465
Détails du profil
Informations professionnelles :
Activité : être humain

Informations forums :
Inscription : décembre 2007
Messages : 465
Points : 582
Points : 582
quitte à faire du LCD graphique... autant prendre ce qu'on peut trouver, tant au niveau materiel qu'au niveau documentation.

on peut acheter et telecharger la doc sur rs-particuliers.
je ne vois pas de meilleure solution à ce jour pour un particulier, il y a aussi conrad, selectronic, et divers autres boutiques d'electronique en ligne.

quitte à acheter un LCD, pourquoi pas prendre aussi quelques leds de toutes les couleurs, et quelques PIC, des potentiometres, et des boutons. et aussi de la plaque à trous, ça peut toujours servir ce genre de composant.
ne pas oublier aussi de la barrete secable tulipe, ça peut faire office de connecteurs, de support de CI, de jumpers, tout depend de l'imagination du soudeur.
je dis ça parce que les frais de cochon sont de 10€, alors tant qu'à faire, il faut rendre ce chiffre neggligeable, de l'ordre de 10% du prix de la commande.


par exemple:
http://www.rs-particuliers.com/WebSe...es-040105.aspx

on prend le premier:
http://www.rs-particuliers.com/WebCa...l-7122637.aspx
et magique, la doc est dispo.

allez, je vais voir s'il y a pas moins cher...
http://www.rs-particuliers.com/WebCa...ge-564400.aspx
il coute 7.63€ aujourd'hui.
et la doc semble complete, controleur ST7565R.
mais quand on arrive à faire le driver pour un, on arrive à le faire pour tous.

il faut faire attention avec les LCD graphiques. il faut parfois generer un signal alternatif de driving, car la matrice lcd ne supporte pas le continu. desfois le circuit est integré à l'ecran, desfois non. quand il ne l'est pas, il faut l'ajouter, ou le simuler avec le microcontroleur.
__________________
http://www.pending.me.uk/nmc/bla_1356091200.png
Vivement 21/12/2012
edfed est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/09/2011, 19h21   #15
Membre du Club
 
Inscription : novembre 2008
Messages : 332
Détails du profil
Informations forums :
Inscription : novembre 2008
Messages : 332
Points : 69
Points : 69
Citation:
Envoyé par edfed Voir le message
quitte à faire du LCD graphique... autant prendre ce qu'on peut trouver, tant au niveau materiel qu'au niveau documentation.

on peut acheter et telecharger la doc sur rs-particuliers.
je ne vois pas de meilleure solution à ce jour pour un particulier, il y a aussi conrad, selectronic, et divers autres boutiques d'electronique en ligne.

quitte à acheter un LCD, pourquoi pas prendre aussi quelques leds de toutes les couleurs, et quelques PIC, des potentiometres, et des boutons. et aussi de la plaque à trous, ça peut toujours servir ce genre de composant.
ne pas oublier aussi de la barrete secable tulipe, ça peut faire office de connecteurs, de support de CI, de jumpers, tout depend de l'imagination du soudeur.
je dis ça parce que les frais de cochon sont de 10€, alors tant qu'à faire, il faut rendre ce chiffre neggligeable, de l'ordre de 10% du prix de la commande.


par exemple:
http://www.rs-particuliers.com/WebSe...es-040105.aspx

on prend le premier:
http://www.rs-particuliers.com/WebCa...l-7122637.aspx
et magique, la doc est dispo.

allez, je vais voir s'il y a pas moins cher...
http://www.rs-particuliers.com/WebCa...ge-564400.aspx
il coute 7.63€ aujourd'hui.
et la doc semble complete, controleur ST7565R.
mais quand on arrive à faire le driver pour un, on arrive à le faire pour tous.

il faut faire attention avec les LCD graphiques. il faut parfois generer un signal alternatif de driving, car la matrice lcd ne supporte pas le continu. desfois le circuit est integré à l'ecran, desfois non. quand il ne l'est pas, il faut l'ajouter, ou le simuler avec le microcontroleur.
Salut merci bien de ta réponse, c'est sympa, t'inquiète j'ai tout le matos qu'il faut a part le bel écran graphique 128X64 bleu et rétro éclairé avec controleur KS0107B

je tient a que ce soit ce matos qui a fait ces preuves d'après ce que j'ai pu lire a ce sujet.

en tout cas merci pour les prévisions du matériel, que ferais je sans toi, néanmoins tu as raison car vu le prix du transport.

je vais essayer encore pour trouver le bon LCD

encore merci a toi pour la recherche, je dirai si je trouve.

bonne soirée et bon W-end

Raymond
eliot.raymond est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 02h21.


 
 
 
 
Partenaires

Hébergement Web