Offline
Newbie
Karma: 0
Posts: 19
|
 |
« on: June 01, 2012, 04:33:14 am » |
Bonjour,
Je travail actuellement avec une carte ARDUINO UNO mais je suis un peu limité niveau performance, je voulais donc savoir comment pourrais-je accélérer l'horloge interne pour avoir de meilleur résultats.
Merci
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Jr. Member
Karma: 0
Posts: 84
|
 |
« Reply #1 on: June 01, 2012, 05:02:34 am » |
Tu peux monter jusqu'à 20MHz .. avec un crystal à 20MHz.
Sinon si tu as besoin de plus de performances, peut-être qu'il te faut autre chose qu'un ATmega.
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Newbie
Karma: 0
Posts: 19
|
 |
« Reply #2 on: June 01, 2012, 05:27:53 am » |
Mais en fait je pense que mon microcontrôleur est assez puissant mais qu'il n'est pas programmé pour fonctionner au maximum de ses capacités.
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Newbie
Karma: 0
Posts: 19
|
 |
« Reply #3 on: June 01, 2012, 05:40:09 am » |
Actuellement mes sorties tournent à 125KHz soit FOSC/128 et j'aimerais les configurer afin qu'elle tournent a FOSC/4 mais je ne trouve pas les commandes.
|
|
|
|
|
Logged
|
|
|
|
|
France
Offline
Faraday Member
Karma: 36
Posts: 4307
Arduino Hacker
|
 |
« Reply #4 on: June 01, 2012, 06:47:15 am » |
Bonjour, Actuellement mes sorties tournent à 125KHz soit FOSC/128 et j'aimerais les configurer afin qu'elle tournent a FOSC/4 mais je ne trouve pas les commandes.
Oublie arduino, prend le datasheet constructeur, regarde quels registres modifier et code directement en AVR C/C++. Regarde aussi du coté du registre CLKPR (Clock Prescale Register) qui permet de choisir la fréquence interne du cpu et des périphériques.
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Newbie
Karma: 0
Posts: 19
|
 |
« Reply #5 on: June 01, 2012, 07:26:39 am » |
ok merci, je vais regarder ça.
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Newbie
Karma: 0
Posts: 19
|
 |
« Reply #6 on: June 01, 2012, 07:34:23 am » |
J'ai trouvé le bon registre mais quand je l'insère dans mon code il me met une erreur : "error: lvalue required as left operand of assignment", une idée ?
|
|
|
|
|
Logged
|
|
|
|
|
Rennes
Offline
Full Member
Karma: 0
Posts: 206
|
 |
« Reply #7 on: June 01, 2012, 08:34:23 am » |
J'ai trouvé le bon registre mais quand je l'insère dans mon code il me met une erreur : "error: lvalue required as left operand of assignment", une idée ?
C'est plus facile de t'aider avec le code... T'aurais pas utilisé "=" à la place de "==" par hasard?
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Newbie
Karma: 0
Posts: 19
|
 |
« Reply #8 on: June 01, 2012, 08:50:32 am » |
voila la partie initilisation du code, celle qui concerne l'horloge interne
void setup() { pinMode(Slave, OUTPUT); pinMode(CLK, OUTPUT); pinMode(MISO, OUTPUT); digitalWrite(Slave, HIGH);
CLKPS0 = 0; CLKPS1 = 0; CLKPS2 = 0; CLKPS3 = 0; }
et les erreurs :
test_SPI_uno.cpp: In function 'void setup()': test_SPI_uno:110: error: lvalue required as left operand of assignment test_SPI_uno:111: error: lvalue required as left operand of assignment test_SPI_uno:112: error: lvalue required as left operand of assignment test_SPI_uno:113: error: lvalue required as left operand of assignment
Je pense qu'il manque un header ou quelque chose comme ça. J'ai récement programmer une interruption sur une carte uno32 et il fallais inséré " extern "C" " avant d'utiliser les registres du pic, il faut peu être quelque chose comme ça...
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Jr. Member
Karma: 0
Posts: 84
|
 |
