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 : 3182
- Âge : 74
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
je confirme
test avec MikroC 7.60 Free (limité à 2Ko) , SANS ma clé USB Mikroc PRO !
compilation et résultat OK ...
nota : test avec option RB4-RB7 data bus pour LCD.
Loading code from C:\_MikroC\_MesProjets_MikroC\_16F84_DHT22_LCD_2024\_16F84_DHT22_LCD_RB4-RB7_2024-0717_Free_MC_OK.hex...
2024-07-17 19:00:26 +0200 - Hex file loaded successfully.
2024-07-17 19:00:30 +0200 - Programming...
*****************************************************
Calculating memory ranges for operation...
Erasing...
The following memory area(s) will be programmed:
program memory: start address = 0x0, end address = 0x39b
configuration memory
EEData memory
Programming/Verify complete
2024-07-17 19:00:51 +0200 - Programming complete
testé avec version RB4-RB7
test avec MikroC 7.60 Free (limité à 2Ko) , SANS ma clé USB Mikroc PRO !
compilation et résultat OK ...
nota : test avec option RB4-RB7 data bus pour LCD.
Loading code from C:\_MikroC\_MesProjets_MikroC\_16F84_DHT22_LCD_2024\_16F84_DHT22_LCD_RB4-RB7_2024-0717_Free_MC_OK.hex...
2024-07-17 19:00:26 +0200 - Hex file loaded successfully.
2024-07-17 19:00:30 +0200 - Programming...
*****************************************************
Calculating memory ranges for operation...
Erasing...
The following memory area(s) will be programmed:
program memory: start address = 0x0, end address = 0x39b
configuration memory
EEData memory
Programming/Verify complete
2024-07-17 19:00:51 +0200 - Programming complete
testé avec version RB4-RB7
Code : Tout sélectionner
[attachment=0]Capture_mikroC_free.JPG[/attachment]
//ac:pinout
//ac:DHT22
//MikroC et 16F84
// C:\_MikroC\_MesProjets_MikroC\_16F84_DHT22_UART3_9600bds
// P16F84_4MHz_blueBird_board.cfgsch
// P16F84_8MHz.cfgsch (sur mini breadbboard orange )
// CONFIG : $2007 : 0x3FF1
// 16F84 # 84-0045-04
// Resonateur 4Mhz sur platine de test BlueBoard-Electronics Farnell 527-646
// sortie TX sur RA2
// sortie Led sur RA3
// signal DHT22 sur RA0
// ICProgr + POK508 programmateur (alim POK508 + TU59 DB8<-> USB COM2
// nota: prends ENORMEMENT de temps à programmer !! > 5minutes
// sur breadboard Q=8MHz 16F84 0130G38-20
// EEPROM PIC : _16F84_DHT22_UART3_9600bds_2024_0712.ihex
#define VERSION "2024-0712"
#define CR 13
#define LF 10
#define LED_Dir TRISA.RA3
#define LED PORTA.RA3
#define bit_set(var,bitno) ((var) |= 1 << (bitno))
#define bit_clear(var,bitno) ((var) &= ~(1 << (bitno)))
#define DHT22_Pin PORTA.RA0
#define DHT22_Pin_Dir TRISA.RA0
// Lcd pinout settings
// Special RETRAITE128 FANTASPIC
// https://fantaspic.fr/viewtopic.php?f=10&p=22172#p22172
sbit LCD_RS_Direction at TRISB0_bit;
sbit LCD_RW_Direction at TRISB1_bit;
sbit LCD_EN_Direction at TRISB2_bit;
sbit LCD_RS at RB0_bit;
sbit LCD_RW at RB1_bit;
sbit LCD_EN at RB2_bit;
//#define RETRAITE128 // <------ ligne mise en commentaire donc choix version RB4-RB7
// <------enlever le // commentaire sur ligne au dessus pour version RB3-RB6
#ifdef RETRAITE128
sbit LCD_D7 at RB6_bit;
sbit LCD_D6 at RB5_bit;
sbit LCD_D5 at RB4_bit;
sbit LCD_D4 at RB3_bit;
#else
// Lcd pinout settings standard
sbit LCD_D7 at RB7_bit;
sbit LCD_D6 at RB6_bit;
sbit LCD_D5 at RB5_bit;
sbit LCD_D4 at RB4_bit;
#endif
// Special RETRAITE128 FANTASPIC
#ifdef RETRAITE128
// Pin direction
// LCD 4x20 mode 4 bits MSB 4 bits data LSB -> Gnd
// pin 1 ....2....3.....4.....5....6....x...x...x...x...11...12...13....14
// Gnd +Vcc Vd RB0 RB1 RB2 Gnd Gnd Gnd Gnd RB3 RB4 RB5 RB6.
// retro eclairage 15=A->+Vcc 16=K R 390 ohms->Gnd/
// contraste fixe Pin 3 R=4.7K vers Gnd
sbit LCD_D7_Direction at TRISB6_bit;
sbit LCD_D6_Direction at TRISB5_bit;
sbit LCD_D5_Direction at TRISB4_bit;
sbit LCD_D4_Direction at TRISB3_bit;
#else
// Pin direction
// LCD 4x20 mode 4 bits MSB 4 bits data LSB -> Gnd
// pin 1 ....2....3.. 4.....5....6....x...x...x...x...11..12...13..14
// Gnd +Vcc Vd RB0 RB1 RB2 Gnd Gnd Gnd Gnd RB4 RB5 RB6 RB7
// retro eclairage 15=A->+Vcc 16=K R 390 ->Gnd/
// standard
sbit LCD_D7_Direction at TRISB7_bit;
sbit LCD_D6_Direction at TRISB6_bit;
sbit LCD_D5_Direction at TRISB5_bit;
sbit LCD_D4_Direction at TRISB4_bit;
#endif
char Texte[18];
int i,j,k;
unsigned char Time_out ;
unsigned char T_byte1, T_byte2, RH_byte1, RH_byte2, CheckSum ;
unsigned int Temp, RH;
void Start_signal(void);
char check_response(void);
unsigned char Read_Donnee(void);
void strConstRamCpy(unsigned char *dest, const char *source);
void Delai()
{
Delay_ms(500);
}
void Start_signal()
{
DHT22_Pin_Dir = 0; // Configure connection pin as output
DHT22_Pin = 0; // Connection pin output low
Delay_ms(25);
DHT22_Pin = 1; // Connection pin output high
Delay_us(30);
DHT22_Pin_Dir = 1; // Configure connection pin as input
}
char check_response()
{
Delay_us(40);
if(DHT22_Pin==0)
{ // Read and test if connection pin is low
Delay_us(80);
if(DHT22_Pin==1)
{ // Read and test if connection pin is high
Delay_us(50);
return 1;
}
}
}
unsigned char Read_Donnee()
{
unsigned char i, k, value; // k is used to count 1 bit reading duration
value=0;
Time_out=0;
for(i = 0; i < 8; i++)
{ k = 0;
while( PORTA.B0==0)
{ k++;
if (k > 100)
{Time_out = 1;
break;
}
Delay_us(1);
}
Delay_us(30);
if( PORTA.B0==0)
bit_clear(value, (7 - i)); // Clear bit (7 - i)
else
{
bit_set(value, (7 - i)); // Set bit (7 - i)
k=0;
while( PORTA.B0==1)
{ // Wait until pin goes low
k++;
if (k > 100)
{Time_out = 1;
break;
}
Delay_us(1);
}
}
}
return (value);
}
void strConstRamCpy(unsigned char *dest, const char *source)
{ // --- Copie le texte depuis FLASH ROM vers RAM
while (*(source)>0)
{
*dest++ = *source++ ;
}
*dest = 0 ; // terminateur
}
void main()
{
TRISB = 0b00000000 ; // RB0,RB1,RB2 inputs RB3,RB4=sorties RB6,RB7 =entrees
TRISA = 0b00000001 ; // RA0,RA1 = Input RA2=TX ouput RA3=Sortie Led RA5..RA7=Entrees
LCD_RW_Direction=0;
LCD_RW=0;
//INTCON=0;
PORTA=0;
DHT22_Pin_Dir=0;
DHT22_Pin=0;
LED_Dir=0;
LED=0;
// Time_out=0;
for(i=0;i<6;i++)
{
LED=0;
Delai() ;
LED=1;
Delai() ;
}
Lcd_Init();
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);
// strConstRamCpy(Texte, "Version 17-07-24");
// Lcd_Out(3,1,Texte);
Delai() ; Delai() ;
Lcd_Cmd(_LCD_CLEAR);
while(1)
{
Start_signal();
// Lcd_Out_CP('1');
if(check_response())
{ // If there is response from sensor
RH_byte1 = Read_Donnee(); // read RH byte1
RH_byte2 = Read_Donnee(); // read RH byte2
T_byte1 = Read_Donnee(); // read T byte1
T_byte2 = Read_Donnee(); // read T byte2
CheckSum = Read_Donnee(); // read checksum
if(Time_out){ // If reading takes long time
strConstRamCpy(Texte,"Time out!");
Lcd_Out(1,1,Texte);
}
else
{
if(CheckSum == ((RH_byte1 + RH_byte2 + T_byte1 + T_byte2) & 0xFF))
{
strConstRamCpy(Texte,"Temp = 00.0 C ");
RH = RH_byte1;
RH = (RH << 8) | RH_byte2;
Temp = T_byte1;
Temp = (Temp << 8) | T_byte2;
if (Temp > 0x8000)
{
Texte[6] = '-';
Temp = Temp & 0x7FFF;
}
else
Texte[6] = ' ';
Texte[7] = (Temp / 100) % 10 + 48;
Texte[8] = (Temp / 10) % 10 + 48;
Texte[10] = Temp % 10 + 48;
Texte[11] = 223; // Degree symbol
Lcd_Out(1,1,Texte);
strConstRamCpy(Texte,"RH = 00.0 % ");
Texte[7] = (RH / 100) % 10 + 48;
Texte[8] = (RH / 10) % 10 + 48;
Texte[10] = RH % 10 + 48;
Lcd_Out(2,1,Texte);
}
else
{
strConstRamCpy(Texte,"Checksum Error!");
Lcd_Out(2,1,Texte);
}
}
}
else
{
strConstRamCpy(Texte,"Pas de reponse..");
Lcd_Out(2,1,Texte);
Delai() ;
}
Delai() ;
}
}
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,
Désolé de répondre si tard, mais comme je vous l'ai dit message privé, mon traitement ne me laisse que peu de temps et d'esprit clair.
Pour cela pourriez-vous me fournir le fichier seul en HEX de la version RB4-RB7.
Les afficheurs dont je dispose affiche en lieu et place du caractère degrés ° (code 178) le caractère Alpha (code 228)
Je sais faire cette modification en ASM mais pas en langage C, merci par avance.
Très cordialement,
Alain
Désolé de répondre si tard, mais comme je vous l'ai dit message privé, mon traitement ne me laisse que peu de temps et d'esprit clair.
Pour cela pourriez-vous me fournir le fichier seul en HEX de la version RB4-RB7.
Les afficheurs dont je dispose affiche en lieu et place du caractère degrés ° (code 178) le caractère Alpha (code 228)
Je sais faire cette modification en ASM mais pas en langage C, merci par avance.
Très cordialement,
Alain
Hygromètre à PIC
- paulfjujo
Maître- Messages : 3182
- Âge : 74
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
bonjour Alain,
petit probleme car
j'utilise le code 223
ici dans le programme en C
Texte[11] = 223; // Degree symbol
et non 228
erreur de typo ?
faut-il que je mette 178 à la place de 223 ?
source et hex modifié pour code 178 (sigle ° temperature)
petit probleme car
Code : Tout sélectionner
strConstRamCpy(Texte,"Temp = 00.0 C ");
RH = RH_byte1;
RH = (RH << 8) | RH_byte2;
Temp = T_byte1;
Temp = (Temp << 8) | T_byte2;
if (Temp > 0x8000)
{
Texte[6] = '-';
Temp = Temp & 0x7FFF;
}
else
Texte[6] = ' ';
Texte[7] = (Temp / 100) % 10 + 48;
Texte[8] = (Temp / 10) % 10 + 48;
Texte[10] = Temp % 10 + 48;
Texte[11] = 223; // Degree symbol
Lcd_Out(1,1,Texte);
j'utilise le code 223
ici dans le programme en C
Texte[11] = 223; // Degree symbol
et non 228
erreur de typo ?
faut-il que je mette 178 à la place de 223 ?
source et hex modifié pour code 178 (sigle ° temperature)
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
Bonsoir Paul,
Merci pour ce document,
Oui il s'agit bien du code 223 à remplacer par le 178 (c'est un défaut des afficheurs que j'avais acheté en lot avant la fermeture de Sélectronic).
Je vais m'empresser (enfin doucement..) d'essayer ce code et je vous tiens au courant.
Encore merci et bonne soirée.
Alain
Merci pour ce document,
Oui il s'agit bien du code 223 à remplacer par le 178 (c'est un défaut des afficheurs que j'avais acheté en lot avant la fermeture de Sélectronic).
Je vais m'empresser (enfin doucement..) d'essayer ce code et je vous tiens au courant.
Encore merci et bonne soirée.
Alain
Hygromètre à PIC
- paulfjujo
Maître- Messages : 3182
- Âge : 74
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :

