Bienvenue aux nouveaux arrivants sur FantasPic !

- Pensez à lire les règles durant votre visite, il n'y en a pas beaucoup, mais encore faut-il les respecter .
- N’hésitez pas à faire des remarques et/ou suggestions sur le Forum, dans le but de l'améliorer et de rendre vos prochaines visites plus agréables.
- Vous pouvez regarder votre "panneau de l'utilisateur" afin de configurer vos préférences.
- Un passage par "l'utilisation du forum" est recommandé pour connaître les fonctionnalités du forum.

--- L’équipe FantasPic ---
Forum général sur le langage C !

Modérateur : Jérémy

Hygromètre à PIC
paulfjujo
Avatar de l’utilisateur
Maître
Maître
Messages : 3161
Âge : 74
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#51 Message par paulfjujo » mer. 24 juil. 2024 12:16

Bonjour Alain,

Alain a écrit : ...message qui s'affiche.


Quel message ?

Alain a écrit :en alternance avec quoi ?


avec quelle configuration hardware RB3-RB6 ou RB4-RB7
et toujours avec R/W du LCD au Gnd

nota:
en tout debut de programme j'affiche ces 2 lignes

Code : Tout sélectionner

    Lcd_Cmd(_LCD_CLEAR);               // Clear display
    Lcd_Cmd(_LCD_CURSOR_OFF);
     strConstRamCpy(Texte,"DHT22 16F84 8MHz");
    Lcd_Out(1,1,Texte);
   strConstRamCpy(Texte,  "MikroC 7.60 Free");
    Lcd_Out(2,1,Texte);



si le message " Checksum Error" s'affiche
c'est que la mesure DHT22 est erronnée !

Code : Tout sélectionner

}
else 
       
{
           strConstRamCpy(Texte,"Checksum Error!");
           Lcd_Out(2,1,Texte);
        }


la seule contre mesure que je peux proposer est d'augmenter le delai inter-mesures
passé à 1500mS ..bien que ça fonctionne sur le mien avec 500mS

fichiers dans le zip
_16F84_DHT22_LCD_RB3_RB6_178_1500mS_2024-0724.hex
_16F84_DHT22_LCD_RB4_RB7_178_1500mS_2024-0724.hex
_16F84_DHT22_LCD2x16_MC.c

source commun aux 3 versions
..via usage compilation conditionnelle de :

// #define RETRAITE128 pour mon LCD (Degre =223)
//#define With_RB3_RB6 // donc sur RB4-RB7

#define RETRAITE128 pour le tien (degre=178)
//#define With_RB3_RB6 // donc sur RB4-RB7

#define RETRAITE128 pour le tien (degre=178)
#define With_RB3_RB6 // donc sur RB3-RB6

4em possibilité non utilisée
// #define RETRAITE128 pour le tien (LCD en RB3-RB6)
#define With_RB3_RB6

_16F84_DHT22_LCD_2024_0724.zip
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Aide toi, le ciel ou FantasPic t'aidera

Hygromètre à PIC
RETRAITE128
Débutant
Débutant
Messages : 97
Enregistré en : août 2021

#52 Message par RETRAITE128 » ven. 26 juil. 2024 17:01

Bonjour Paul,

Merci pour tout ça, je teste cela au plus vite quand la forme sera meilleure, et sur nouveaux typons, désolé.

Cordialement,

Alain

Hygromètre à PIC
RETRAITE128
Débutant
Débutant
Messages : 97
Enregistré en : août 2021

#53 Message par RETRAITE128 » dim. 28 juil. 2024 16:13

Bonjour Paul,

Je viens de finir mon typon pour la version RB4-RB7.
En utilisant les deux derniers fichiers, dans la version RB3-RB6 ça a l'aire de fonctionner, par contre pour la version RB4-RB7 j'ai le premier message qui apparait avec vos coordonnées puis immédiatement "Time Out" puis plus rien d'autre.