« Reply #9 on: June 01, 2012, 08:51:58 am » |
J'ai trouvé le bon registre mais quand je l'insère dans mon code il me met une erreur : "error: lvalue required as left operand of assignment", une idée ?
Tu peux nous recopier ici la ligne qui pose problème ?
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Newbie
Karma: 0
Posts: 19
|
 |
« Reply #10 on: June 01, 2012, 08:55:29 am » |
Ce qui pose problème c'est :
CLKPS0 = 0; CLKPS1 = 0; CLKPS2 = 0; CLKPS3 = 0;
Tout le reste du programme fonctionne correctement, en fichier d'entête j'ai juste #include <SPI.h>
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Newbie
Karma: 0
Posts: 32
|
 |
« Reply #11 on: June 01, 2012, 09:40:59 am » |
Salut, tu n'as pas introduit le type de variable : int, float, double etc.. Je pense  Du type : int CLKPS0 = 0; // ou float etc.. int CLKPS1 = 0; int CLKPS2 = 0; int CLKPS3 = 0;
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Newbie
Karma: 0
Posts: 19
|
 |
« Reply #12 on: June 01, 2012, 09:50:06 am » |
Non ça ne viens pas de sa, se sont des variable qui doivetn déja être définit en interne, mais justement il doit me manquer un quelque chose qui lui permetrait d'aller chercher dans les librairies du microcontrôleur ou je ne sais où.
|
|
|
|
|
Logged
|
|
|
|
|
0
Offline
God Member
Karma: 0
Posts: 760
Arduino rocks
|
 |
« Reply #13 on: June 01, 2012, 10:38:32 am » |
Yep! Premièrement, la manipulation du registre requiert l'utilisation du c. Actuellement, tu ne fais que déclarer des variables qui ne modifieront en rien le registre, de plus comme ces valeurs sont reconnues par le système, un message d'erreur apparait. Il te faudra utiliser la manipulation de bits pour ceci : REGISTRE GENERAL |= (1 << OPTION_REGISTRE) // bit à 1 du bit OPTION_REGISTRE dans le REGISTRE_GENERAL REGISTRE_GENERAL &= ~(1 << OPTION_REGISTRE) // bit à 0 du bit OPTION_REGISTRE dans le REGISTRE_GENERAL Secondo, en mattant vite fait le datasheet de la famille des 328, il y a une procédure spécifique décrite page 36. @+ Zoroastre.
|
|
|
|
« Last Edit: June 02, 2012, 04:06:22 am by zoroastre »
|
Logged
|
Veuillez indiquer [RESOLU] dans l'entête du titre en éditant votre premier message 
|
|
|
|
France
Offline
Faraday Member
Karma: 36
Posts: 4307
Arduino Hacker
|
 |
« Reply #14 on: June 01, 2012, 12:12:33 pm » |
Ton probléme est trés simple, CLKPS0, CLKPS1, ... sont des options de registre. Tu doit donc assigner ces options au registre liée ! Le registre en question s'apelle CLKPR (voir mon 1er post). Tu dois donc faire : CLKPR &= ~((1 << CLKPS0) | (1 << CLKPS1) | (1 << CLKPS2) | (1 << CLKPS3)); Pour avoir CLKPS0 ~ CLKPS3 mis à 0. Mais attention tu doit aussi suivre une procédure bien précise pour que les modif soit prise en compte ! Tu doit donc faire : CLKPR &= ~((1 << CLKPS0) | (1 << CLKPS1) | (1 << CLKPS2) | (1 << CLKPS3)); CLKPR |= (1 << CLKPCE); (Ps: un petit delai de stabilisation aprés ces deux lignes serait le bienvenu)
|
|
|
|
|
Logged
|
|
|
|
|
|