Show Posts
Pages: 1 ... 6 7 [8] 9 10
106  Forum 2005-2010 (read only) / Français / Création espace francophone sur Playground on: July 10, 2006, 06:14:12 pm
Bonjour,

  Suite à une suggestion de Cristina, j'ai créé la page "Français" sur le Wiki http://www.arduino.cc/playground/ et j'ai commencé "à faire pousser un arbre" en ajoutant une branche "projets".

  J'invite toutes les bonnes volontés à venir arroser cette jeune pousse et à animer cet espace francophone.

  Les correcteurs sont priés de me relire car je suis une "M...E" en orthographe :-[.

  Pour participer vous devez créer un compte d'utilisateur contributeur ici -> http://www.arduino.cc/playground/Main/LoginForm (c'est instantané).
 
  Si comme moi c'est la première fois que vous éditez des pages Wiki, lire la documentation ici -> http://www.pmwiki.org/wiki/PmWiki/DocumentationIndex.

En espérant faire grossir la communauté francophone,
Benoît ROUSSEAU
107  Forum 2005-2010 (read only) / Français / Re: Une 2ème liaison série? on: May 10, 2006, 12:40:21 pm
Salut,

  ok, je comprends mieux. Le pb est que si ces fichiers sont bien présents, ils ne sont pas compilés, .. ou utilisable sous l'environement de dev. d'Arduino. Donc les #include ne fonctionneront pas, le linkage peut être pas, ...

  Je n'en ai pas un besoin imminent, je ne vais pas me lancer là dedans  :-X. Désolé, peut être d'autres auront la solution.

  Pour une piste qui pourrait te permettre d'avancer :

  Pour les include, pas de pb, tu colles tout dans ton "sketch", faudra juste que ca loge en ram. Reste le pbs des fonctions utilisées et qui ne sont pas déclarées avec Arduino. Comme déclarées dans "timer.h", "global.h".

 Il va falloir tout remonter petit à petit, remplacer des constantes définies par leur valeur ou les redéfinir, copier coller des bouts de codes de plusieurs fichiers C dans ton "sketch", ... C'est un travail de longue haleine ! Plusieurs jours, et peut être qu'au final, tu n'auras plus assez d'espace de programmation pour faire du code métier. N'oublie pas que les librairies que tu vois sont aussi destinées à une utilisation sur d'autres microcontrolleurs de la gamme AVR. uC qui contiennentplus de RAM, d'EEprom, ...

  En tous cas, si tu réussis, fait nous signe, car ca m'interesse bigrement et je ne dois pas être le seul.

108  Forum 2005-2010 (read only) / Français / Re: Une 2ème liaison série? on: May 09, 2006, 11:48:26 am
Bonjour,
J'ai tenté sans succés de réaliser une liaison PS2 (souris). Cela dit, je n'avais pas encore utilisé les interruptions, je ne savais pas faire sous Arduino.

Si tu fais, si tu trouve, ca m'interesse aussi :p.
109  Forum 2005-2010 (read only) / Français / [APL]  (<-Aller plus loin) interruption exter on: May 09, 2006, 03:49:05 am
Bonjour à tous,

Rapidement, on ressent tous le besoin de gérer les interruptions externes avec Arduino.

En attendant la fonction  « attachInterrupt() » en « wiring », voici un exemple qui peux vous servir de point de départ pour vos programmes.

L'interruption externe 0 correspond physiquement à la broche « digital 2 » de la carte Arduino. C'est en réponse à un événement logique sur cette broche que sera appelée la fonction « SIGNAL(SIG_INTERRUPT0) ». Le paramétrage de l'événement déclencheur (front descendant, front montant, …) s'opère via la fonction « initInt0(…) ».



Ce petit programme ne fait pas grand-chose, il fait basculer l'état de la broche 2 toutes les 250 milliseconde. Et change à chaque occurrence de l'interruption, l'état de la broche 13 (celle où l'on peux connecter une LED directement sans résistance). Pour visualiser facilement les différents modes de déclenchement de l'interruption, connecter une LED sur la broche 13 (et GND) et une autre via résistance env. 560 Ohm entre la broche 2 et GND. Changer le mode de déclenchement de l'interruption 0 via la fonction initInt0(…) et voyez ce qui se passe. Pour plus d'information sur les interruption extérieures consultez la documentation en anglais de l'ATmega8 : http://www.atmel.com/dyn/resources/prod_documents/doc2486.pdf pages 66 et suivantes.

