Show Posts
Pages: 1 ... 104 105 [106] 107 108 ... 243
1576  International / Français / Re: Problème USART - ATMega2560 on: September 07, 2013, 06:08:46 am


Code:
// Pour remplacer le défunt serial.flush()
void monFlush(){
for (int c=0; c<64; c++){
if ( Serial1.available()>0 ) Serial1.read();
else return;
}}

Testé: Cette fonction s'exécute en 0,4ms pour un buffer plein de 63 octets.


Sans doute plus rapide
Code:
while(Serial.available()){
    Serial.read();
}
1577  International / Français / Re: Fonction sinus optimisée ? on: September 07, 2013, 01:41:12 am
i s'incrémentant régulièrement, pour gagner un peu de temps ta boucle peut s'écrire:
Code:
temp_flt = 0;
for(int i = 0; i < G_Donnees_generation.Nbre_points; ++i)
 {           
            // Calcul d'un point du signal
            temp_flt += temp_flt3;
            temp_flt = sin(temp_flt); 
            G_Donnees_generation.points_courbes[i]=temp_flt2*temp_flt;   
}                   
Cela fait gagner une multiplication de flottant

Quote
Et oui sur la ram d'une Due c'est pas le soucis.
Je vais quand même essayer de comprendre ce qu'a fait Skywood en flash
Pas sur que les accès flash puissent rivaliser avec une lecture en RAM.
1578  International / Français / Re: Une pause avec une interruption on: September 06, 2013, 03:33:21 pm
Quote
fdunews, je vais d'abord voir si j'y arrive sans librairie, je ne sais pas de toute façon si elle me sera utile car je cherche pas a mettre en veille l'Arduino, la pause n'est jamais très longue (max 1min).
Si tu avais seulement pris le temps de regarder la librairie en question, tu aurais vu qu'il y a le mode IDLE qui est une simple mise en pause du processeur soit pour un temps donné soit en l'attente d'une nouvelle interruption.
1579  International / Français / Re: Pourquoi Serial.available me retourne toujours 0 on: September 06, 2013, 03:19:48 pm
S'il n'y a pas de données à lire c'est normal que available retourne 0.
Code:
    // checks if the module is started
    answer = sendATcommand("AT", "OK", 2000);
    if (answer == 0)
    {
Dans le code d'origine il semble que le cas soit prévu d'un retour sans donnée.
Il faudrait peut être prévoir un hors temps dans ta fonction.

Si une librairie existe déjà ce serait peut être plus simple de l'utiliser en la dégraissant des fonctions qui ne te sont pas utiles. Le lien que tu donnes pointe sur une librairie indiquée comme obsolète.
1580  International / Français / Re: Fonction sinus optimisée ? on: September 06, 2013, 02:40:12 pm
En y réfléchissant, 2µs !! cela me parait un peu trop rapide.
Il faudrait que je vérifie s'il n'y a pas une embrouille avec la fonction micros() sur le Due.
Demain je mettrai un coup d'oscilloscope pour vérifier.
Bon effectivement le programme devait être trop simple et l'optimisation aidant il ne devait rien se passer du tout.
Je l'ai un peu modifié et maintenant je trouve environ 230ms pour le remplissage de la table.
1581  International / Français / Re: Erreur librairie SerialLcd on: September 06, 2013, 09:51:19 am
La ligne de code où se produit l'erreur c'est celle-là:
Code:
class SerialLCD : public SoftwareSerial{
Tu as bien la librairie SoftwareSerial ?
normalement dans les versions récentes de l'IDE elle devrait être installée.
1582  International / Français / Re: Communauté Arduino sur Paris ? on: September 06, 2013, 08:51:53 am
Moi ce qui me chiffonne c'est cette phrase.
Quote
Nous voulons construire l'Electolab V2, à savoir passer de 180M2 à 1500M2, et devenir un acteur majeur dans le domaine.
Dans les messages précédents sur ce fil, il est apparu que ce qui bloque le plus ce sont les déplacements qui sont particulièrement dissuasifs en région Parisienne. Donc à mon sens une dissémination des hacker space plutôt que leur centralisation m'aurait paru plus pertinente. Quitte à centraliser certaines ressources (rares, chères ou très pointues dans leur utilisation). Les parisiens travaillent de plus en plus loin de leur lieu de résidence et reprendre les transports (personnels ou en commun) après une journée de boulot c'est pas très motivant.
1583  International / Français / Re: Petit Prolème avec mon code on: September 06, 2013, 08:42:08 am
Le Serial.print() surtout à 96000 bauds prend un certain temps.
Peut être cela te fait-il rater un événement fugitif sur un discret.

un "0" de trop ?   smiley-mr-green
C'est vrai. Pour le coup ça n'aurait pas pris trop de temps.
1584  International / Français / Re: Une pause avec une interruption on: September 06, 2013, 03:09:41 am
Avec la librairie Sleep_n0m1

J'ai extrait le code d'un bout de programme que j'avais utilisé pour tester cette librairie sur une carte Seeduino Film.

Code:
#include <avr/pgmspace.h>
#include <Sleep_n0m1.h>

Sleep sleep;
volatile boolean aulit=false;

void goSleep(void){
  aulit=true;
}

void goToSleep(void){
  aulit=false;
  detachInterrupt(0);
  ADCSRA &= ~_BV(ADEN);     // turns ADC off
  delay(200);
//  while(digitalRead(2)==0);
  sleep.pwrDownMode(); //set sleep mode
  sleep.sleepInterrupt(0,FALLING); //sleep for: sleepTime
  ADCSRA |=_BV(ADEN);      // turns ADC on
  delay(200);
//  while(digitalRead(2)==0);
  attachInterrupt(0,goSleep,FALLING);
}

void setup(void) {
  pinMode(2, INPUT);  // bouton poussoir
  // autres initialisation
  attachInterrupt(0,goSleep,FALLING);
}

void loop(void) {
// picture loop 
//  u8g.firstPage();
  if (aulit) goToSleep();
 
  // L'application est là
 
 }

Je voulais garder le contrôle du moment où la mise en sommeil se produisait ce qui explique l'utilisation de goSleep et goToSleep.
Tu dois pouvoir appeler directement goToSleep par attachInterrupt.
La mise en veille et le réveil se font par appui sur un bouton connecté à l'entrée 2.
La mise en veille de l'ADC est un facteur important pour la réduction de la consommation.
1585  International / Français / Re: Petit Prolème avec mon code on: September 06, 2013, 01:44:31 am
Le Serial.print() surtout à 96000 bauds prend un certain temps.
Peut être cela te fait-il rater un événement fugitif sur un discret.
1586  International / Français / Re: Fonction sinus optimisée ? on: September 06, 2013, 01:38:21 am
En même temps avec une Due c'est pas la RAM qui manque. Tu peux très bien avoir en mémoire une table de sinus calculée pendant le setup(). C'est pas ça qui va planter le processeur.
Si tu fais une table de sinus même de 5000 entiers cela ne fera jamais que 10k sur la quantité de RAM disponible ce n'est pas un gros problème.
1587  International / Français / Re: Fonction sinus optimisée ? on: September 05, 2013, 03:40:09 pm
En y réfléchissant, 2µs !! cela me parait un peu trop rapide.
Il faudrait que je vérifie s'il n'y a pas une embrouille avec la fonction micros() sur le Due.
Demain je mettrai un coup d'oscilloscope pour vérifier.
1588  International / Français / Re: Fonction sinus optimisée ? on: September 05, 2013, 02:51:54 pm
Sachant que j'ai mesuré à l'oscilloscope que avec et sans la fonction sinus j'ai un écart de 80ms. Ce qui me fait 5000 * sin() = 80ms.
Je reprecise que la génération des 5000 points du tableau sur 20ms ca ne pose pas de soucis.

Là en fait j'ai un doute. Parce que moi aussi j'ai une Due.
Je n'avais pas eu le temps ces derniers jours mais ce soir je l'ai ressortie et pour faire un tableau de 5000 sinus il me faut 2µs. Alors même en admettant que tu fasses plus que calculer des sinus tu me vois quand même un peu surpris.
N'aurais-tu pas quelques opérations inutiles dans la boucle de calcul.

Le programme en question. Je calcule le sinus et je normalise sur 12 bits comme si j'utilisais un CAN 12 bits.
Code:
void setup() {
  Serial.begin(9600);

}

void loop() {
int tab[5000];
int i;
float val=0,inc;
unsigned long temps1,temps2;

temps1 = micros();
inc = 2*3.1415926/5000;
for(i=0; i<5000;i++){
  tab[i]=(int)(sin(val)*2047.0+2048.0);
  val+=inc;
}
temps2 = micros();
Serial.print("temps1=");
Serial.println(temps1);
Serial.print("temps2=");
Serial.println(temps2);
Serial.println(temps2-temps1);
delay(100);
}
1589  International / Français / Re: Problème USART - ATMega2560 on: September 05, 2013, 02:11:42 pm
Quote
// Lecture des dernieres valeurs x, y
Serial1.flush();
Erreur !!!
Serail.flush attend que le buffer d'émission soit vide voir là --> http://arduino.cc/en/Serial/Flush
1590  International / Français / Re: Problème avec moniteur serie on: September 05, 2013, 10:00:52 am
Pour ton 1er problème:
Le message passe peut être avant que la fenêtre du terminal soit complètement active.
Essaye de faire un reset manuel avec le poussoir de la carte.

Pour le 2nd problème
C'est pas le programme qui se plante c'est plutôt le terminal qui se plante.
J'ai un problème similaire lorsque j'envoie des caractères à la suite sans arrêt.
Pages: 1 ... 104 105 [106] 107 108 ... 243