Voila les dernières nouvelles

Cordialement,

Alain

Hygromètre à PIC
paulfjujo
Avatar de l’utilisateur
Maître
Maître
Messages : 3161
Âge : 74
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#54 Message par paulfjujo » dim. 28 juil. 2024 19:42

avec le meme capteur AM2302 sur le version RB4-RB7, ou un autre capteur ?

si l'affichage du message est OK ..la commande LCD est OK
Apres , Probleme de capteur ou pas ?
C'est le meme soft pour le capteur

checking:
apres comparaison entre 2 fenetre texte ..le bug apparait
bug_here.jpg


_16F84_DHT22_LCD_2024_RB4-RB7.zip


:sifflotte: c'est laborieux ..mais on va peut etre en finir .
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Aide toi, le ciel ou FantasPic t'aidera

Hygromètre à PIC
RETRAITE128
Débutant
Débutant
Messages : 97
Enregistré en : août 2021

#55 Message par RETRAITE128 » lun. 5 août 2024 15:32

Bonjour Paul,

Je réponds un peu tardivement, quand les soins m'en laissent le temps, désolé.

J'ai trouvé le souci, il s'agissait du PIC qui n'interrogeait pas le capteur, une fois changé ça fonctionne.

J'ai toujours le soucis "Checksum error" sur la version RB3-RB6, mais pas de souci je garderai celle qui fonctionne en RB4-RB7.

Si vous le souhaitez, je peux vous faire parvenir un calque du typon, qui n'est pas plus grand que la taille de l'afficheur.

Encore mille merci pour cette aide, portez vous bien.

COrdialement,

Alain

Hygromètre à PIC
paulfjujo
Avatar de l’utilisateur
Maître
Maître
Messages : 3161
Âge : 74
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#56 Message par paulfjujo » mar. 6 août 2024 08:08

Bonjour Alain,


une derniere cartouche à essayer pour la version RB3-RB6 :
j'ai doublé la duree du TimeOut ....

je t'envoie , en même temps , de bonnes ondes bénéfiques...

Paul

_16F84_DHT22_LCD_RB3_RB6_178_1500mS_200_2024-0806_MC.zip
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Aide toi, le ciel ou FantasPic t'aidera

Hygromètre à PIC
RETRAITE128
Débutant
Débutant
Messages : 97
Enregistré en : août 2021

#57 Message par RETRAITE128 » mar. 20 août 2024 11:01

Bonjour paulfjujo,

Les effets secondaires sont terribles, je profite d'un instant pour vous remercier pour toutes vos recherches.

Le dernier fichier ne change rien, je vais donc conserver la version RB4-RB7.

J'attends de passer une commande pour avoir mes entretoises de fixation de la carte à l'afficheur LCD, je vous enverrai des photos une fois fini.

Comme je vous l'avais dit, si une copie du typon peu vous intéresser, faites moi signe, ce sera avec plaisir.

Merci pour les bonnes ondes...

Cordialement,

Alain

Hygromètre à PIC
RETRAITE128
Débutant
Débutant
Messages : 97
Enregistré en : août 2021

#58 Message par RETRAITE128 » jeu. 10 avr. 2025 20:55

Bonsoir à tous,

Je reviens vers vous pour un petit service.
J'ai le fameux programme qui fonctionne super, mais avec les afficheurs dont je dispose il faut utiliser un autre code pour la symbole degré.

Pour cela j'aurais besoin que vous puissiez me compiler ce programme pour obtenir le fichier .hex s'il vous plaît.

Code : Tout sélectionner

// Interfacing PIC16F84A with DHT22(AM2302,RHT03) sensor CCS C code

//LCD module connections
#define LCD_RS_PIN PIN_B0
#define LCD_RW_PIN PIN_B1
#define LCD_ENABLE_PIN PIN_B2
#define LCD_DATA4 PIN_B3
#define LCD_DATA5 PIN_B4
#define LCD_DATA6 PIN_B5
#define LCD_DATA7 PIN_B6
//End LCD module connections

