Pour moi l'init à 6 valeurs est OK (non utilisation de la pin RW, mise à la masse).
Ton schéma n'est pas en phase avec ton code : sur le schéma tu utilises 5,4,3,2 et dans le code 6,5,4,3 pour les PIN de données.
Et je ne vois pas le branchement anode/cathode du rétroéclairage.
Tu dis que tu fais varier la résistance du contraste. La manip est bien réalisée avec un potentiomètre ?
T'es sûr de pas passer d'un coup d'un extrême à l'autre ? Trop bas on voit rien, trop haut on a des carrés