Caractères Perso créés par le programme Maître ?

#1
Bien le Bonjour à la Communauté,

Est-il possible, au besoin, de créer de nouveaux caractères graphiques personnalisés (dans la CGRAM) par le code se trouvant dans le programme principal, et sans faire appel aux données se trouvant dans l'EEPROM qui, elle, a été programmée (et ne serait pas modifiable par le Master programme ?) dans le Picaxe de l'interface Serie AXE 133-4 ?

J'essaye ce code, mais il ne fonctionne pas:

Code:
'Custom Graphic Character in CG6

Serout Display,Baud,(254,70) 'Addressing CGRAM CG 6 (CG Address + 64)
Serout Display,Baud,($10,$1B,$11,$11,$11,$11,$11,$1F)  'Data for Battery Level 0 in CGRAM6
Serout Display,Baud,(254,128)  'Reinit Address DDRAM

' Call CG6
Serout Display,Baud,(254,136)  'Line1 Col9
Serout Display,Baud,("CG6= ",6)  'CG6 ---- > NOTHING !!!
Merci.

(Aussi posté sur le forum GB)
 

MGU

Senior Member
#2
Bien le Bonjour à la Communauté,

Est-il possible, au besoin, de créer de nouveaux caractères graphiques personnalisés (dans la CGRAM) par le code se trouvant dans le programme principal, et sans faire appel aux données se trouvant dans l'EEPROM qui, elle, a été programmée (et ne serait pas modifiable par le Master programme ?) dans le Picaxe de l'interface Serie AXE 133-4 ?

J'essaye ce code, mais il ne fonctionne pas:

Code:
'Custom Graphic Character in CG6

Serout Display,Baud,(254,70) 'Addressing CGRAM CG 6 (CG Address + 64)
Serout Display,Baud,($10,$1B,$11,$11,$11,$11,$11,$1F)  'Data for Battery Level 0 in CGRAM6
Serout Display,Baud,(254,128)  'Reinit Address DDRAM

' Call CG6
Serout Display,Baud,(254,136)  'Line1 Col9
Serout Display,Baud,("CG6= ",6)  'CG6 ---- > NOTHING !!!
Merci.

(Aussi posté sur le forum GB)
Bonjour,

Les 8 premières mémoires de la CGRAM sont programmables.
Voici une page où j'ai ajouté des accentués français dans un LCD chinois, avec interface I2C, mais avec interface série, c'est pareil.
http://electromag1.wifeo.com/lcd-i2c-expandeur-pcf8574.php

Avant, j'avais fait aussi pour un LCD série.
http://electromag1.wifeo.com/fabriquer-un-lcd-serie-avec-un-picaxe-.php

MM
 
Last edited:

MGU

Senior Member
#3
Bonjour,

L'erreur vient du fait que les caractères sont enregistrés par bloc de 8 octets.

Le premier caractère "0" est bien en 64, mais le "1" est 8 octets plus loin, en 72, etc

