bonjour je doit éffectuer un programme sous mplab.
j'utilise un pic 16f876.
Je dois utiliser la fonction if car j'ai deux possibilité:
afficher consigne (temperature désiré)
afficher temperature (temperature actuel)
jutilise un afficheur 16x2
-----
bonjour je doit éffectuer un programme sous mplab.
j'utilise un pic 16f876.
Je dois utiliser la fonction if car j'ai deux possibilité:
afficher consigne (temperature désiré)
afficher temperature (temperature actuel)
jutilise un afficheur 16x2
BOnjour,
Quel est le type d'afficheur que tu utilises?
Travailles tu sur une carte de développement?
Tu programme en C? Quel compilateur utilise tu?
As tu déja utilisé MPLAB? Si ce n'est pas le cas, rend toi sur le site de Microchip et télécharge l'environnement MPLAB:
http://www.microchip.com/stellent/id...&part=SW007002
Voila deja...
jutilise un afficheur gdm1602a.
Je travaille sur une carte en cours de developpement
je programme en c
jutilise mplab ide v7.00
Et quel est ton problème ?
Tu ne sais pas comment fonctionne un afficheur LCD ?
Tu ne sais pas programmer en C ?
Tu n'as jamais programmé de PIC ?
c'est un peu des 3 je narrive pa a faire mon programme en c
Un lien si ça peut aider:
http://www.aix-mrs.iufm.fr/formation...C/indexPIC.htm.
Et ca pour la façon d'utiliser un LCD.
http://www.aurel32.net/elec/lcd.php
jai modifié mon programme j'utilise toujours un afficheur lcd gdm 1602a 16x2 caracteres.
j'utilise un pic 16f876.
j'aimerai afficher une lettre sur l'afficheur.
pourriez vous me montrer le programme en language c merci
Regarde ces quelques fonctions.
C'est pour une écriture en mode 8 bits.
Il y a une fonction d'affichage par caractère, et un autre d'affichage par ligne de texte (la seconde utilise la première bien entendu)
Bon courage
J'ai transformé le zip en txt (le zip avait un problème avec XP). Il suffit d'enlever l'extension txt.
JPL, modérateur
Dernière modification par JPL ; 05/03/2008 à 18h54.
#include <16F876.H>
#fuses XT,NOWDT,NOPROTECT
#use delay(clock=4000000)
#define ClkLcd PIN_A1
#define RWLcd PIN_A2
#define RSLcd PIN_A3
int data;
void main (void)
{
output_high(PIN_A1);
output_low(PIN_A2);
output_low(PIN_A3);
output_C (data);
}
voila jai commencer mon programme pourrier me donner kelke indication pour continuer mon prog
Tu n'as pas regardé ce que j'ai posté juste au dessus ??
si justement je me suis servi de ton programme maintenant j'éssaye de trouver les lignes de programme restante pour faire fonctionner mon programme.
Un truc comme :
devrait marcher.Code:void main(void) { unsigned char mot[16]; open_lcd(); sprintf(mot,"Coucou !!!"); ecrire_lcd(mot, 0); }
bonjour j'aimerai connaitre les lignes de codes pour initialiser l'afficheur lcd en mode 4 bits.
Voila la demarche a suivre mai je ne connais pa les lignes de commande en language c.
Pour l'initialisation d'un afficheur en mode quatre bits, on commence par forcer celui-ci dans le mode huit bits, puis quand on est sûr que celui-ci est valide, on bascule en mode quatre bits. Comme on ne sait pas au début de l'initialisation si l'afficheur est positionné en quatre ou huit bits, il est nécessaire d'envoyer la commande de passage en mode huit bits plusieurs fois de façon à ce que celle-ci soit comprise, que le mode de départ soit quatre ou huit bits. Les données sont écrites ou lues en envoyant séquentiellement les quatres bits de poids fort suivi des quatres bits de poids faible, séparés par une impulsion positive d'au moins 450 ns sur la ligne E.
En résumé, voici sur quatre bits, les commandes (RS=0) à envoyer à l'afficheur LCD. Entre chaque valeur, il faut envoyer une impulsion positive sur la ligne E.
0h, 1h, 0h, 0h, 1h : on commence par effacer l'afficheur (01h)
3h, 3h, 3h : on force le LCD en mode 8 bits (3xh)
2h : on passe en mode 4 bits (20h)
2h, 8h : mode 4 bits, 2 lignes, caractères 5x7 (28h)
0h, Ch : affichage en fonction, pas de curseur (0Ch)
0h, 6h : le curseur se déplace vers la gauche (06h)
0h, 1h : on efface l'afficheur
Merci pour votre aide
Dans le code que je t'ai donné, il y a la fonction 'ecrire_octet_lcd'.
Tu n'as qu'à en faire une qui s'appellera 'ecrire_demi_octet_lcd'. C'est la même chose que la première sauf que tu ne t'interessera par exemple qu'aux 4 premiers bits.
...
Aller je le fais :
Voilà. (je ne sais plus si en 4 bits on utilise D0..3 ou D4...7)Code:void ecrire_demi_octet_lcd(char data, char type) { // Placement des bits de données if(data & 0x01) { D0 = 1; } else D0 = 0; if(data & 0x02) { D1 = 1; } else D1 = 0; if(data & 0x04) { D2 = 1; } else D2 = 0; if(data & 0x08) { D3 = 1; } else D3 = 0; RW = 0; if(type) RS = 1; else RS = 0; ENABLE = 1; tempo(50); ENABLE = 0; }
Maintenant tu modifie la fonction ouvrir_lcd() en la faisant appeler ta nouvelle fonction autant de fois qu'il y a de parametres.
Il te reste une autre modification à faire : modifier la fonction 'ecrire_octet_lcd' pour qu'elle appel deux fois 'ecrire_demi_octet_lcd', une fois avec les 4 bits de poids fort, une fois avec les 4 bits de poids faible.
Bon courage
Salut,
Une bonne source de programmes avec plein d'exemples pour les LCD ici : http://www.sxlist.com/techref/io/lcd/pic.htm
a+
salut à tous,
Merci pour ton aide cherwam07 mais j'aurais une question,
tu dis qu'un truc comme sa devrait marcher
mais pourquoi utilisé la fonction sprintf? Ne peut t'ont pas simplement écrireCode:void main(void) { unsigned char mot[16]; open_lcd(); sprintf(mot,"Coucou !!!"); ecrire_lcd(mot, 0); }
MerciCode:void main(void) { open_lcd(); ecrire_lcd("Coucou !!!", 0); }