Je me suis absenté pour continuer mon apprentissage du C for MikroC et je reviens avec un problème sur le pic.
J'ai essayer de réaliser le code d'un appareil qu'on utilise au laboratoire de chimie pour agiter des solutions
L'appareil est simple au debut on nous demande d'entrer 5 temps en seconde
0<T1<15
0<T2<5
0<T3<5
0<T4<10
0<T5<15
Ici je souhaitais faire pour une première fois de l’ingénieurie inverse
A mes yeux voici comment le dispositif fonctionne. Il est constituer de plusieurs agitateur qui agite dans plusieurs sens différent.
Après avoir valider les temps le premier agitateur s'enclenche durant un temps T1 puis s'eteind et le deuxième s’enclenche pendant un temps T2
ensuite s’arrête. Le 3eme agitateur lui s’enclenche durant un temps T3 puis s'eteind pour 1s ensuite reprend avec le 4eme agitateur. Lorsque T4 s’écoule le 3eme agitateur reste allumer encore pendant 1e seconde puis s’arrête et le 5eme agitateur s'enclanche pour T5 .
Maintenant ça y est je connais utiliser la table ASCII
Maintenant voici ce que mon code fait
la simulation c'est fait en temps réel avec des led, un quartz de 8Mhz, un lcd1602 et un pic18f4550 et pic18f45k22 j'ai egalement un 18f4620 mais je l'ai pas utiliser
J'ai taper mon code pour le pic18f4550 ensuite j'ai juste changer le pic dans mikro C pour le 45k22 et le resultat etait pire. Je ne sais pas s'il fallait le modifier puisqu'ils ont les même dispositions de roche.
Voici les fait J'ai taper le code entierement comme je l'ai decrit et je l'ai simuler au fur et a mesure au départ j'ai fais le code pour 4 temps, mon code était long et a un moment l'ecran n'affichait plus rien ensuite j'ai reduit le nombre d'appellation de l’encrant et aussi ce que j'ai pus réduire dans des fonctions et la le bingo tout a fonctionné
Pour les delay variable j'ai utiliser le chronomètre de mon téléphone et après plusieurs test j'ai obtenue un résultat proche de 1s par incrémentation avec cette ligne
Code : Tout sélectionner
for (i=0;i<h;i++)
{delay_ms(4); }
Si quelqu'un peut m'explique comment cette ligne peut donner 1s .... Mais sa marche je ne sais pas comment mais ça marche
Ensuite est venu l'heur d'ajouter le 5eme temps que j'avais oublier et la plus rien l'ecran n'affiche pas rien ne fonctionne et je ne sais pas quoi maitre d'autre dans une fonction
J'ai essayer de mettre un goto variable dans une fonction . est ce possible ou suis je juste désespéré? Vas savoir
Ensuite j'ai flacher le pic18f45k22 et la tout etait bisard meme les temps n'etait plus respecte et j'ai tout laisse
voici mon code
Code : Tout sélectionner
//Module de connection du LCD
sbit LCD_RS at LATB5_bit;
sbit LCD_EN at LATB6_bit;
sbit LCD_D4 at LATB1_bit;
sbit LCD_D5 at LATB2_bit;
sbit LCD_D6 at LATB3_bit;
sbit LCD_D7 at LATB4_bit;
sbit LCD_RS_Direction at TRISB5_bit;
sbit LCD_EN_Direction at TRISB6_bit;
sbit LCD_D4_Direction at TRISB1_bit;
sbit LCD_D5_Direction at TRISB2_bit;
sbit LCD_D6_Direction at TRISB3_bit;
sbit LCD_D7_Direction at TRISB4_bit;
//Fin de la declaration de ce module
void in2string (int i)
{
unsigned short Txt[14];
unsigned short inTemp;
intToStr ( i,Txt); // Convertir en String
inTemp=Ltrim(Txt);
Lcd_Out_CP(inTemp); // Display Ref Temp
}
void aff ()
{
Lcd_Out(2,1, "Press 3 to Cont.");
}
void ch (int j,int k,char Tx[])
{
Lcd_Out(j,k,tx);
}
void lc (int x,int y,int z)
{
ch (1,1,"Entrer ");
//Lcd_Out(1,1,"Entrer");
in2string (y);
ch (1,9,"< T");
//Lcd_Out(1,9,"< T");
in2string (x);
ch (1,14,"<");
//Lcd_Out(1,14,"<");
in2string (z);
}
void main() {
int a,b,c,d,i,m;
int e,f,g,h,n;
PORTD=0; // Configuration du PORTD comme digital
TRISD0_bit = 1; // set RD0 pin as input
TRISD1_bit = 1;
TRISD2_bit = 1;
TRISD3_bit = 1;
TRISC=0x00;
PORTC=0x00;
Lcd_Init(); // Initialiser l'ecran LCD
Lcd_Cmd(_LCD_CLEAR);
Lcd_Cmd(_LCD_CURSOR_OFF);
Lcd_Cmd(_LCD_CLEAR); // Effacer le contenu de l'ecran
Lcd_Cmd(_LCD_CURSOR_OFF); // Mettre le cursseur OFF
Lcd_Out(1,4, "CEREDETEC");
Lcd_Out(2,2, "CONSTRUCTEUR");
delay_ms(2000);
/*Lcd_Cmd(_LCD_CLEAR);
Lcd_Out(1,4, "Bertrand");
Lcd_Out(2,2, "Zeudong");
delay_ms(2000);*/
// On commence a lire la reference de temps1 entree au clavier
//******************************1er temps**************
START:
Lcd_Cmd(_LCD_CLEAR); // efface le contenue de l'ecran
lc (1,0,15);
//Lcd_Out(1,1,"Entrer 0< T1 <15");
a=0;
Lcd_Out(2,1,"T1 : ");
do {
Lcd_Out(2,1,"T1 : ");
in2string (a);
if (Button(&PORTD, 0, 1, 0)) { // button d'increment tation de la valeur (button1)
delay_ms(120);
a++ ;
}
if (a>15){
a=0;
goto START;
}
if (Button(&PORTD, 1, 1, 0)) { // button de decrementation de la valeur (button2)
delay_ms(120);
a-- ;
}
if (a<0){
a=0;
goto START;
}
if (Button(&PORTD, 2, 1, 0)) { // button de validation (bbutton 3)
delay_ms(120);
break ;
}
} while(1);
Lcd_Cmd(_LCD_CLEAR);
Lcd_Out (1,1, "T1: ");
in2string (a);
aff ();
//Lcd_Out(2,1, "Press 3 to Cont.");
do {
if (Button(&PORTD, 3, 1, 0)) { // button de retour en arriere (button4)
delay_ms(120);
goto START;
}
if (Button(&PORTD, 2, 1, 0)) { // button3
delay_ms(120);
break;
}
} while (1);
//**************************2eme temps************************
START1:
Lcd_Cmd(_LCD_CLEAR); // efface le contenue de l'ecran
lc (2,0,5);
//Lcd_Out(1,1,"Entrer 0< T2 <05");
b=0;
Lcd_Out(2,1,"T2 : ");
do {
Lcd_Out(2,1,"T2 : ");
in2string (b);
if (Button(&PORTD, 0, 1, 0)) { // button1
delay_ms(120);
b++ ;
}
if (b>5){
b=0;
goto START1;
}
if (Button(&PORTD, 1, 1, 0)) { // button2
delay_ms(120);
b-- ;
}
if (b<0){
b=0;
goto START1;
}
if (Button(&PORTD, 2, 1, 0)) { // button3
delay_ms(120);
break ;
}
} while(1);
Lcd_Cmd(_LCD_CLEAR);
Lcd_Out (1,1, "T2: ");
in2string (b);
aff ();
//Lcd_Out(2,1, "Press 3 to Cont.");
do {
if (Button(&PORTD, 3, 1, 0)) { // button4
delay_ms(120);
goto START1;
}
if (Button(&PORTD, 2, 1, 0)) { // button3
delay_ms(120);
break;
}
} while (1);
//*****************3eme temps********************
START2:
Lcd_Cmd(_LCD_CLEAR); // efface le contenue de l'ecran
lc(3,0,5);
// Lcd_Out(1,1,"Entrer 0< T3 <05");
c=0;
Lcd_Out(2,1,"T3 : ");
do {
Lcd_Out(2,1,"T3 : ");
in2string (c);
if (Button(&PORTD, 0, 1, 0)) { // button1
delay_ms(120);
c++ ;
}
if (c>5){
c=0;
goto START2;
}
if (Button(&PORTD, 1, 1, 0)) { // button2
delay_ms(120);
c-- ;
}
if (c<0){
c=0;
goto START2;
}
if (Button(&PORTD, 2, 1, 0)) { // button3
delay_ms(120);
break ;
}
} while(1);
Lcd_Cmd(_LCD_CLEAR);
Lcd_Out (1,1, "T3: ");
in2string (c);
aff ();
//Lcd_Out(2,1, "Press 3 to Cont.");
do {
if (Button(&PORTD, 3, 1, 0)) { // button4
delay_ms(120);
goto START2;
}
if (Button(&PORTD, 2, 1, 0)) { // button3
delay_ms(120);
break;
}
} while (1);
//************************4eme temps*****************
START3:
Lcd_Cmd(_LCD_CLEAR); // efface le contenue de l'ecran
lc (4,0,10);
// Lcd_Out(1,1,"Entrer 0< T4 <10");
d=0;
Lcd_Out(2,1,"T4 : ");
do {
Lcd_Out(2,1,"T4 : ");
in2string (d);
if (Button(&PORTD, 0, 1, 0)) { // button1
delay_ms(120);
d++ ;
}
if (e>10){
d=0;
goto START3;
}
if (Button(&PORTD, 1, 1, 0)) { // button2
delay_ms(120);
d-- ;
}
if (d<0){
d=0;
goto START3;
}
if (Button(&PORTD, 2, 1, 0)) { // button3
delay_ms(120);
break ;
}
} while(1);
Lcd_Cmd(_LCD_CLEAR);
Lcd_Out (1,1, "T4: ");
in2string (d);
aff ();
//Lcd_Out(2,1, "Press 3 to Cont.");
do {
if (Button(&PORTD, 3, 1, 0)) { // button4
delay_ms(120);
goto START3;
}
if (Button(&PORTD, 2, 1, 0)) { // button3
delay_ms(120);
break;
}
} while (1);
//***********************5eme temps*******************
/*START4:
Lcd_Cmd(_LCD_CLEAR); // efface le contenue de l'ecran
lc (5,0,15);
// Lcd_Out(1,1,"Entrer 0< T5 <15");
m=0;
ch (2,1,"T5 : ");
//Lcd_Out(2,1,"T5 : ");
do {
ch (2,1,"T5 : ");
//Lcd_Out(2,1,"T5 : ");
in2string (m);
if (Button(&PORTD, 0, 1, 0)) { // Detect logical one
delay_ms(120);
m++ ;
}
if (m>15){
m=0;
goto START4;
}
if (Button(&PORTD, 1, 1, 0)) { // Detect logical one
delay_ms(120);
m-- ;
}
if (m<0){
m=0;
goto START4;
}
if (Button(&PORTD, 2, 1, 0)) { // Detect logical one
delay_ms(120);
break ;
}
} while(1);
Lcd_Cmd(_LCD_CLEAR);
ch (1,1, "T5: ");
//Lcd_Out (1,1, "T5: ");
in2string (m);
aff ();
//Lcd_Out(2,1, "Press 3 to Cont.");
do {
if (Button(&PORTD, 3, 1, 0)) { // Detect logical one
delay_ms(120);
goto START4;
}
if (Button(&PORTD, 2, 1, 0)) { // Detect logical one
delay_ms(120);
break;
}
} while (1);*/
Lcd_Cmd(_LCD_CLEAR);
ch (1,1,"T1:");
//Lcd_Out(1,1, "T1: ");
in2string (a);
ch (1,7,"T2:");
//Lcd_Out(1,8, "T2: ");
in2string (b);
ch (2,1,"T3:");
//Lcd_Out(2,1, "T3: ");
in2string (c);
ch (2,7,"T4:");
//Lcd_Out(2,8, "T4: ");
in2string (d);
ch (2,12,"T5:");
//in2string (m);
do {
if (Button(&PORTD, 2, 1, 0)) { // Detect logical one
delay_ms(120);
break;
}
} while (1);
READY:
Lcd_Cmd(_LCD_CLEAR);
Lcd_Out(1,1, "Ready");
aff ();
do {
if (Button(&PORTD, 2, 1, 0)) { // Detect logical one
delay_ms(120);
break;
}
if (Button(&PORTD, 3, 1, 0)) { // Detect logical one
delay_ms(120);
goto START;
}
} while (1);
Lcd_Cmd(_LCD_CLEAR);
Lcd_Out(1,1, "EN COUR");
e=a*100;
f=b*100;
g=c*100;
h=d*100;
// n=m*100;
PORTC=0x01;
for (i=0;i<e;i++)
{ delay_ms(4); }
PORTC=0x02;
for (i=0;i<f;i++)
{delay_ms(4);}
PORTC=0x04;
for (i=0;i<g;i++)
{delay_ms(4);}
PORTC=0x00;
delay_ms(100);
PORTC=0x44;
for (i=0;i<h;i++)
{delay_ms(4); }
/*PORTC=0x02;
delay_ms(100);*/
/*PORTC=0x80;
for (i=0;i<2;i++)
{delay_ms(4); }*/
PORTC=0x00;
goto READY;
}
j'ai mis le 5eme temps qui ne fonctionne pas en commantaire
Et je ne connais toujours pas comment faire un bon chois de pic