Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Probleme de compilation
11-11-2017, 08:25 PM, (This post was last modified: 12-11-2017, 09:57 AM by Techno.)
#1
Probleme de compilation
Bonjour à tous,
J'essaye de faire fonctionner un module RTC DS3231. J’utilise Pinguino V12.
Je pars de l’exemple fourni dans les dossiers Pinguino :  09.Interfacing\ RTCC \ DS3231.pde  (Author: --<Dave Maners>)
Je l'adapte pour ma plaque 18F4550, tout se passe bien j'arrive à afficher l'heure sur mon afficheur LCD...
La compilation pour la plaque 8 bits se passe sans problème...
Le problème se situe pour la compilation sur une plaque 32 bits 32MX250 : erreur de compilation "while linking"
J'écris un programme de test pour limiter le plus possible les lignes de code avec Test2M250 (téléchargement ici)
La compilation passe en 8 bits mais échoue en 32 bits.... Huh
cela fait plusieurs jours que je galère, pourriez vous me conseiller.
D'avance merci Shy
Techno

Le programme est le suivant :


Code:
/*-----------------------------------------------------
Author origin :  --<Dave Maners>
Modification :  --<Thierry Lancelot>
Date: nov 2017
Description: utilisation du RTC DS3231 avec un afficheur LCD
Tester sur carte perso 32MX250
Led de sortie sur D0


Sur la plaque perso 32MX250 L'afficheur LCD est cablé comme ceci :
 lcd.pins(11, 10, 0, 0, 0, 0, 9, 8, 7, 6); (RS, E, D0, D1, D2, D3, D4, D5, D6, D7)

Fonctionnement RTC DS3231
SDA connection à D3
SCL connection à D4
Address i2c du module DS3231 = xD0 ou 208 ou b11010000
Alimentation en +3.3V

       Registre                     Adresse
  Seconde (0 à 59)                00
   Minute (0 à 59)                  01
   Heure (0 à 23)                   02
    Jour (1 à 7)                      03        Dimanche:1   Lundi:2   Mardi:3   ------->  Samedi:7
    Date (1 à 31)                    04
    Mois (1 à 12)                    05        Janvier:1        Fevrier:2      ----------->   Décembre:12
   Année (0 à 99)                   06


Les données de lecture du module RTC sont en BCD
Il est indispensable de convertir les informations  binaire codé décimal vers décimal par bcdToDec
       u8 bcdToDec(u8 val)
         { return ( (val/16*10) + (val%16) ); }   val%16 correspond au modulo donc le restant de la division par 16

L'écriture des données s'effectue en format Hexadécimal


Pour l'écriture : wbuffer[0] = première adresse de registre à lire           --- wlength = n (octets de données à envoyer) + 1 (address byte to specify)
                                              rlength = 0 si rien à recevoir

Pour la lecture :  wbuffer[0] = première adresse de registre à lire    --- wlength = 1 (address byte to specify)
                                              rlength = n (octets de données à recevoir)

-----------------------------------------------------*/

#define LED0 0  // redifinition LED0 sur D0

                                                           // u8 est une variable 1 octet
u8 I2C_address=0xD0;                        //Address i2c du module DS3231
u8 reg=0x00;                                        // registre à lire
u8 i2c_tx_buffer[8];                               //réservation 8 emplacements d'1 octet  **** buffer de transmission***
u8 i2c_rx_buffer[7]={0,0,0,0,0,0,0};      //réservation 7 emplacements d'1 octet et écriture de 0   **** buffer de réception***

char    Day[8][5]        = {"","Sat","Sun","Mon","Tue","Wed","Thu","Fri"};
char    Month[13][5]    = {"","Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"};

                                                       // int est une variable 2 octets
int secondG, minuteG, hourG, dayOfWeekG, dayOfMonthG, monthG, yearG;



// envoyer et recevoir des données
u8 DS3231_send_receive(u8 address, u8 *wbuffer, u8 wlength, u8 *rbuffer, u8 rlength)
{
   u8 i;
   u8 temp;
   
   I2C.start();
   
   if(!I2C.writeChar(address))
   {
       do
       {
           I2C.restart();
       }
       while(!I2C.writeChar(address));
   }

     
   for (i=0; i<wlength; i++)
   {
       while(!I2C.writeChar(wbuffer[i]));
   }

       
   if( rlength > 0)
   {
       temp = address | 0x01;
       do
       {
           I2C.restart();
           delay(500);
       }
       while(!I2C.writeChar(temp));             //  operation de lecture (bit 0 set to 1)

       for (i=0; i<rlength; i++)           // lecture séquentielle (par incrémentation)
       {
           rbuffer[i] = I2C.readChar();
           if (i== (rlength-1))            // Le dernier octet est envoyé ?
               I2C.sendNack();             // Oui, envoyer un Nack à l'esclave (fin de la lecture)  
           else
               I2C.sendAck();              // Non, envoyer un Ack (pour continuer la lecture)
       }
   }
   
   I2C.stop();
   return(1);

}




u8 decToBcd(u8 val)   // Conversion decimal vers binaire codé décimal
{
 return ( (val/10*16) + (val%10) );   // val%10 correspond au modulo donc le restant de la division par 10
}





u8 bcdToDec(u8 val)   // Conversion binaire codé décimal vers décimal
{
 return ( (val/16*10) + (val%16) );  // val%16 correspond au modulo donc le restant de la division par 16
}





void setup()
{
    pinMode(LED0, OUTPUT);
 }




void loop()
{    
   toggle(LED0);
   delay(500);
}
Reply
13-11-2017, 11:39 AM,
#2
RE: Probleme de compilation
Ca marche chez moi :


[INFO] Compiling: /home/regis/Dvpt/pinguino/projets/test/Techno/Test2M250.pde
[INFO] Board: Pinguino 32MX250
[INFO] Proc: 32MX250F128B
[INFO] Arch: 32
[INFO] MIPS 16: True
[INFO] Heap size: 512 bytes
[INFO] Optimization: -O2
[INFO] Compilation terminée
[INFO] Code size: 2240/110592 bytes (2.03% used)
[INFO] 0.385 seconds process time

Tu peux m'envoyer un e-mail et je retournerais une version à jour des libraries pour les P32.
It is easier to complain than it is to do, but it is better to do than it is to complain.
Reply
13-11-2017, 06:49 PM,
#3
RE: Probleme de compilation
Merci Regis,
J'ai envoyé un message sur votre messagerie.
Cordialement
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)