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 ---
- 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 ---
Modérateur : Jérémy
Hygromètre à PIC
- paulfjujo
Maître- Messages : 3161
- Âge : 74
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
Bonjour Alain,
Quel message ?
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
si le message " Checksum Error" s'affiche
c'est que la mesure DHT22 est erronnée !
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
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
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Hygromètre à PIC
-
RETRAITE128
Débutant- Messages : 97
- Enregistré en : août 2021
Hygromètre à PIC
-
RETRAITE128
Débutant- Messages : 97
- Enregistré en : août 2021
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
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
Maître- Messages : 3161
- Âge : 74
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
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
c'est laborieux ..mais on va peut etre en finir .
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

Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Hygromètre à PIC
-
RETRAITE128
Débutant- Messages : 97
- Enregistré en : août 2021
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
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
Hygromètre à PIC
-
RETRAITE128
Débutant- Messages : 97
- Enregistré en : août 2021
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
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- Messages : 97
- Enregistré en : août 2021
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.
Merci par avance.
Alain
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_byte1, T_byte2, RH_byte1, RH_byte2, CheckSum;
unsigned int16 Temp, RH;
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 i, k, _data = 0; // k is used to count 1 bit reading duration
if(Time_out)
break;
for(i = 0; i < 8; i++){ k = 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, (7 - i)); // Clear bit (7 - i)
else{
bit_set(_data, (7 - i)); // Set bit (7 - i)
while(Data_Pin){ // Wait until pin goes low
k++;
if (k > 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(5, 1); // 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(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
}
else {
lcd_putc('\f'); // LCD clear
lcd_gotoxy(1, 1); // Go to column 1 row 1
lcd_putc("Checksum Error!");
}
}
}
else {
lcd_putc('\f'); // LCD clear
lcd_gotoxy(3, 1); // Go to column 3 row 1
lcd_putc("No response");
lcd_gotoxy(1, 2); // Go to column 1 row 2
lcd_putc("from the sensor");
}
}
}
Merci par avance.
Alain
Hygromètre à PIC
- paulfjujo
Maître- Messages : 3161
- Âge : 74
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
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..
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.
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

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

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.
Hygromètre à PIC
-
RETRAITE128
Débutant- Messages : 97
- Enregistré en : août 2021
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
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
Qui est en ligne
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 22 invités