Plus de 8 CustomChar sur LCD

Bonjour a tous !

Je code actuellement un petit projet perso (Bombe Factice pour la pratique de l'Airsoft) et j'aurais voulu mettre le logo de notre "communauté" sur le LCD au chargement, j'ai donc codé toutes les cellules en customchar et en les mettant dans le code je me suis apercu qu'au bout du 8eme on ne peut plus en afficher ... après quelques recherches j'ai vu que l'arduino se limitait a 8 customchar a la fois.

Cependant j'ai vu des images sur le net de LCD sous arduino avec l'ecran rempli de customchar !

Ma question est donc y'a t il une réelle possibilitée de contourné la règle des 8 max grace a une autre fonction ou librairie ?

Merci d'avance !

PS : Voila a quoi je suis arrivé de mon coté http://puu.sh/bvOKz/9f08645f39.png

Ben désolé mais pour moi c'est pas possible

Me suis penché sur le sujet il y a quelques temps.
La plupart des LCD embarquent un contrôleur hitachi HD44780, dans lequel la taille de la CGRAM fait qu'on ne peut définir que 8 caractères 5x8 simultanément.
Tu peux en définir plus, et faire du swap sur la CGRAM, mais tu seras forcément limité à 8 affichés en même temps.

Tout est très bien expliqué ici : http://fr.wikipedia.org/wiki/HD44780

Tu devrais peut-être songer à utiliser plutôt un LCD graphique

ouais si j'avais su ... me faudrait un lcd graphique avec les memes dimensions que celui que j'ai la ...

du coup si pas de solution avec cet ecran le logo ne sera pas affiché tanpis !

personne d'autre aurait un miracle ? ^^

sinon un lien vers un site qui fournirait une panoplie d'ecrans ?

j'ai également essayé il y a quelques temps, et j'en suis arrivé a la meme conclusion que bricoleau pour le HD44780.

tu peut taper farnell, rs, conrad, lextronic, il faudra quand meme que tu t'assure dans le DS que le controleur de l'ecran le permette.

ouais je me doute bien qu'un miracle c'est pas possible ^^

du coups juste pour valider : pour afficher plus de 8 customchar je suis obligé a passé sur minimum du graphique ou est ce que je peut tomber sur un ecran LCD 20x4 qui peut stocker plus de 8 custom char ?

Bonjour,
bricoleau a parfaitement raison mais il n'insiste pas assez sur le fait que la limitation n'a rien a voir avec l'environnement arduino mais est une limite du HD44780.
A ma connaissance, il n'y a pas de controleur de LCD alpha-numerique qui soit supporte par Arduino et qui permette plus de 8 caracteres configurables.
Quand on trouve des affichages couleurs 240x320 pour moins de 5 €, pourquoi se casser la tete avec un affichage LCD qui fait partie d'une technologie que l'on peut qualifier d'obsolete.
Jacques

merci pour vos réponses ! je continue mon projet et je vais donc dans ma nouvelle version, changer l’ecran (ou en rajouter un 2eme ><) il me faudrait donc un ecran graphique si j’ai bien compris mais assez grand et compatible i2c ! Vous auriez un bon site avec des propositions a me faire ?

un ecran graphique est il beaucoup plus dur a codé qu’un LCD simple ?

J'ai jamais jouer avec les customchar, mais c'est pas possible de les charger à la volée tout simplement ?

Bonjour
Pour l'image, tu peux peut-être remplacer les CustomChars par les caractères chinois que le contrôleur possède en interne et qui pourraient faire illusion de l'explosion et réserver les 8 customChars pour le mot SUAT.

B@tto:
J'ai jamais jouer avec les customchar, mais c'est pas possible de les charger à la volée tout simplement ?

C'est tout a fait possible et c'est se que je fais pour ma barre d'icone sur mon LCD. Les 8 derniers caractères de la 1ere lignes sont mes customChars.
Mais comme déjà dit plus haut, il n'est possible d'afficher que 8 customChars differents au même moment mais il est possible de l'afficher plusieurs fois heureusement.

a+

caape:
Mais comme déjà dit plus haut, il n'est possible d'afficher que 8 customChars differents au même moment mais il est possible de l'afficher plusieurs fois heureusement.

Je suis pas sûr qu'on se soit compris : de mémoire les HD 44780 ont un buffer, donc d'après mon idée il est possible de faire comme ceci pour afficher 2x8 customchar :

  1. programmation de 8 customs char
  2. affichage sur la première ligne de ces 8 custom char
  3. programmation de 8 autres customs char
  4. affichage sur la deuxième ligne de ces 8 nouveau custom char (comme il y a un buffer les 8 premiers reste affichés)

Non ce n'est pas 8 customchar pour chaque ligne, mais pour tout l'affichage à un instant t.

Le contrôleur d'écran dispose d'une RAM dans laquelle on écrit le code du caractère à afficher sur un octet (proche de l'ascii, 65 pour le A, etc.).
Telle adresse de la RAM correspond à tel caractère de telle ligne de l'écran LCD.

Ensuite, un caractère affiché étant graphiquement constitué de 8 lignes de 5 points, le contrôleur convertit le code ascii en matrice 5x8 et transmet la commande au LCD pour chaque pixel.
Pour faire cela, il utilise une ROM (donc non modifiable) dans laquelle tous les caractères sont prédéfinis.
Tous sauf 8, dits personnalisables, dont la matrice 5x8 est gérée en RAM.

Pour ceux-là, il y a possibilité d'aller écrire en RAM la matrice 5x8 que l'on souhaite.

Par exemple si on prend le caractère personnalisable 0x01 :

  • on peut lui définir une matrice 5x8 personnalisée
  • on peut afficher ce caractère à plusieurs endroits de l'écran, mais partout il aura le même rendu

Je me suis même amusé à faire des animations de caractères, à partir d'un affichage de lignes figées, simplement en modifiant la matrice 5x8 à intervalles réguliers.

bricoleau:
...
Je me suis même amusé à faire des animations de caractères, à partir d'un affichage de lignes figées, simplement en modifiant la matrice 5x8 à intervalles réguliers.

C'est exactement comme ça que j'ai fais ma ligne d'icone. Je ne fais que redéfinir le caractère et il se met a jour instantanément.

A+

Okay. Donc, c'est quand même possible il suffit de jouer avec la persistance rétinienne.

A supposer deux lignes de 8 caractères, tous les 1/48 ème de seconde, on efface une ligne, on remplit avec les nouveaux customs char qu'on affiche sur la seconde.

B@tto:
Okay. Donc, c'est quand même possible il suffit de jouer avec la persistance rétinienne.

A supposer deux lignes de 8 caractères, tous les 1/48 ème de seconde, on efface une ligne, on remplit avec les nouveaux customs char qu'on affiche sur la seconde.

bonjour B@tto
AMHA et à chaud , je pense que l'on doit etre là pour du LCD basique en dehors des temps pour l'inversion de pixels , :grin:

A verifier In situ 8)

Idem Artouste. Sauf à utiliser des LCD spécialisés, la plupart des écrans d'entrée de gamme ont un temps de réponse optique de 100 à 200ms, c'est beaucoup trop lent pour espérer obtenir un résultat correct.

A tester.
Mais je doute que cela fonctionne convenablement.
Les crystaux mettent un certain temps pour se stabiliser, ça risque de faire un gros paté de pixels. Il faut bien 1/2 sec pour que la rémanence du caractère précédant s'efface sur les LCD Blanc sur fond bleu. Apres sur un LCD sans backlight (green.. je ne sais plus quoi), ça peut peutetre fonctionner, ça fait longtemps que je n'ai plus utilisé ce genre de modele mais je ne pense pas qu'ils soient plus rapide.

a+

Edit : grillé par haifger

Effectivement.

A titre d’exemple, sur un LCD standard (bleu rétroéclairé), j’ai réalisé un genre de pacman qui ouvre et ferme la bouche.
Il suffit de faire clignotter quelques pixels à l’emplacement de la bouche.

La rémanence fait que visuellement l’extinction des pixels prend du temps.
Pour avoir un pacman qui “mordille” à une fréquence de 1 Hz, avec un rendu approximatif à 50% du temps bouche ouverte et 50% du temps bouche fermée, j’ai du programmer 300 ms bouche fermée et 700 ms bouche ouverte.