il me semble que j'avais laissé le choix RB3-RB6 dans le dernier zip
car maintenant la seule difference entre ma version et ta version
est le code du sigle degré.
Code : Tout sélectionner
sbit LCD_RS at RB0_bit;
sbit LCD_RW at RB1_bit;
sbit LCD_EN at RB2_bit;
sbit LCD_D7 at RB7_bit;
sbit LCD_D6 at RB6_bit;
sbit LCD_D5 at RB5_bit;
sbit LCD_D4 at RB4_bit;
#define RETRAITE128
#ifdef RETRAITE128
#define DEGRE 178 // Alain LCD
#else
#define DEGRE 223 // Paul LCD
#endif
main program :
......
Texte[7] = (Temp / 100) % 10 + 48;
Texte[8] = (Temp / 10) % 10 + 48;
Texte[10] = Temp % 10 + 48;
Texte[11] = DEGRE; // Degree symbol 223 ou 178
Lcd_Out(1,1,Texte);
.....
recompilé en consequence...
projet mikroC : source et hex dans le zip
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
Bonsoir Paul,
Merci pour ce fichier, j'ai bien désormais le signe degré en lieu et place de Alpha.
Il faudrait faire de même dans la version RB3-RB6.
Avant de retirer mes typons, je voudrais être sur du bon schéma, à savoir commandes en RB4-RB7, D0-D3 à la masse et Idem pour R/W (alors que dans le programme en C la sortie RB1 est active).
Bonne soirée,
Cordialement,
Alain
Merci pour ce fichier, j'ai bien désormais le signe degré en lieu et place de Alpha.
Il faudrait faire de même dans la version RB3-RB6.
Avant de retirer mes typons, je voudrais être sur du bon schéma, à savoir commandes en RB4-RB7, D0-D3 à la masse et Idem pour R/W (alors que dans le programme en C la sortie RB1 est active).
Bonne soirée,
Cordialement,
Alain
Hygromètre à PIC
- paulfjujo
Maître- Messages : 3182
- Âge : 74
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
RETRAITE128 a écrit :Il faudrait faire de même dans la version RB3-RB6.
au passage, tu aurais pu le faire par toi-meme, tu as tous les éléments ..
mais bon ...
RETRAITE128 a écrit :Avant de retirer mes typons, je voudrais être sur du bon schéma, à savoir commandes en RB4-RB7, D0-D3 à la masse et Idem pour R/W (alors que dans le programme en C la sortie RB1 est active)
Oui, effectivement declaré ..
sbit LCD_RW_Direction at TRISB1_bit;
MAIS NON UTILISEE !
le R/W du LCD est au Gnd
la Pin RB1 du 16F84 n'est pas utilisée (libre sur mon montage)
on ne fait pas de lecture sur le LCD .. car possible qu'en mode 8 bits d'ailleurs.
je l'ai elimininé de la config ..
schema reactualisé:
2 versions RB3-RB6 et RB4-RB7
et source C
nota: je n'ai pas retesté le mode RB3-RB6 car mon LCD RB4-RB7 est soudé ...avec RB3 au 0V
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
Bonsoir Paul,
Si je vous ai demandé ces précisions quand aux connexions, c'est que sur votre schéma du post #35, RB1 y figurait bien.
Je vous dis que je ne connaissais pas ce langage C, je n'ai donc pas osé "bricolé" vos programmes pour obtenir la version en RB3-RB6.
De plus dans mon état de santé actuel, ça ne semblait prudent à faire.
Je n'ose pas vous poser une dernière question, sur deux structures j'obtiens le message "Checksum error", de quoi s'agit-il svp ?
Vous souhaitant une bonne soirée,
Alain
Si je vous ai demandé ces précisions quand aux connexions, c'est que sur votre schéma du post #35, RB1 y figurait bien.
Je vous dis que je ne connaissais pas ce langage C, je n'ai donc pas osé "bricolé" vos programmes pour obtenir la version en RB3-RB6.
De plus dans mon état de santé actuel, ça ne semblait prudent à faire.
Je n'ose pas vous poser une dernière question, sur deux structures j'obtiens le message "Checksum error", de quoi s'agit-il svp ?
Vous souhaitant une bonne soirée,
Alain
Hygromètre à PIC
Hygromètre à PIC
-
RETRAITE128
Débutant- Messages : 97
- Enregistré en : août 2021
Bonjour Paul,
Au niveau de l'afficheur, comme prévu dans le programme, en lieu et place de l'indication de la valeur de l'humidité, et en alternance avec, c'est ce message qui s'affiche.
Quel anomalie permet de le déclencher afin d'en trouver la raison.
Si vous le souhaitez, je peux essayer de le capturer en photo.
Cordialement,
Alain
Au niveau de l'afficheur, comme prévu dans le programme, en lieu et place de l'indication de la valeur de l'humidité, et en alternance avec, c'est ce message qui s'affiche.
Quel anomalie permet de le déclencher afin d'en trouver la raison.
Si vous le souhaitez, je peux essayer de le capturer en photo.
Cordialement,
Alain
Qui est en ligne
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 7 invités