Arduino Due et les timer counters

Bonjour,

Je suis récemment passé d'une Arduino Uno à une Arduino Due pour un projet comportant un écran avec une fonctionnalité de rétroéclairage.

J'utilise un timer qui me permet, si l'utilisateur n'appuie pas sur les boutons pendant un certain temps, de contrôler la baisse de luminosité de l'écran. Mon projet fonctionne très bien sur Arduino Uno.

Sur Arduino Due, je rentre une seule ligne de plus qui me fait planter la compilation. J'ai suivis la datasheet, les différents fichiers .h utiles et quelques postes sur le forum.

REG_TC0_CCR0 |= TC_CCR_CLKEN;

Sans cette ligne tout se passe bien. Voici les erreurs que j'ai :

In file included from C:\Users\CA_ELEC\AppData\Local\Arduino15\packages\arduino\hardware\sam\1.6.12\system/CMSIS/Device/ATMEL/sam3xa/include/sam3x8e.h:312:0,
                 from C:\Users\CA_ELEC\AppData\Local\Arduino15\packages\arduino\hardware\sam\1.6.12\system/CMSIS/Device/ATMEL/sam3xa/include/sam3xa.h:44,
                 from C:\Users\CA_ELEC\AppData\Local\Arduino15\packages\arduino\hardware\sam\1.6.12\system/CMSIS/Device/ATMEL/sam3.h:59,
                 from C:\Users\CA_ELEC\AppData\Local\Arduino15\packages\arduino\hardware\sam\1.6.12\system/CMSIS/Device/ATMEL/sam.h:198,
                 from C:\Users\CA_ELEC\AppData\Local\Arduino15\packages\arduino\hardware\sam\1.6.12\system/libsam/chip.h:25,
                 from C:\Users\CA_ELEC\AppData\Local\Arduino15\packages\arduino\hardware\sam\1.6.12\cores\arduino/Arduino.h:42,
                 from C:\Users\CA_ELEC\Desktop\Mes\Mes.ino:8:
C:\Users\CA_ELEC\AppData\Local\Arduino15\packages\arduino\hardware\sam\1.6.12\system/CMSIS/Device/ATMEL/sam3xa/include/instance/instance_tc0.h:77:31: error: expected ')' before '*' token
 #define REG_TC0_CCR0  (*(WoReg*)0x40080000U) /**< \brief (TC0) Channel Control Register (channel = 0) */
                               ^
C:\Users\CA_ELEC\Desktop\Mes\Mes.ino:42:1: note: in expansion of macro 'REG_TC0_CCR0'
 REG_TC0_CCR0 |= TC_CCR_CLKEN;
 ^
C:\Users\CA_ELEC\AppData\Local\Arduino15\packages\arduino\hardware\sam\1.6.12\system/CMSIS/Device/ATMEL/sam3xa/include/instance/instance_tc0.h:77:31: error: expected ')' before '*' token
 #define REG_TC0_CCR0  (*(WoReg*)0x40080000U) /**< \brief (TC0) Channel Control Register (channel = 0) */
                               ^
C:\Users\CA_ELEC\Desktop\Mes\Mes.ino:42:1: note: in expansion of macro 'REG_TC0_CCR0'
 REG_TC0_CCR0 |= TC_CCR_CLKEN;
 ^
Plusieurs bibliothèque trouvées pour "Adafruit_RGBLCDShield.h"
Utilisé : C:\Users\CA_ELEC\Documents\Arduino\libraries\Adafruit_RGB_LCD_Shield_Library
Non utilisé : C:\Users\CA_ELEC\Documents\Arduino\libraries\Adafruit-RGB-LCD-Shield-Library-master
exit status 1
Erreur de compilation pour la carte Arduino Due (Programming Port)

Est-ce qu'il y a quelque chose que j'ai pu oublier ?

PS : Je ne souhaite pas utiliser de bibliothèque pour faire cette tâche.

Up!

En espérant qu'une personne voit mon erreur :slight_smile:

Le problème vient certainement d'ailleurs. Cette ligne est parfaitement légale.

Merci de ta réponse :wink:

Je me suis dis la même chose que toi. Pourtant j'ai testé beaucoup de choses :

  • autre ordinateur,
  • autre version d'Arduino,
  • autre carte Arduino Due,
  • des façons de rédiger différentes :
/////////////// Timer Counter (TC) Channel 0 : 0x40080000 // Timer pour l'activation du rétroéclairage
// Channel Control Register
//TC0->TC_CHANNEL[0].TC_CCR |= (1 << CLKEN);
//TC0->TC_CHANNEL[0].TC_CCR |= 0x01;
//(*TC0).TC_CHANNEL[0].TC_CCR |= 0x01;

//#define REG_TC0_CCR0 0x40080000
//REG_TC0_CCR0=0x01;
//TC0->TC_CHANNEL[0].TC_CCR |= TC_CCR_CLKEN;
//TC0->TC_CHANNEL[0].TC_CCR &= 0x01;
REG_TC0_CCR0 |= TC_CCR_CLKEN;

J'ai aussi pensé qu'il y avait un conflit avec d'autres lignes mais même avec un programme vide ayant uniquement cette ligne (ou ses semblables) j'ai encore des erreurs...

Je suis à court d'idée :confused:

Cette ligne compile chez moi.

  • autre ordinateur,
  • autre version d'Arduino,
  • autre carte Arduino Due,

Il manque : réinstaller le package ARDUINO SAM BOARDS.
Supprimer le répertorie arduino15/packages/arduino/hardware/sam/ et réinstallation (voir Boards Manager).

Mon package est le même : 1.6.12.

Je l'avais aussi fait mais je ne l'avais effectivement pas mentionné.

Je viens de le refaire plus une énième réinstallation et toujours les mêmes erreurs :confused:

Je suis à court d'idées.

J'avais posté en parallèle ma question sur la partie anglaise du forum : Ici

En fait mon problème était que cette ligne était en dehors de toutes fonctions alors qu'elle doit être dans la fonction setup() (ou loop() en fonction de ce que l'on veut faire j'imagine).

Je l'avais pourant fait dans mon programme pour Arduino Uno mais cela ne m'avait pas paru important.

Ce n'était donc qu'une erreur de débutant :wink:

Merci pour tes réponses hbachetti !

Ce que je comprends pas est le point suivant :
Comment un débutant peut-il s'aventurer à utiliser les registres du processeur avec une connaissance aussi superficielle du langage ?

Qui sait ? peut-être que par ailleurs il est champion du monde d'assembleur, pas besoin de connaître le C pour exploiter un µC.

Peut être mais là on parle de C.

Ahah je suis en école d'ingénieur donc je suis en réalité pas trop un débutant mais ça peut dépendre des points de vue.

J'ai dis que c'était une erreur de débutant parce que j'ai posé ça dans un endroit "random" sans vraiment réfléchir. C'est plus une erreur d'inattention dans mon cas. Le principal c'est que je ne la ferai plus maintenant :wink:

C'est à espérer :slight_smile: