mon schema c'est un pic 16f877 relié a 2 resistance variable et 2 barregraph pour aficher le niveau d'un fluide dans 2 bacs en temps reel , et relié aussi a un LCD 16*2 , j'ai utiliser les 8 premieres leds du barregraphe a 10 leds voici le schema :
et voila le programme en C sur mikroC pour les 2 barregraph :
unsigned int niv_bac1;
unsigned int niv_bac2;
unsigned char i,j;
unsigned int niveaux[8] = {127, 254, 382, 510, 638, 776, 894, 1022};
unsigned char VnDuNiveau(unsigned int val) {
unsigned char i = 0;
while (i < sizeof(niveaux)) {
if (val < niveaux[i])
return i;
else i++;
}
}
void main() {
// Configuration des pins 2 et 3 en analogique
TRISA = 0xFF; // programmtion du PORTA en entrée
TRISB = 0; // programmtion du PORTB en sortie
TRISC = 0; // programmtion du PORTC en sortie
TRISD = 0; // programmtion du PORTD en sortie
OPTION_REG.NOT_RBPU = 0;
do {
adcon0=0x80;
niv_bac1= Adc_Read(0); // lecture du niveau de fluide du bac1
//portB=niv_bac1>>2; //Affichage en binaire du niveau de fluide
j= VnDuNiveau(niv_bac1);
switch ( j ) {
case 0:
// Code
portB = 0x01;
break;
case 1:
// Code
portB = 0x03;
break;
case 2:
// Code
portB = 0x07;
break;
case 3:
// Code
portB = 0x0F;
break;
case 4:
// Code
portB = 0x1F;
break;
case 5:
// Code
portB = 0x3F;
break;
case 6:
// Code
portB = 0x7F;
break;
case 7:
// Code
portB = 0xFF;
break;
}
adcon0=0x88; //du bac1 sur le portB
niv_bac2= Adc_Read(1); // lecture du niveau de fluide du bac2
//PORTC = niv_bac2>>2; //Affichage en binaire du niveau de fluide
//du bac2 sur le portC
j= VnDuNiveau(niv_bac2);
switch ( j ) {
case 0:
// Code
portC = 0x01;
break;
case 1:
// Code
portC = 0x03;
break;
case 2:
// Code
portC = 0x07;
break;
case 3:
// Code
portC = 0x0F;
break;
case 4:
// Code
portC = 0x1F;
break;
case 5:
// Code
portC = 0x3F;
break;
case 6:
// Code
portC = 0x7F;
break;
case 7:
// Code
portC = 0xFF;
break;
}
} while(1);
}
je cherche le programme de l'ecran LCD pour qu'il affiche lui aussi le niveau de fluide mais je ne trouve pas
Je ne suis pas un expert dans la programmation des PIC, donc je pourrais pas trop t'aider dans ton problème malheureusement, mais avec un peu de recherche, j'ai trouver ceci, et ceci.
Ensuite, a toi de faire correspondre les différentes sorties de ton PIC aux différentes entrées de ton écran LCD, pour ensuite afficher les informations que tu souhaite Analyse bien le code que je t'ai fournit (voir le lien) pour faire correspondre les entrées/sorties de t'es composants.
Cependant, la prochaine fois, merci d'utiliser les balises de code pour un affichage plus clair Désolé de pas t'aider plus, car c'est pas vraiment ma spécialité.
PS : Soit un peu patient
EDIT : J'ai une autre piste qui pourra t'aider : il faut que tu fasse correspondre les broches D4, D5, D6 et D7 de ton écran LCD aux broches RD4, RD5, RD6 et RD7 de ton PIC, et ensuite, utilise les fonctions nécessaires pour initialiser la connexion et l'affichage des données.
Je ne suis pas un expert dans la programmation des PIC, donc je pourrais pas trop t'aider dans ton problème malheureusement, mais avec un peu de recherche, j'ai trouver ceci, et ceci.
Ensuite, a toi de faire correspondre les différentes sorties de ton PIC aux différentes entrées de ton écran LCD, pour ensuite afficher les informations que tu souhaite Analyse bien le code que je t'ai fournit (voir le lien) pour faire correspondre les entrées/sorties de t'es composants.
Cependant, la prochaine fois, merci d'utiliser les balises de code pour un affichage plus clair Désolé de pas t'aider plus, car c'est pas vraiment ma spécialité.
PS : Soit un peu patient
EDIT : J'ai une autre piste qui pourra t'aider : il faut que tu fasse correspondre les broches D4, D5, D6 et D7 de ton écran LCD aux broches RD4, RD5, RD6 et RD7 de ton PIC, et ensuite, utilise les fonctions nécessaires pour initialiser la connexion et l'affichage des données.
j'ai eseyé mais meme les code dans les lien sont faux
Qu'est-ce qu'il ne marche pas ? Obtient tu des erreurs, quelques chose s'affiche sur ton écran LCD ? Un peu plus t'aide de t'a part nous aiderais aussi . Montre nous au moins ton code pour qu'on puisse t'aider (n'oublie pas la balise de code).
Il faut pas faire un simple copier-coller des codes, il faut l'adapter à ton propre programme.
j'ai eseyé mais meme les code dans les lien sont faux
Qu'est-ce qu'il ne marche pas ? Obtient tu des erreurs, quelques chose s'affiche sur ton écran LCD ? Un peu plus t'aide de t'a part nous aiderais aussi . Montre nous au moins ton code pour qu'on puisse t'aider (n'oublie pas la balise de code).
Il faut pas faire un simple copier-coller des codes, il faut l'adapter à ton propre programme.
- Edité par vegnagun il y a environ 1 heure
oui je sais , j'ai pas encore le code , je cherche un montage qui ressemle au mien pour pouvoir adapter mon code sur mon montage , je suis pas programateur c pour cela que je peut pas ecrire un code tout seul
oui je sais , j'ai pas encore le code , je cherche un montage qui ressemle au mien pour pouvoir adapter mon code sur mon montage , je suis pas programateur c pour cela que je peut pas ecrire un code tout seul
Je comprend pas trop, tu cherche le code en C qui fait va te permettre d'afficher les informations sur ton écran LCD ? Si oui, je pense pas que tu va vraiment trouver un code déjà tout fait, et faire un simple copier-coller, cependant, tu peut tout de même apprendre le C.
Désolé, mais je ne vais pas pouvoir t'aider sur ton problème. Bonne chance pour t'es recherches
il faut poster le code entre des balises code (ça fait peut-être 3 ou 4 fois qu'on te le dit et que c'est toujours pas fait...). sinon, le code est illisible, et nous bah on a pas envie d'aider quelqu'un qui fait pas les efforts simples relevant du clic-bouton et de la recherche google.
// Lcd pinout settings
sbit LCD_RS at RD1_bit;
sbit LCD_EN at RD0_bit;
sbit LCD_D7 at RD7_bit;
sbit LCD_D6 at RD6_bit;
sbit LCD_D5 at RD5_bit;
sbit LCD_D4 at RD4_bit;
// Pin direction
sbit LCD_RS_Direction at TRISD1_bit;
sbit LCD_EN_Direction at TRISD0_bit;
sbit LCD_D7_Direction at TRISD7_bit;
sbit LCD_D6_Direction at TRISD6_bit;
sbit LCD_D5_Direction at TRISD5_bit;
sbit LCD_D4_Direction at TRISD4_bit;
Pourquoi ? Le dernier jour c'est demain ?
Tu postes un message le dimanche à 19h, faire un up à 23h ne sert à rien (et transgresse la règle des up toute les 24h...)
j'ai ecris un autre programme ça marche mais pas comme il faut ,
sur les barregraph ya que les 7 premiere leds qui s'activ alors que normalement c'est les 8 premiere
et sur le lc ya des chiffre bizzare voila une image sur proteus :
et voila le nouveau code programme :
float niv_bac1;
float niv_bac2;
unsigned char i,j;
float niveaux[8] = {127, 255, 383, 511, 639, 777, 895, 1023};
sbit LCD_RS at RD1_bit ;
sbit LCD_EN at RD0_bit ;
sbit LCD_D4 at RD4_bit ;
sbit LCD_D5 at RD5_bit ;
sbit LCD_D6 at RD6_bit ;
sbit LCD_D7 at RD7_bit ;
sbit LCD_RS_Direction at TRISD1_bit ;
sbit LCD_EN_Direction at TRISD0_bit ;
sbit LCD_D4_Direction at TRISD4_bit ;
sbit LCD_D5_Direction at TRISD5_bit ;
sbit LCD_D6_Direction at TRISD6_bit ;
sbit LCD_D7_Direction at TRISD7_bit ;
char niveau1[4];
char niveau2[4];
unsigned char VnDuNiveau(float val) {
unsigned char i = 0;
while (i <= sizeof(niveaux)) {
if (val <= niveaux[i])
return i;
else i++;
}
}
void initialisation(){
TRISA = 0xFF; // programmtion du PORTA en entrée
TRISB = 0; // programmtion du PORTB en sortie
TRISC = 0; // programmtion du PORTC en sortie
TRISD = 0; // programmtion du PORTD en sortie
OPTION_REG.NOT_RBPU = 0;
lcd_init() ;
lcd_cmd(_lcd_clear) ;
lcd_cmd(_lcd_cursor_off) ;
lcd_out(1,1,"Bac1: ") ;
lcd_out(2,1,"Bac2: ") ;
adc_init() ;
portd=0X00 ;
}
void main() {
initialisation() ;
OPTION_REG.NOT_RBPU = 0;
do {
adcon0=0x80;
niv_bac1= Adc_Read(0); // lecture du niveau de fluide du bac1
j= VnDuNiveau(niv_bac1);
switch ( j ) {
case 0:
// Code
portB = 0x00;
break;
case 1:
// Code
portB = 0x01;
break;
case 2:
// Code
portB = 0x03;
break;
case 3:
// Code
portB = 0x07;
break;
case 4:
// Code
portB = 0x0F;
break;
case 5:
// Code
portB = 0x1F;
break;
case 6:
// Code
portB = 0x3F;
break;
case 7:
// Code
portB = 0x7F;
break;
case 8:
// Code
portB = 0xFF;
break;
}
floattostr(niv_bac1,niveau1) ;
lcd_out(1,6,niveau1) ;
adcon0=0x88;
niv_bac2= Adc_Read(1); // lecture du niveau de fluide du bac2
j= VnDuNiveau(niv_bac2);
switch ( j ) {
case 0:
// Code
portC = 0x00;
break;
case 1:
// Code
portC = 0x01;
break;
case 2:
// Code
portC = 0x03;
break;
case 3:
// Code
portC = 0x07;
break;
case 4:
// Code
portC = 0x0F;
break;
case 5:
// Code
portC = 0x1F;
break;
case 6:
// Code
portC = 0x3F;
break;
case 7:
// Code
portC = 0x7F;
break;
case 8:
// Code
portC = 0xFF;
break;
}
floattostr(niv_Bac2,niveau2) ;
lcd_out(2,6,niveau2) ;
} while(1);
}
aider moi SVP
pic 16f877 avec LCD 16*2
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Retrouvez moi sur mon blog et ma chaine Youtube !
oui. non. enfin je regarde et je te dis.
Retrouvez moi sur mon blog et ma chaine Youtube !