Pages: [1] 2 3   Go Down
Author Topic: ARDUINO UNO 16MHz  (Read 2296 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 19
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 Offline
Jr. Member
**
Karma: 0
Posts: 84
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 Offline
Newbie
*
Karma: 0
Posts: 19
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 Offline
Newbie
*
Karma: 0
Posts: 19
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 Offline
Faraday Member
**
Karma: 55
Posts: 5347
Arduino Hacker
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

Offline Offline
Newbie
*
Karma: 0
Posts: 19
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ok merci, je vais regarder ça.
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 19
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 Offline
Sr. Member
****
Karma: 1
Posts: 313
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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 Offline
Newbie
*
Karma: 0
Posts: 19
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 Offline
Jr. Member
**
Karma: 0
Posts: 84
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 Offline
Newbie
*
Karma: 0
Posts: 19
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 Offline
Newbie
*
Karma: 0
Posts: 32
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Salut,

tu n'as pas introduit le type de variable : int, float, double etc.. Je pense  smiley-roll-sweat
Du type :
Code:
int CLKPS0 = 0; // ou float etc..
    int CLKPS1 = 0;
    int CLKPS2 = 0;
    int CLKPS3 = 0;
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 19
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 Offline
God Member
*****
Karma: 2
Posts: 802
Arduino rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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 :

Quote
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 smiley-wink

France
Offline Offline
Faraday Member
**
Karma: 55
Posts: 5347
Arduino Hacker
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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 :
Code:
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 :
Code:
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

Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

Pages: [1] 2 3   Go Up
Jump to: