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 : 3182
Âge : 74
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#41 Message par paulfjujo » mer. 17 juil. 2024 19:06

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

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(= 0; i < 8; i++)
  { k = 0;
    while(  PORTA.B0==0)
    {  k++;
      if (> 100) 
      
{Time_out = 1;
        break;
       }
      Delay_us(1);
     }
  Delay_us(30);
    if(  PORTA.B0==0)
      bit_clear(value, (- i));               // Clear bit (7 - i)
    else
    
{
      bit_set(value, (- i));                 // Set bit (7 - i)
      k=0;
       while(  PORTA.B0==1)
      {                         // Wait until pin goes low
      k++;
      if (> 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.
Aide toi, le ciel ou FantasPic t'aidera

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

#42 Message par RETRAITE128 » dim. 21 juil. 2024 15:35

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

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

#43 Message par paulfjujo » dim. 21 juil. 2024 19:40

bonjour Alain,


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)
_16F84_DHT22_LCD_2024-0721_RB4-RB7_178.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

#44 Message par RETRAITE128 » dim. 21 juil. 2024 20:41

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

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

#45 Message par paulfjujo » lun. 22 juil. 2024 10:10

oops

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
contenu_du_zip.jpg


_16F84_DHT22_LCD_2024-0722_RB4-RB7_178.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

#46 Message par RETRAITE128 » mar. 23 juil. 2024 17:45

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

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

#47 Message par paulfjujo » mar. 23 juil. 2024 19:32

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é:
16F84_DHT22_Test_schema_2024-0723.jpg




2 versions RB3-RB6 et RB4-RB7
et source C
_16F84_DHT22_LCD_2024_2_versions.zip


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.
Aide toi, le ciel ou FantasPic t'aidera

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

#48 Message par RETRAITE128 » mar. 23 juil. 2024 20:46

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

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

#49 Message par paulfjujo » mar. 23 juil. 2024 20:56

RETRAITE128 a écrit :.....une dernière question, sur deux structures j'obtiens le message "Checksum error",
de quoi s'agit-il svp ?


:?: sans le contexte, je ne comprends pas la question !
Aide toi, le ciel ou FantasPic t'aidera

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

#50 Message par RETRAITE128 » mer. 24 juil. 2024 09:41

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


Retourner vers « Langage C »

Qui est en ligne

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