interfacer un 20M2 avec un ELCDxx serie

spheris

Senior Member
Bonjour,

Je souhaite interfacer un picaxe avec un afficheur LCD prévu pour picbasic. 4x20 carracteres

Voici mon code en entier, Ais-je oublié quelque chose, y a t il une init préalable, car cela ne fonctionne pas et j'ai toujours un curseur en haut a gauche.

Code:
main:
pause 500
b1 = $A3 & $01 & $A2
b3  =$00
serout 7,T4800,(b1)
serout 7,T4800,("hello")
serout 7,T4800,(b3)
high 1 ' clignotement d'une led juste pour voir si picaxe fonctionnel et bien cablé
pause 500
low 1
pause 500
goto main
Merci pour vos réponses
 
Last edited:

PieM

Senior Member
Bonjour,

votre "b1 = $A3 & $01 & $A2" n'est pas possible! b1 est un byte, et va donc contenir l'addition logique des 3 valeurs (& = AND).
Vous avez cru faire une concaténation (?), mais ce n'est pas possible.

précisez à quelle fréquence est utilisé le Picaxe , . Si c'est un 20M2, l'appellation de la broche serin n'est pas bonne: il faut définir le port. C.7 par exemple.

avez vous configuré l'afficheur ELCD à 4800 bauds ? de base il est en 19200 bauds. Une piste est à couper pour être en 4800.

Code:
'Exemple de code pour un afficheur ELCD 4 lignes
serout B.7, T4800,($A3,$01)  'efface l'afficheur
serout B.7, T4800,($A3,$0C)
pause 150

serout B.7, T4800,($A1,6,0,$A2,"BONJOUR", 0)
serout B.7, T4800,($A1,5,2,$A2,"=======", 0)
serout B.7, T4800,($A1,3,3,$A2,"Vers. Soft 56ex",0)
 
Last edited:

spheris

Senior Member
PieM,
Avec toutes ces infos et ce petit exemple cela marche.
Maintenant un autre problème.

Je fais un :

Code:
readadc10 1,w2
serout 7,T4800,($A1,3,3,$A2,w2,0)
pause 120
pour afficher la valeur d'une de mes entrées mais j'obtiens la liste des caracteres ASCII et non la valeur lorsque l'entrée varie.
comment puis-je faire pour afficher ma valeur analogique convertie (de 0 a 1023)?
 

westaust55

Moderator
Veuillez indiquer également quel module d'affichage à cristaux liquides vous utilisez.

Veuillez indiquer également quel module d'affichage à cristaux liquides vous utilisez. Pour le Rev Ed AXE033 et AXE133, le signal est INverted et vous auriez besoin de N4800, tandis qu'autre utilisation le protocole de signal de True . Quand le protocole de signal de de True est utilisation vous devriez placer la goupille correspondante d'affichage à cristaux liquides HIGH au début du programme.


'Exemple de code pour un afficheur ELCD 4 lignes
Code:
[COLOR="#FF0000"]HIGH B.7[/COLOR] ; au HIGH 7
serout B.7, T4800,($A3,$01)  'efface l'afficheur
serout B.7, T4800,($A3,$0C)
pause 150

serout B.7, T4800,($A1,6,0,$A2,"BONJOUR", 0)
serout B.7, T4800,($A1,5,2,$A2,"=======", 0)
serout B.7, T4800,($A1,3,3,$A2,"Vers. Soft 56ex",0)

En conclusion, notez svp que les morceaux de PICAXE n'emploient pas "picbasic" qui est pour les morceaux indigènes de PIC.
Le BASIC de PICAXE est employé avec le rédacteur de programmation pour des morceaux de PICAXE
 
Last edited:

PieM

Senior Member
PieM,
Avec toutes ces infos et ce petit exemple cela marche.
Maintenant un autre problème.

Je fais un :

