Je ne suis pas un expert dans la programmation de pic, et pour tout dire c'est même mon premier projet "complet", donc soyez indulgent si ma question est bête comme bonjour
Bon voilà, je suis en train de réaliser une mini station météo pour mon papa. le besoin est simple:
Affichage des températures avec 2 sondes (DS18B20)
Affichage de la vitesse du vent (signal front haut qui m'arrive d'un autre système).
J'ai programmé avec le compilateur mikroC pro, et j'ai utiliser la carte de développement EasypicV7. Jusque là, tout va bien.
Afin d'être plus clair, je joins le schéma ISIS ainsi que le code MikroC.
Donc sur ma carte tout est ok, et le programme fonctionne super bien.
Je me suis donc mis au soudage...et là soucis,on dirait que mon pic ne démarre pas rien ne se passe....
Quelqu'un aurait une piste????
merci d'avance
Code : Tout sélectionner
// LCD module connections
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;
// End LCD module connections
void Init_Device();
void vent(int *cond,unsigned *VentValue,char );
void temperature(int *cond,unsigned *temperatureValue,char ) ;
void luminosite(int *cond,unsigned *LumiValue,char );
unsigned Sensor();
void nextMenu();
// Set TEMP_RESOLUTION to the corresponding resolution of used DS18x20 sensor:
// 18S20: 9 (default setting; can be 9,10,11,or 12)
// 18B20: 12
const unsigned short TEMP_RESOLUTION = 12;
const unsigned short RES_SHIFT = TEMP_RESOLUTION - 8;
const unsigned short VREF = 5;
const unsigned short LCD_FREQUENCE = 100;
unsigned int BP=0;
const unsigned short MENU_MAX_ID = 6;
unsigned short FACTOR_SPEED = 1;
unsigned TCu_Temp; //current deg
unsigned THi_Temp = 0xFC90; //-55 deg
unsigned TLo_Temp = 0x07D0; //125 deg
unsigned TCu_Freq; //Frequence
unsigned THi_Freq; //Frequence Max
unsigned TCu_Lumi = 0x00; //Luminosite en %
void Init_Device(){
PORTB = 0; // All PORTB pins are cleared
PORTA = 0x00; // All PORTA pins are cleared
TRISA = 0b00010100; // ques des sorties sauf RA4 en input du timer0 et RA2 en analogique
TRISB = 0b10000000; // All PORTB pins except PORTB.1 are configured as outputs
ANSEL = 0b00000100; // RA2/AN2 is analog input
//ADCON0 = 0b00001000; // Analog channel select @ AN2 -
ANSELH = 0; // Configure other AN pins as digital I/O
C1ON_bit = 0; // Disable comparators
C2ON_bit = 0;
INTCON =0b00000100;
OPTION_REG = 0b10101111; //0b00101000; // TOCS=1 for Counter mode, PSA=1 for 1:1 prescaler
}
unsigned Sensor(){
unsigned Sensor_Tmp;
Ow_Reset(&PORTE, 2); // Onewire reset signal
Ow_Write(&PORTE, 2, 0xCC); // Issue command SKIP_ROM
Ow_Write(&PORTE, 2, 0x44); // Issue command CONVERT_T
Delay_us(120);
Ow_Reset(&PORTE, 2);
Ow_Write(&PORTE, 2, 0xCC); // Issue command SKIP_ROM
Ow_Write(&PORTE, 2, 0xBE); // Issue command READ_SCRATCHPAD
Sensor_Tmp = Ow_Read(&PORTE, 2);
Sensor_Tmp = (Ow_Read(&PORTE, 2) << 8) + Sensor_Tmp;
return (Sensor_Tmp);
}
void temperature(int *cond,unsigned *temperatureValue,char temptxt[]){
unsigned int temp2write;
char temp_whole;
unsigned int temp_fraction;
char *temp = " 00.0";
temp2write=*temperatureValue;
if (temp2write & 0x8000) {
temp[0] = '-';
temp2write = ~temp2write + 1;
}
temp_whole = temp2write >> RES_SHIFT ;
if (temp_whole/100)
temp[0] = temp_whole/100 + 48;
else
temp[0] = ' ';
temp[1] = (temp_whole/10)%10 + 48; // Extract tens digit
temp[2] = temp_whole%10 + 48; // Extract ones digit
temp_fraction = temp2write << (4-RES_SHIFT);
temp_fraction &= 0x000F;
temp_fraction *= 625;
temp[4] = temp_fraction/1000 + 48; // Extract thousands digit
if(*cond==LCD_FREQUENCE) //Appel la fonction LCD tous les 100
{
Lcd_Out(1,1, temptxt);
Lcd_Out(2, 10, temp);
Lcd_Chr(2,15,178); // Print degree rond // If you see greek alpha letter try typing 178 instead of 223
Lcd_Chr(2,16,'C'); // Print degree character, 'C' for Centigrades
*cond=0;//Remise a 0 de la condition
}
}
void vent(int *cond,unsigned *VentValue,char temptxt1[]){
unsigned int temp2write;
char temp_whole;
unsigned int temp_fraction;
char *temp = "000.0";
temp2write=*VentValue;
if (temp2write & 0x8000) {
temp[0] = '-';
temp2write = ~temp2write + 1;
}
temp_whole = temp2write >> RES_SHIFT ;
if (temp_whole/100)
temp[0] = temp_whole/100 + 48;
else
temp[0] = ' ';
temp[1] = (temp_whole/10)%10 + 48; // Extract tens digit
temp[2] = temp_whole%10 + 48; // Extract ones digit
temp_fraction = temp2write << (4-RES_SHIFT);
temp_fraction &= 0x000F;
temp_fraction *= 625;
temp[4] = temp_fraction/1000 + 48; // Extract thousands digit
if(*cond==LCD_FREQUENCE) //Appel la fonction LCD tous les 100
{
Lcd_Out(1,1, temptxt1);
Lcd_Out(2, 10, " ");
Lcd_Out(2, 12, temp);
*cond=0;//Remise a 0 de la condition
TMR0=0;
}
}
void luminosite(int *cond,unsigned *LumiValue, char temptxt2[]){
unsigned long temp_Lumi;
unsigned int temp2voltage;
char txtvoltage[7];
temp_Lumi = *LumiValue ;
temp2voltage = temp_Lumi; //((temp_Lumi*(VREF*10))/1024)*2; // *5.0/1024.0
if(*cond==LCD_FREQUENCE) //Appel la fonction LCD tous les 100
{
IntToStr(temp2voltage, txtvoltage);
Lcd_Out(1,1, temptxt2);
Lcd_Out(2,10,txtvoltage);
Lcd_Chr(2,16,'%'); // Print degree character, 'C' for Centigrades
delay_ms(150);
*cond=0;//Remise a 0 de la condition
}
}
void nextMenu(){
if(PORTB.F7=1) {
BP++;
Lcd_Cmd(_Lcd_CLEAR);
Delay_ms(250);
}
if(BP==MENU_MAX_ID) BP=0;
}
void main() {
char strTemperatureCu[]= "Temperature ";
char strTemperatureLo[]= "Temperature min ";
char strTemperatureHi[]= "Temperature max ";
char strVitesseVentCu[]= "Vitesse vent kmh";
char strVitesseVentHi[]= "Rafale vent kmh";
char strLuminositeCu[] = "Reglage anemo. ";
int cond=0; //Condition pour l'affichage sur l'�cran LCD
Init_Device();
Lcd_Init(); //initialisation du LCD
Lcd_Cmd(_Lcd_CURSOR_OFF); //Enleve le curseur
Lcd_Cmd(_Lcd_CLEAR);
TMR0=0;
THi_Freq = 0;
while(1){
TCu_Lumi = ((ADC_Read(2)*(VREF*10))/1024)*2 ;
FACTOR_SPEED = TCu_Lumi;
TCu_Freq = (((TMR0)*FACTOR_SPEED));
if ((~TMR0IF)&&(THi_Freq<TCu_Freq)&&(BP==3)) THi_Freq=TCu_Freq;
TCu_Temp = Sensor();
if((int)TCu_Temp > (int)THi_Temp) THi_Temp = TCu_Temp;
if((int)TLo_Temp > (int)TCu_Temp) TLo_Temp = TCu_Temp;
cond=cond+1;//Incr�mente la variable cond
switch(BP) {
case 0:
temperature(&cond,&TCu_Temp,strTemperatureCu);//Appel la fonction temp�rature
nextMenu();
break;
case 1:
temperature(&cond,&TLo_Temp,strTemperatureLo);//Appel la fonction temp�rature
nextMenu();
break;
case 2:
temperature(&cond,&THi_Temp,strTemperatureHi);//Appel la fonction temp�rature
nextMenu();
TMR0=0;
break;
case 3:
vent(&cond,&TCu_Freq,strVitesseVentCu);
nextMenu();
break;
case 4:
vent(&cond,&THi_Freq,strVitesseVentHi);
nextMenu();
break;
case 5:
luminosite(&cond,&TCu_Lumi,strLuminositeCu);
nextMenu();
break;
}
}
}