#include <16F84A.h>
#fuses HS,NOWDT,PUT,NOPROTECT
#use delay(clock = 8000000)
#include <lcd.c>
#use fast_io(A)
// Connection pin between PIC16F84A and DHT22 sensor
#BIT Data_Pin = 0x05.0                       // Pin mapped to PORTA.0
#BIT Data_Pin_Direction = 0x85.0             // Pin direction mapped to TRISA.0

char message1[] = "Temp = 00.0 C";
char message2[] = "RH   = 00.0 %";
short Time_out ;
unsigned int8 T_byte1T_byte2RH_byte1RH_byte2CheckSum;
unsigned int16 TempRH;
void start_signal(){
  
Data_Pin_Direction 0;              // Configure connection pin as output
  
Data_Pin 0;                        // Connection pin output low
  
delay_ms(25);
  
Data_Pin 1;                        // Connection pin output high
  
delay_us(30);
  
Data_Pin_Direction 1;              // Configure connection pin as input
}
short check_response(){
  
delay_us(40);
  if(!
Data_Pin){                     // Read and test if connection pin is low
    
delay_us(80);
    if(
Data_Pin){                    // Read and test if connection pin is high
      
delay_us(50);
      return 
1;}
    }
}
unsigned int8 Read_Data(){
  
unsigned int8 ik_data 0;     // k is used to count 1 bit reading duration
  
if(Time_out)
    break;
  for(
08i++){ 0; while(!Data_Pin){ // Wait until pin goes high k++; if (k > 100) {Time_out = 1; break;}
      
delay_us(1);}
    
delay_us(30);
    if(!
Data_Pin)
      
bit_clear(_data, (i));               // Clear bit (7 - i)
    
else{
      
bit_set(_data, (i));                 // Set bit (7 - i)
      
while(Data_Pin){                         // Wait until pin goes low
      
k++;
      if (
100) {Time_out 1; break;}
      
delay_us(1);}
    }
  }
  return 
_data;
}
void main(){
  
lcd_init();                                 // Initialize LCD module
  
lcd_putc('\f');                             // LCD clear 
  
while(TRUE){
    
delay_ms(1000);
    
Time_out 0;
    
Start_signal();
    if(
check_response()){                    // If there is response from sensor
      
RH_byte1 Read_Data();                 // read RH byte1
      
RH_byte2 Read_Data();                 // read RH byte2
      
T_byte1 Read_Data();                  // read T byte1
      
T_byte2 Read_Data();                  // read T byte2
      
Checksum Read_Data();                 // read checksum
      
if(Time_out){                           // If reading takes long time
        
lcd_putc('\f');                       // LCD clear
        
lcd_gotoxy(51);                     // Go to column 5 row 1
        
lcd_putc("Time out!");
      }
      else{
       if(
CheckSum == ((RH_Byte1 RH_Byte2 T_Byte1 T_Byte2) & 0xFF)){
        
RH RH_byte1;
        
RH = (RH << 8) | RH_byte2;
        
Temp T_byte1;
        
Temp = (Temp << 8) | T_byte2; if (Temp 0x8000){
         
message1[6] = '-';
         
Temp Temp 0x7FFF; }
        else
         
message1[6] = ' ';
        
message1[7]  = (Temp 100) % 10  48;
        
message1[8]  = (Temp 10) % 10  48;
        
message1[10] = Temp 10  48;
        
message2[7]  = (RH 100) % 10 48;
        
message2[8]  = (RH 10) % 10 48;
        
message2[10] = RH 10 48;
        
//message1[11] = 178;  
        
message1[12] = 223;                   // Degree symbol
        
lcd_putc('\f');                       // LCD clear    
        
lcd_gotoxy(11);                     // Go to column 1 row 1
        
printf(lcd_putcmessage1);           // Display message1
        
lcd_gotoxy(12);                     // Go to column 1 row 2
        
printf(lcd_putcmessage2);           // Display message2
       
}
        else {
          
lcd_putc('\f');                     // LCD clear
          
lcd_gotoxy(11);                   // Go to column 1 row 1
          
lcd_putc("Checksum Error!");
        }
      }
    }
    else {
      
lcd_putc('\f');             // LCD clear
      
lcd_gotoxy(31);           // Go to column 3 row 1
      
lcd_putc("No response");
      
lcd_gotoxy(12);           // Go to column 1 row 2
      
lcd_putc("from the sensor");
    }
  }


Merci par avance.
Alain

Hygromètre à PIC
paulfjujo
Avatar de l’utilisateur
Maître
Maître
Messages : 3161
Âge : 74
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#59 Message par paulfjujo » ven. 11 avr. 2025 09:57

bonjour,

comme on ne connait pas la table de codage ascii de TON LCD,
il faut utiliser un caractere personnalisé programmable
on peut en disposer de 8 ..

definition du degré

const char LCD_Custom_Chars_Degre={
0x0E,0x0A,0x0E,0x00,0x00,0x00,0x00,0x00 // Degre celcius
};

rangement dans la zone
prevue à c et effet

// Set address counter pointing to CGRAM address 0.
LCD_Cmd(0x48); // 0x40 +8 !
__delay_ms(25);
// Load custom lcd character data into CGRAM +8.
// It can only hold a maximum of 8 custom characters.
for(i =0; i <8; i++)
{
LCD_Data(LCD_Custom_Chars_Degre[i]);
}
LCD_Cmd(0x80);
__delay_ms(10);


ensuite on appelera le caractere de code 1 ..pour le 1er caractere personalisé Degré

nota: le choix 0 peut amener une problematique avec printf , car 0 ,c'est aussi le code fin de string.

je teste d'abord cette modif..

Code : Tout sélectionner



  else
         message1
[6] = ' ';
        message1[7]  = (Temp / 100) % 10  + 48;
        message1[8]  = (Temp / 10) % 10  + 48;
        message1[10] = Temp % 10  + 48;
        message2[7]  = (RH / 100) % 10 + 48;
        message2[8]  = (RH / 10) % 10 + 48;
        message2[10] = RH % 10 + 48;
        message1[11] = 1;  // symbole degre °
        message1[12] ='C';                
        lcd_putc
('\f');                       // LCD clear    
        lcd_gotoxy(1, 1);                     // Go to column 1 row 1
        printf(lcd_putc, message1);           // Display message1
        lcd_gotoxy(1, 2);                     // Go to column 1 row 2
        printf(lcd_putc, message2);           // Display message2
       }




pour preparer le *.hex


:!!: avec MPLABX IDE et XC8 , le rajout de code ne passe plus !
pas assez d' espace CODE dispo ....
d'autant que XC8 n'est pas optimisé ...
et que le code presenté est en CCS et non en XC8

:!!: je ne peux donc pas le compiler et tester ....
mais lm'idée est bien d'utiliser un caractere programmable du LCD
( à moins qu'avec la doc du LCD, le caractere °existe dans la table en ROM du LCD..)
voir datasheet du LCD.
Aide toi, le ciel ou FantasPic t'aidera

Hygromètre à PIC
RETRAITE128
Débutant
Débutant
Messages : 97
Enregistré en : août 2021

#60 Message par RETRAITE128 » ven. 11 avr. 2025 11:52

Bonjour,
Merci pour votre réponse.

Le code est dans le programme :

//message1[11] = 178;
message1[12] = 223;

Comme j'ai deux type d'afficheurs, il y a deux codes, soit 178 ou 223.
C'est pourquoi celui de 178 est inactif ici.
Dans ces conditions, est-il possible d'avoir le fichier .hex svp ?

Cordialement,

Alain


Retourner vers « Langage C »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 22 invités