Notez que :
- que la broche 2 soit configurée en entrée ou en sortie, l'interruption se comporte pareil face aux transitions d'états ;
- ce code ne gère que l'interruption externe 0 ;
- qu'il n'est pas garantit qu'il fonctionne avec les futures évolutions de la librairie Arduino ;
- que ce code n'a été testé qu'avec l'environnement de développement version 004.

Si ce code vous est utile, si vous avez des commentaires, des remarques et même des critiques, laissez un message à la suite  smiley.

Code:
/***************************************/
// TEST_INTERUPT Arduino
// Benoît ROUSSEAU mai 2006
// - Contrôle d'une LED sous interruption.
// - C'est un essai "pour voir" et pour
// aller plus loin.
/***************************************/

// variables et définitions
// pour la LED branchée sur
// la broche 13
#define LED  13
#define ALLUMEE HIGH
#define ETEINTE LOW
byte etatLED = ALLUMEE;  // état de la LED

#define EXTINT_LEVEL_LOW      0x00      // trigger on low level
#define EXTINT_EDGE_ANY            0x01      // trigger on any edge
#define EXTINT_EDGE_FALLING      0x02      // trigger on falling edge
#define EXTINT_EDGE_RISING      0x03      // trigger on rising edge

#define SUR_NIVEAU_BAS          EXTINT_LEVEL_LOW     // déclenchement sur niveau bas
#define SUR_FRONT_TOUS            EXTINT_EDGE_ANY           // déclenchement sur tous les fronts
#define SUR_FRONT_DESCENDANT      EXTINT_EDGE_FALLING  // déclenchement sur les fronts descendant
#define SUR_FRONT_MONTANT      EXTINT_EDGE_RISING   // déclenchement sur les fronts montants

#define sbi(PORT,BIT) PORT|=_BV(BIT)   // macro pratique pour mettre un bit x à 1 (Set Bit In)
#define cbi(PORT,BIT) PORT&=~_BV(BIT)  // macro pratique pour mettre un bit x à o (Clear Bit In)

/***************************************/
// Fonction appelée à chaque
// déclenchement de l'interruption 0
/***************************************/
SIGNAL(SIG_INTERRUPT0)
{
  digitalWrite (LED, etatLED);
  etatLED = !etatLED;
}

/***************************************/
// iniInt0
/***************************************/
// Initialisation de l'interruption 0
// valeurs possibles pour config :
// - SUR_NIVEAU_BAS
// - SUR_FRONT_TOUS
// - SUR_FRONT_DESCENDANT
// - SUR_FRONT_MONTANT
/****************************************/
void initInt0 (byte config)
{
  sbi(GICR, INT0); //
  sbi(GIFR, INT0); //

  MCUCR &= ~((1<<ISC01) | (1<<ISC00)); // raz
  MCUCR |= config; //
}

/***************************************/
void setup()
{
  pinMode(2, OUTPUT);
  initInt0(SUR_FRONT_TOUS);
};

void loop ()
{
    digitalWrite (2, LOW);
    delay(250);
    digitalWrite (2, HIGH);
    delay(250);
};
110  Forum 2005-2010 (read only) / Español / Re: disparador de fotos on: July 15, 2006, 06:57:01 am
Hello David,

Soory I dont speak spanish,  :-/

