Bonjour, je vais fais un projet. il m'arche bien dans Isis.
Mais en réalisation le LCD s'affiche un seul ligne,
le pic 16F877A est bien programmer.
SVP, aider moi car je dois présenter ce projet dans la plus proche
Voila l'image du lcd
-----
Bonjour, je vais fais un projet. il m'arche bien dans Isis.
Mais en réalisation le LCD s'affiche un seul ligne,
le pic 16F877A est bien programmer.
SVP, aider moi car je dois présenter ce projet dans la plus proche
Voila l'image du lcd
Salut,
Jette un oeil sur ce fil : http://forums.futura-sciences.com/el...aracteres.html
Tu trouveras peut être une explication !
La photo est un peu (je suis gentil) floue mais j'ai l'impression que les broches inutilisées (db0 à db3 et probablement rw) ne sont pas reliées à la masse. Je commencerais déjà par ça.
Ensuite ça peut aussi venir du programme (sorties mal configurées ou tempo non respectées).
Salut, il nous faudrait le schéma, et la partie de ton programme ou tu indique sur qu'elle broche est relié le LCD.
Voila le Schema Isis, Ares et le programme
*****************
-> Lien supprimé, pas de lien autorisés vers des serveurs externes
Merci d'avance d'aider Moi SVP
Merci de lire ici pour poster vos fichiers -> http://forums.futura-sciences.com/electronique/163927-conseils-poster-images-forum-pieces-jointes-pj-sabonner.html
De plus tout le monde n'ayant pas Isis, il serait judicieux de poster un jpeg de votre schéma si vous voulez être aidé par le plus grand nombre.
Bonjour,
Votre afficheur en fait n'affiche rien du tout, la ligne noire du bas indique juste qu'il est sous tension.
Votre problème semble (en attendant de voir votre schéma) que le controleur de votre afficheur n'est tout bonnement pas initialisé ou mal initialisé, donc il ne voit rien arriver sur les lignes d'adresses.
@+
Je suis désolé, car je suis nouveau de forums et je ne sais pas que les liens externes sont interdis
Voila l'image du schéma et du programme
Merci d'avance d'aider moi
et Voila schéma en ares
Comme toujours, sur Isis ca fonctionne, mais pas dans la vraie vie. Il faut reverifier toute la chaine d'initialisation, et respecter les minima dans les delais, sous peine de mal initialiser l'afficheur.
Mais un afficheur fonctionne parfaitement bien avec A0-A3 en l'air, par contre, la broche RW ne doit jamais etren l'air.
Je ne connais pas mikroC mais s'il fait appel à des bibliothèques il faut sans doute veiller à respecter le brochage et tu ne peux pas configurer les connections de l'afficheur à ta convenance. j'ai eu le même soucis avec Mikrobasic.
La bonne configuration c'est celle là:
sbit LCD_RS at RB4_bit;
sbit LCD_EN at RB5_bit;
sbit LCD_D4 at RB0_bit;
sbit LCD_D5 at RB1_bit;
sbit LCD_D6 at RB2_bit;
sbit LCD_D7 at RB3_bit;
sbit LCD_RS_Direction at TRISB4_bit;
sbit LCD_EN_Direction at TRISB5_bit;
sbit LCD_D4_Direction at TRISB0_bit;
sbit LCD_D5_Direction at TRISB1_bit;
sbit LCD_D6_Direction at TRISB2_bit;
sbit LCD_D7_Direction at TRISB3_bit;
Oui on peut configurer les ports a sa convenance sous reserve d'utiliser la bonne librairie, puisqu'il y en a deux tout depend de la version de mikroC.
Sur la derniere il n'y en a qu'une et en 4 bits seulement, c'est pas un progres....
Donc moralite faite vos propres librairies ca evite ce genre de desagrements.
Neanmoins pour votre probleme il faudrait poster un code et pas juste une photo floue tres peu pratique a analyser.
Voila le code
Code:int temp_res; char temp[12]; unsigned int rtemp=10; char ntemp[10]; sbit LCD_RS at RB2_bit; sbit LCD_EN at RB3_bit; sbit LCD_D4 at RB4_bit; sbit LCD_D5 at RB5_bit; sbit LCD_D6 at RB6_bit; sbit LCD_D7 at RB7_bit; sbit LCD_RS_Direction at TRISB2_bit; sbit LCD_EN_Direction at TRISB3_bit; sbit LCD_D4_Direction at TRISB4_bit; sbit LCD_D5_Direction at TRISB5_bit; sbit LCD_D6_Direction at TRISB6_bit; sbit LCD_D7_Direction at TRISB7_bit; Lcd_Cmd(_LCD_FIRST_ROW); void adc() { temp_res = ADC_Read(2); // Get 10-bit results of AD conversion temp_res = (temp_res *5)/10; IntToStr(temp_res,temp); } void print() { Lcd_Cmd(_LCD_CLEAR); lcd_out(1,1,"Temp Reel") ; lcd_out(2,1,"Cons temp") ; } void test() { if(temp_res>rtemp) { PORTC=0b00000101; //cool } if(temp_res<rtemp) { PORTC=0b00001010;//hot } if(temp_res==rtemp) { PORTC=0x00; } } void main() { TRISA =0b10; TRISD =0x11; TRISC =0x00; Lcd_Init(); Lcd_Cmd(_LCD_CURSOR_OFF); delay_ms(5); //////////////////////////////// lcd_out(1,4,"Controle") ; lcd_out(2,1,"de Temperature") ; delay_ms(1500); Lcd_Cmd(_LCD_CLEAR); lcd_out(1,4,"Realise par") ; lcd_out(2,4,"Hadoudi") ; delay_ms(1500); Lcd_Cmd(_LCD_CLEAR); lcd_out(1,4,"Chouklati") ; lcd_out(2,4,"Farissi") ; delay_ms(1500); Lcd_Cmd(_LCD_CLEAR); lcd_out(1,4,"Encadre Par:") ; lcd_out(2,4,"Benboujemaa") ; delay_ms(1500); Lcd_Cmd(_LCD_CLEAR); lcd_out(1,4,"Souhane") ; lcd_out(2,4,"2011/2012") ; delay_ms(1500); print(); do { IntToStr(rtemp,ntemp); lcd_out(2,10,ntemp); delay_ms(200); lcd_out(1,10,temp) ; delay_ms(200); test(); if(portd.f1==0 && rtemp>0) { rtemp--; delay_ms(200); } if(portd.f0==0&&rtemp<=100) { rtemp++; delay_ms(200); } adc(); } while(1); return; }
Merci de mettre les balises CODE quand vous postez un code
L'usage est le suivant:
[CODE]
ici vous avez votre code
.........
{/CODE] il faut bien entendu remplacer la parenthese par [ sans quoi vous n'auriez pas pu voir ce texte.
Je doute que ce code fonctionnait avec Isis, ou alors il faut d'urgence le laisser tomber...
Quelques corrections mais il me manque les affectations de vos ports (A, C et D), j'ai besoin de savoir ce que vous branchez dessus.
Il faut prendre la bonne habitude de le renseigner dans le code.
Dans votre schema 1 il y a des erreurs comme par exemple le point median du potentiometre a la masse... et le schema 2 est pour moi illisible car trop petit.
Donc repostez le schema correspondant exactement a votre maquette a une echelle lisible.
Dans un code il faut des commentaires, il n'y a rien d'explicite dans le votre.
Verifiez et confirmez que la ligne R/W est bien reliee a la masse sur votre maquette.
Code:int temp_res; char temp[12]; unsigned int rtemp=10; char ntemp[10]; sbit LCD_RS at RB2_bit; sbit LCD_EN at RB3_bit; sbit LCD_D4 at RB4_bit; sbit LCD_D5 at RB5_bit; sbit LCD_D6 at RB6_bit; sbit LCD_D7 at RB7_bit; sbit LCD_RS_Direction at TRISB2_bit; sbit LCD_EN_Direction at TRISB3_bit; sbit LCD_D4_Direction at TRISB4_bit; sbit LCD_D5_Direction at TRISB5_bit; sbit LCD_D6_Direction at TRISB6_bit; sbit LCD_D7_Direction at TRISB7_bit; // Lcd_Cmd(_LCD_FIRST_ROW); -> inutile et qu'est ce que ca fait la??? void adc() { temp_res = ADC_Read(2); // Get 10-bit results of AD conversion temp_res = (temp_res *5)/10; // il aurait ete preferable de declarer temp_res en float... IntToStr(temp_res,temp); } void print() { Lcd_Cmd(_LCD_CLEAR); lcd_out(1,1,"Temp Reel") ; lcd_out(2,1,"Cons temp") ; } void test() { if(temp_res>rtemp) { PORTC=0b00000101; //cool } if(temp_res<rtemp) { PORTC=0b00001010;//hot } if(temp_res==rtemp) { PORTC=0; } } void main() { // TRISA =0b10; c'est quoi ca?? TRISA = 0x10; PORTA = 0; TRISD = 0x11; PORTD = 0; TRISC = 0; PORTC = 0; Lcd_Init(); Lcd_Cmd(_LCD_CURSOR_OFF); delay_ms(5); //////////////////////////////// lcd_out(1,4,"Controle") ; lcd_out(2,1,"de Temperature") ; delay_ms(1500); Lcd_Cmd(_LCD_CLEAR); lcd_out(1,4,"Realise par") ; lcd_out(2,4,"Hadoudi") ; delay_ms(1500); Lcd_Cmd(_LCD_CLEAR); lcd_out(1,4,"Chouklati") ; lcd_out(2,4,"Farissi") ; delay_ms(1500); Lcd_Cmd(_LCD_CLEAR); lcd_out(1,4,"Encadre Par:") ; lcd_out(2,4,"Benboujemaa") ; delay_ms(1500); Lcd_Cmd(_LCD_CLEAR); lcd_out(1,4,"Souhane") ; lcd_out(2,4,"2011/2012") ; delay_ms(1500); print(); do { IntToStr(rtemp,ntemp); lcd_out(2,10,ntemp); delay_ms(200); lcd_out(1,10,temp) ; delay_ms(200); test(); if(portd.f1==0 && rtemp>0) { rtemp--; delay_ms(200); } if(portd.f0==0 && rtemp<=100) { rtemp++; delay_ms(200); } adc(); } while(1); // return; inutile et on arrive jamais ici puisque le while(1) est au dessus... }
Voila le code :
Code:int temp_res; char temp[12]; unsigned int rtemp=10; char ntemp[10]; sbit LCD_RS at RB2_bit; sbit LCD_EN at RB3_bit; sbit LCD_D4 at RB4_bit; sbit LCD_D5 at RB5_bit; sbit LCD_D6 at RB6_bit; sbit LCD_D7 at RB7_bit; sbit LCD_RS_Direction at TRISB2_bit; sbit LCD_EN_Direction at TRISB3_bit; sbit LCD_D4_Direction at TRISB4_bit; sbit LCD_D5_Direction at TRISB5_bit; sbit LCD_D6_Direction at TRISB6_bit; sbit LCD_D7_Direction at TRISB7_bit; Lcd_Cmd(_LCD_FIRST_ROW); void adc() { temp_res = ADC_Read(2); // Get 10-bit results of AD conversion temp_res = (temp_res *5)/10; IntToStr(temp_res,temp); } void print() { delay_ms(5); Lcd_Cmd(_LCD_CLEAR); delay_ms(5); lcd_out(1,1,"Temp Reel") ; delay_ms(5); lcd_out(2,1,"Cons temp") ; delay_ms(5); } void test() { if(temp_res>rtemp) { PORTC=0b00000101; //cool } if(temp_res<rtemp) { PORTC=0b00001010;//hot } if(temp_res==rtemp) { PORTC=0x00; } } void main() { TRISA =0b10; TRISD =0x11; TRISC =0x00; Lcd_Init(); delay_ms(50); Lcd_Cmd(_LCD_CURSOR_OFF); delay_ms(50); //////////////////////////////// lcd_out(1,4,"Controle") ; delay_ms(50); lcd_out(2,1,"de Temperature") ; delay_ms(1500); Lcd_Cmd(_LCD_CLEAR); lcd_out(1,4,"Realise par") ; delay_ms(50); lcd_out(2,4,"Hadoudi") ; delay_ms(1500); Lcd_Cmd(_LCD_CLEAR); lcd_out(1,4,"Chouklati") ; delay_ms(50); lcd_out(2,4,"Farissi") ; delay_ms(1500); Lcd_Cmd(_LCD_CLEAR); lcd_out(1,4,"Encadre Par:") ; delay_ms(50); lcd_out(2,4,"Benboujemaa") ; delay_ms(1500); Lcd_Cmd(_LCD_CLEAR); lcd_out(1,4,"Souhane") ; delay_ms(50); lcd_out(2,4,"2011/2012") ; delay_ms(1500); print(); do { IntToStr(rtemp,ntemp); lcd_out(2,10,ntemp); delay_ms(200); lcd_out(1,10,temp) ; delay_ms(200); test(); if(portd.f1==0 && rtemp>0) { rtemp--; delay_ms(200); } if(portd.f0==0&&rtemp<=100) { rtemp++; delay_ms(200); } adc(); } while(1); return; }