Code:
readadc10 1,w2
serout 7,T4800,($A1,3,3,$A2,w2,0)
pause 120
pour afficher la valeur d'une de mes entrées mais j'obtiens la liste des caracteres ASCII et non la valeur lorsque l'entrée varie.
comment puis-je faire pour afficher ma valeur analogique convertie (de 0 a 1023)?

Code:
readadc10 1,w2
serout 7,T4800,($A1,3,3,$A2,[B][COLOR="#FF0000"]#w2[/COLOR][/B],0)
pause 120

Suivre également le conseil de Westaust en mettant à l'état haut la broche utilisée pour un serin dans le cas d'une com True. Sinon le premier caractère transmis sera faux.
Je n'avais fait qu'un extrait d'un code existant.
 
Last edited:

spheris

Senior Member
Merci,
cela fonctionne.

Avec un coeficient, ma valeur affichée evolue de 0 à 20
Comment mettre le resultat tout le temps sur 2 digits ?

genre 01, 05, 13 etc...
 

PieM

Senior Member
Il n'y a pas d'instruction de formatage d'un résultat avec le Picaxe.
Donc, il faut gérer soi même l'affichage:

Si W2 inférieur à 10, alors utiliser: serout 7,T4800,($A1,3,3,$A2,"0",#w2,0)

Concernant l'appellation des broches, le 20M2 n'ayant pas des entrées sorties figées comme l'ancien 20M, il est bon de définir la broche par son numéro complet, à savoir Port + N° . Serout 7 va être la broche B.7 en fait, mais vous pourriez tout aussi bien utililliser le port C avec la broche C.7
 
Last edited:

spheris

Senior Member
Bonsoir,
Je continu mon post avec cette question :
pour 1023 echantillons, je suis à la pleine echelle (soit 10% valeur affichée sur mon lcd). Dans le cas d'une linéarité totale, cela me fait une conversion de 102,3.
pour un echantillon de 1000, j'affiche 9,7% sur mon lcd.
Le 9 et la virgule, je l'affiche par :

Code:
w4 = w4 * 10 / 1023
serout B.7, T4800,($A1,11,1,$A2, #w4,",","%  ",0)
Mais quelle est l'astuce pour afficher le 7 des décimales?
Merci pour votre réponse.
 

PieM

Senior Member
Bonsoir,

Le picaxe ne travaille qu'avec des entiers. Donc si vous souhitez avoir des résultats avec une décimale, il faut calculer avec des valeurs en dixièmes. Et en centièmes pour deux décimales.

Votre résultat w4 doit donc être 97

de là, vous aller calculer le chiffre des d'unités en faisant b10 = w4 /10
et le chiffre des dixièmes par b11= w4 //10

l'affichage sera donc :
serout B.7, T4800,($A1,11,1,$A2, #b10,",",#b11,"% ",0)
 

spheris

Senior Member
PieM,
Merci cela fonctionne.
Par contre pourmon 2eme capteur 1023 echantillons correspondent à 25%
donc un coef de 40,92
pour les dizaines et unité je code comme ceci :
Code:
w4 = w4 * 10 / 409
serout B.7, T4800,($A1,11,1,$A2, #w4,",","%  ",0)
Mais pour les dixième, comment faire ?
Merci pour votre réponse.
 

PieM

Senior Member
Bonsoir,

Même punition: il faut faire le calcul pour obtenir un nombre en centaines:

si w4 est de la forme xyz, b10 = w4 / 10 donnera xy
et b11 = w4 // 10 donnera z

Remarque:
pour obtenir le maximum de précision, il faut utilser au mieux la capacité des variables:
Une variable word peut être au maxi de 65535.
Donc quand on applique une mise à l'échelle, au lieu d'utiliser un simple diviseur, il faut multiplier avant par une constante pour se rapprocher de 65535.
En l'occurence, si le maxi de la mesure est 1023, il faut multiplier avant par 64 puis diviser par une constante pour le résultat cherché:

w4*64/261 va donner 250 pour w4 égal à 1023.

de même pour le premier exemple, w4*64/65 donne 100 pour w4= 1023
 
Top