You can found some explanations in french on the post http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1152957061. In particular for the delays between digitalWrite to obtain a certain frequency of modulation. Each digitalWrite instruction take about 10us to be execute, take in care for calculations of frequency.
111  Forum 2005-2010 (read only) / Interfacing / Re: reading rpm signal from cpu fan on: August 09, 2006, 10:49:35 am
Hello Kapser,

  Long life to BabelFish !

  Do I understand it right that you use the assembly code from the Atmel processor ?

   - there no assembly code in this program, just use of some internal function of the ATmega8. The MCUCR, GIFR, ... are just internals registers of the microcontroler and are delaclared in the C library.

   Is this because of speed issues or is this the only way ( I'm a beginner ) to do this in Aduino ?

  - nothing about speed, just the only way.

  Do you have some good resources (links, books) we're you can learn programming the Atmel processor ? Or is reading the whole datasheet the best option ?

   - Oh ! The bible is the whole datasheet ! Don't read it at once. Look at the index table and just read what is supose to interest you. Take a piece of paper near you to take some notes and simulate by hand on the paper.

   - read the .c and .h of the arduino library is another way of understand and take some ideas.


112  Forum 2005-2010 (read only) / Interfacing / Re: reading rpm signal from cpu fan on: August 08, 2006, 11:52:09 pm
Hello,

  Yes I will do it... If you understand french there's explanations here : http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1147164546.

   Else,

   Download the full datasheet of ATmega8 here http://www.atmel.com/dyn/resources/prod_documents/doc2486.pdf take a look at the #66 page "External interrupts".

void initInt0 (byte config)
{
// set bit 6 "External Interrupt Request 0 Enable" in the General Interrupt Control
// Register – GICR

  sbi(GICR, INT0);

// set bit 6 "External Interrupt Flag 0" in the General Interrupt Flag
// Register – GIFR

  sbi(GIFR, INT0);

// set ISC01, ISC00: Interrupt Sense Control 0 Bit 1 and Bit 0
// in the MCU Control Register – MCUCR

  MCUCR &= ~((1<<ISC01) | (1<<ISC00)); // raz
  MCUCR |= config; //
}

Extracts of datasheet

The MCU Control Register contains control bits for interrupt sense control and general
MCU functions.
• Bit 3, 2 – ISC11, ISC10: Interrupt Sense Control 1 Bit 1 and Bit 0
The External Interrupt 1 is activated by the external pin INT1 if the SREG I-bit and the
corresponding interrupt mask in the GICR are set. The level and edges on the external
INT1 pin that activate the interrupt are defined in Table 31. The value on the INT1 pin is
sampled before detecting edges. If edge or toggle interrupt is selected, pulses that last
longer than one clock period will generate an interrupt. Shorter pulses are not guaranteed
to generate an interrupt. If low level interrupt is selected, the low level must be held
until the completion of the currently executing instruction to generate an interrupt.

• Bit 1, 0 – ISC01, ISC00: Interrupt Sense Control 0 Bit 1 and Bit 0
The External Interrupt 0 is activated by the external pin INT0 if the SREG I-flag and the
corresponding interrupt mask are set. The level and edges on the external INT0 pin that
activate the interrupt are defined in Table 32. The value on the INT0 pin is sampled
before detecting edges. If edge or toggle interrupt is selected, pulses that last longer
than one clock period will generate an interrupt. Shorter pulses are not guaranteed to
generate an interrupt. If low level interrupt is selected, the low level must be held until
the completion of the currently executing instruction to generate an interrupt.
General Interrupt Control
Register – GICR
• Bit 6 – INT0: External Interrupt Request 0 Enable
When the INT0 bit is set (one) and the I-bit in the Status Register (SREG) is set (one),
the external pin interrupt is enabled. The Interrupt Sense Control0 bits 1/0 (ISC01 and
ISC00) in the MCU general Control Register (MCUCR) define whether the external
interrupt is activated on rising and/or falling edge of the INT0 pin or level sensed. Activity
on the pin will cause an interrupt request even if INT0 is configured as an output. The
corresponding interrupt of External Interrupt Request 0 is executed from the INT0 Interrupt
Vector.
Table 32. Interrupt 0 Sense Control
ISC01 ISC00 Description
0 0 The low level of INT0 generates an interrupt request.
0 1 Any logical change on INT0 generates an interrupt request.
1 0 The falling edge of INT0 generates an interrupt request.
1 1 The rising edge of INT0 generates an interrupt request.

113  Forum 2005-2010 (read only) / Interfacing / Re: reading rpm signal from cpu fan on: July 16, 2006, 05:46:30 pm
Hello Tomas,

That the code you are looking for :

Code:
/***************************************/
// FAN SPEED Arduino
// Benoît ROUSSEAU juillet 2006
// - Mesure de la vitesse de rotation d'un
// ventillateur de CPU sous interruption.
/***************************************/

// variables et définitions
#define INT_0_PIN  2
#define EXTINT_LEVEL_LOW      0x00      // trigger on low level
#define EXTINT_EDGE_ANY            0x01      // trigger on any edge
#define EXTINT_EDGE_FALLING      0x02      // trigger on falling edge
#define EXTINT_EDGE_RISING      0x03      // trigger on rising edge
#define sbi(PORT,BIT) PORT|=_BV(BIT)   // macro pratique pour mettre un bit x à 1 (Set Bit In)

unsigned int NbTopsFan;
unsigned int MeasuredTopsFan;

/***************************************/
// Fonction appelée à chaque
// déclenchement de l'interruption 0
/***************************************/
SIGNAL(SIG_INTERRUPT0)
{
  NbTopsFan++;
}

/***************************************/
// iniInt0
/***************************************/
// Init. interrupt 0
/****************************************/
void initInt0 (byte config)
{
  sbi(GICR, INT0); //
  sbi(GIFR, INT0); //

  MCUCR &= ~((1<<ISC01) | (1<<ISC00)); // raz
  MCUCR |= config; //
}

/***************************************/
void setup()
{
  pinMode(INT_0_PIN, INPUT);
  Serial.begin(9600);
  initInt0 (EXTINT_EDGE_RISING);
};

void loop ()
{
    NbTopsFan = 0;
    delay (1000);
    MeasuredTopsFan = NbTopsFan;
    Serial.print (MeasuredTopsFan * 60, DEC);
    Serial.print (" rpm");
    Serial.print (13, BYTE);
};

It was test and it work !

You have to connect the "sens output" of the cpu fan to the digital pin #2 with a pull-up resitor >= 10Ko to +5V of the Ardiuno board. This output is a open collector ouput. I don'y test the activatation of the internals pull-ups of the ATmega. I don't remerber if they was activated by default but it work with a externel resistor... Take care of that you can't use another pin, interrupt 0 sense only on the #2 pin.

Remenber to connect the ground power of the fan and the ground power of the Arduino card.

Finally, if every thing is connect, open HyperTerminal serial monitor to see every second the fan speed in rpm.
114  Forum 2005-2010 (read only) / Interfacing / Video with Arduino on: April 17, 2007, 09:01:48 am
Hello,

  I post to the french forum an experiment to interface crt monitors with Arduino.

  

  The post is in French but you can take a look to the program if you're interested :
  http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1176757335


115  Forum 2005-2010 (read only) / Interfacing / Re: Optical sensor on: August 05, 2006, 06:28:44 pm
Hi Chris,

Yes it's possible, I've made it... Take a look at : http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1154816099. In French but ask me if you have some questions.
116  Forum 2005-2010 (read only) / Interfacing / Re: using "Arduino" fot a stepping motor... on: August 05, 2006, 05:59:05 pm
Hello Rob,

  Yes it's possible, the main problem is the power interface and the driving circuit. I use L297, L298 couple to drive a CNC milling machine with an Arduino board. You can use other components, take a look at : http://users.pandora.be/educypedia/electronics/motorstepdriver.htm.
117  Forum 2005-2010 (read only) / Interfacing / Re: Two arduino boards communicating on: August 23, 2006, 04:40:00 pm
Hello Tomski,

About 6 meters it will be allright, above maybe. I have two arduino boards just at my left wich have 6 meters of wires between them and its ok.

If you want more distance of cables, test it or use radio waves. If you can/want you can use IR to comunicate like here :
receiver : http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1152894029
emiter : http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1152957061
118  Forum 2005-2010 (read only) / Interfacing / Re: Two arduino boards communicating on: August 22, 2006, 05:13:24 pm
Hello,

  If you don't have enough pins for an other project tell me... You can easely reduce number of pins to 2 pins by using a code in binary.

  If you take only two pins the code betxeen cards will be 0 (zero) 0 (zero) or 0 1 or 1 0 or 1 1. 4 codes wih two pins.

  On the reception card make something like :

  byte receive_code = digitalRead (5) + digtalRead(6) * 2;
  switch (receive_code)
  {
     case 0 : f1(); break; // execiute your fisrt function for 0 0
     case 1 : f2(); break; // execiute your second function for 0 1
     case 2 : f3(); break; // execiute your fird function for 1 0
     case 3 : f4(); break; // execiute your #4 function for 1 1
  }


119  Forum 2005-2010 (read only) / Interfacing / Re: Two arduino boards communicating on: August 05, 2006, 06:02:20 pm
Hello Tom,

   Take 3 wires and connect them to three digital pins of each board ; one for each command A, B, C. For the emiting board configure them in output and for the receiving board in input [use pinMode(xxx,xxx)].

  Then you just have to make some [digitalWrite] on the emiting board and some [digitalRead] on the receiving board to comunicate.

   It can be more complicated but it's easy and it work !
120  Forum 2005-2010 (read only) / Interfacing / Re: L298N motor control on: August 05, 2006, 06:26:10 pm
Hello tripmaster,

  Your wiring seem to be good so I think that is your code that is bad.

  If pins 5 (In1) and 7 (In2) of the l298 are at the same level the motor stop quickly. If they are at different levels, the motor turn in one direction or the other.

  If the pin 6 (Enable) is low the motor don't turn is "free" (I don't know how to say "en roue libre").

  summary :

  Enable : LOW -> Nothing

  Enable : HIGH :

      In1 and In2 : LOW or HIGH -> Quick stop
      In1 : LOW and In2 HIGH -> the motor turn in one direction
      In1 : HIGH and In2 LOW -> the motor turn in the other direction

  
Pages: 1 ... 6 7 [8] 9 10