4

I am trying to integrate tone() with the open source program for the Amped heart rate monitor. The error:

Tone.cpp.o (symbol from plugin): In function `timer0_pin_port':

(.text+0x0): multiple definition of `__vector_7'

sketch\PulseSensorAmped_Arduino_1dot4.ino.cpp.o (symbol from plugin):(.text+0x0): first defined here

The program comes in three files. PulseSensorAmped_Arduino_1dot4.cpp I don't think references any timers but references a function in another file with this code:

 // Initializes Timer2 to throw an interrupt every 2mS.
 TCCR2A = 0x02; // DISABLE PWM ON DIGITAL PINS 3 AND 11, AND GO INTO CTC MODE
 TCCR2B = 0x06; // DON'T FORCE COMPARE, 256 PRESCALER 
 OCR2A = 0X7C; // SET THE TOP OF THE COUNT TO 124 FOR 500Hz SAMPLE RATE
 TIMSK2 = 0x02; // ENABLE INTERRUPT ON MATCH BETWEEN TIMER2 AND OCR2A
 sei(); // MAKE SURE GLOBAL INTERRUPTS ARE ENABLED

This uses timer 2; but isn't the error for timer 1? The tone() reference page says that tone interferes with pins 3 and 11. Is there any way to fix this?

references:

https://www.arduino.cc/en/Reference/Tone

https://github.com/WorldFamousElectronics/PulseSensor_Amped_Arduino

asked Jan 8, 2017 at 1:58
1
  • In my case, IR library was conflicting with Tone. Nick's solution works perfectly. Commented Sep 19, 2019 at 3:44

1 Answer 1

4

It looks like the Tone library uses Timer 2, and it looks like your other code also uses Timer 2, hence the error message. Vector 7 would be the TIMER2_COMPA_vect (Timer 2 compare "a").

Pins 3 and 11 are from Timer 2.

I wrote a small library that generates tones using the hardware PWM and not interrupts. You can read about it here.

Example code:

#include <TonePlayer.h>
TonePlayer tone1 (TCCR1A, TCCR1B, OCR1AH, OCR1AL, TCNT1H, TCNT1L); // pin D9 (Uno), D11 (Mega)
void setup() 
 {
 pinMode (9, OUTPUT); // output pin is fixed (OC1A)
 tone1.tone (220); // 220 Hz
 delay (500);
 tone1.noTone ();
 tone1.tone (440);
 delay (500);
 tone1.noTone ();
 tone1.tone (880);
 delay (500);
 tone1.noTone ();
 }
void loop() { }

Library can be downloaded from http://www.gammon.com.au/Arduino/TonePlayer.zip

This uses Timer 1 (so that won't interfere with Timer 2) and no interrupts.

answered Jan 8, 2017 at 2:24
2
  • For anyone wondering, when defining a tone, all those codes seem to be the address of the single workable pin on Uno/Mega (pin 9). For Mega 2560 there are 3 different pins and TonePlayer.cpp file has the examples. Commented Sep 19, 2019 at 3:44
  • 1
    That's true, thanks for the clarification. In the source are examples of choosing between 3 pins (which are the outputs of the three hardware timers). Commented Sep 19, 2019 at 7:32

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.