Voici un bout de code pour programmer ces 8 caractères spéciaux (j'ai repris des accentués français) à partir d'un programme quelconque, sur un LCD quelconque.
Ici, le résultat affiché sur les deux lignes d'un LCD1602

Code:
;caractères spéciaux
#picaxe 08M2
#no_data
symbol baud= N2400_4

pause 500 'Petite pause pour le temps d'initialisation LCD. mini=200ms

serout C.4,baud,(254,64)	'cgram 0
serout C.4,baud,(10,0,14,17,31,16,15,0)     ;ë
serout C.4,baud,(254,72)  	'cgram 1
serout C.4,baud,(10,0,17,17,17,19,13,0)     ;ü
serout C.4,baud,(254,80) 	'cgram 2	ù
serout C.4,baud,(8,4,17,17,17,19,13,0)
serout C.4,baud,(254,88) 'cgram 3	ç
serout C.4,baud,(0,14,16,16,17,14,4,12)
serout C.4,baud,(254,96) 	'cgram 4	à
serout C.4,baud,(8,4,14,1,15,17,15,0)
serout C.4,baud,(254,104) 	'cgram 5	ê
serout C.4,baud,(4,10,14,17,31,16,14,0)
serout C.4,baud,(254,112) 	'cgram 6	è
serout C.4,baud,(8,4,14,17,31,16,14,0)
serout C.4,baud,(254,120) 	'cgram 7 	ü
serout C.4,baud,(10,0,17,17,17,19,13,0)


pause 100		'petite pause pour digérer mini=70ms
serout C.4,baud,(254,1)
serout C.4,baud,(254,128,0," ",2," ",4," ",3," ",254,192,7," ",8," ",1," ",5," ",6)
		;en fait, le caractère 0, ou 8, c'est le même
do loop
Si besoin, je fais une photo du résultat..

MM
 
Last edited:
#4
Bien le bonsoir MGU,

Merci de suivre ce Post.
J’avais déjà lu et relu vos exposés intéressants sur le web concernant les interfaces LCD Série.
Et je viens de terminer un interface LCD (ou OLED) Série du style de l’Axe134 de chez Picaxe mais je l’ai réalisé avec un 20X2 sur CI double faces. Cela me permet de disposer de plus de sorties auxiliaires, dont le backlight (LCD) que je peux donc contrôler par le Master programme. (Photo en annexe)

Je suis arrivé à programmer mes caractères graphiques aux adresses 0 à 7 de la CGRAM (voir photo, attachée) mais il y a tout de même quelque chose qui m’échappe et comme je n’aime pas rester sur des incompréhensions, peut-être pourrez-vous m’éclairer :

Dans tous les datas sheets et autres publications sur le Net, la commande "Set CGRAM Address" est formulée comme suit :

DB7 | DB6 | DB5 | DB4 | DB3 | DB2 | DB1 | DB0
0 | 1 | ACG | ACG | ACG | ACG | ACG | ACG
Avec ACG étant l’Adresse CGRAM.

Donc, pour l’adresse de la CGRAM 2, on devrait envoyer la commande
Serout Display, Baud, (254, %01000010) ‘$42 d66

Mais en fait, il faut programmer : :confused:
Serout Display, Baud, (254, %01010000) ‘$50 d80

Il faut donc :
DB7 | DB6 | DB5 | DB4 | DB3 | DB2 | DB1 | DB0
0 | 1 | ACG | ACG | ACG | 0 | 0 | 0

Ca fonctionne mais ça ne correspond pas aux datas sheets des LCD !

Une idée du Pourquoi ???:confused:
 

Attachments

MGU

Senior Member
#5
Bien le bonsoir MGU,

Merci de suivre ce Post.
J’avais déjà lu et relu vos exposés intéressants sur le web concernant les interfaces LCD Série.
Et je viens de terminer un interface LCD (ou OLED) Série du style de l’Axe134 de chez Picaxe mais je l’ai réalisé avec un 20X2 sur CI double faces. Cela me permet de disposer de plus de sorties auxiliaires, dont le backlight (LCD) que je peux donc contrôler par le Master programme. (Photo en annexe)

Je suis arrivé à programmer mes caractères graphiques aux adresses 0 à 7 de la CGRAM (voir photo, attachée) mais il y a tout de même quelque chose qui m’échappe et comme je n’aime pas rester sur des incompréhensions, peut-être pourrez-vous m’éclairer :

Dans tous les datas sheets et autres publications sur le Net, la commande "Set CGRAM Address" est formulée comme suit :

DB7 | DB6 | DB5 | DB4 | DB3 | DB2 | DB1 | DB0
0 | 1 | ACG | ACG | ACG | ACG | ACG | ACG
Avec ACG étant l’Adresse CGRAM.

Donc, pour l’adresse de la CGRAM 2, on devrait envoyer la commande
Serout Display, Baud, (254, %01000010) ‘$42 d66

Mais en fait, il faut programmer : :confused:
Serout Display, Baud, (254, %01010000) ‘$50 d80

Il faut donc :
DB7 | DB6 | DB5 | DB4 | DB3 | DB2 | DB1 | DB0
0 | 1 | ACG | ACG | ACG | 0 | 0 | 0

Ca fonctionne mais ça ne correspond pas aux datas sheets des LCD !

Une idée du Pourquoi ???:confused:
Bonjour,

Ce que je pense comprendre, c'est que le bit DB6=1 annonce un enregistrement en CGRAM, DB0 à DB5 est la zone adresse.
l'adresse dans cette zone est N x 8, avec N de 0 à 7

1 en DB6, donne 64.
la commande est égale à N x 8 , que l'on ajoute à 64

j'avais trouvé quelque par le "formule" : N x 8 | $40 , avec N de 0 à 7, ce qui revient au même

Au delà de 7, N x 8 écrase le 1 de $40, donc, N= 0 à 7 ou N= 8 à 15 donne le même octet

MM
 
Top