Repetier

Can you run the simple test also with tone like described here:

https://www.programmingelectronics.com/an-easy-way-to-make-noise-with-arduino-using-tone/

On due we use a interrupt to generate a frequency as well. So question is if it is not switching pin due to some error or does it not work with that piezo. If the tone example works the error would be in firmware tone handling.


lmcbmai

<blockquote class=" Quote">Can you run the simple test also with tone like described here

I am out of town until the end of next week. Will try this once I am back.Thanks


lmcbmai

I tested the code posted in reply #2 here https://forum.arduino.cc/index.php?topic=136500.0 and in worked!! Just changed the pin number from 8 to 27. Ultratronics played a melody with different tones, which means the board works as advertised.
Pasting below the exact code I used. SD card was removed during this test and Ultratronics was powered only via programming USB port.

/* Melody on pin 8 of DUE **** Pin 27 on Ultratronics Pro **** http://arduino.cc/en/Tutorial/Tone */ #define BEEPER_PIN 27 // 8 // notes in the melody: int melody[] = { 262,196, 196, 220, 196, 0, 247, 262 /NOTE_C4, NOTE_G3,NOTE_G3, NOTE_A3, NOTE_G3,0, NOTE_B3, NOTE_C4/ }; // note durations: 4 = quarter note, 8 = eighth note, etc.: int noteDurations[] = { 4, 8, 8, 4,4,4,4,4 }; void setup() { } void loop() { // iterate over the notes of the melody: for (int thisNote = 0; thisNote < 8; thisNote++) { // to calculate the note duration, take one second // divided by the note type. //e.g. quarter note = 1000 / 4, eighth note = 1000/8, etc. int noteDuration = 1000/noteDurations[thisNote]; tone(BEEPER_PIN, melody[thisNote],noteDuration); // to distinguish the notes, set a minimum time between them. // the note's duration + 30% seems to work well: int pauseBetweenNotes = noteDuration * 1.30; delay(pauseBetweenNotes); // stop the tone playing: noTone(BEEPER_PIN); } delay(3000); } /* Tone generator v1 use timer, and toggle any digital pin in ISR funky duration from arduino version TODO use FindMckDivisor? timer selected will preclude using associated pins for PWM etc. could also do timer/pwm hardware toggle where caller controls duration */ // timers TC0 TC1 TC2 channels 0-2 ids 0-2 3-5 6-8 AB 0 1 // use TC1 channel 0 #define TONE_TIMER TC1 #define TONE_CHNL 0 #define TONE_IRQ TC3_IRQn // TIMER_CLOCK4 84MHz/128 with 16 bit counter give 10 Hz to 656KHz // piano 27Hz to 4KHz static uint8_t pinEnabled[PINS_COUNT]; static uint8_t TCChanEnabled = 0; static boolean pin_state = false ; static Tc *chTC = TONE_TIMER; static uint32_t chNo = TONE_CHNL; volatile static int32_t toggle_count; static uint32_t tone_pin; // frequency (in hertz) and duration (in milliseconds). void tone(uint32_t ulPin, uint32_t frequency, int32_t duration) { const uint32_t rc = VARIANT_MCK / 256 / frequency; tone_pin = ulPin; toggle_count = 0; // strange wipe out previous duration if (duration > 0 ) toggle_count = 2 * frequency * duration / 1000; else toggle_count = -1; if (!TCChanEnabled) { pmc_set_writeprotect(false); pmc_enable_periph_clk((uint32_t)TONE_IRQ); TC_Configure(chTC, chNo, TC_CMR_TCCLKS_TIMER_CLOCK4 | TC_CMR_WAVE | // Waveform mode TC_CMR_WAVSEL_UP_RC ); // Counter running up and reset when equals to RC chTC->TC_CHANNEL[chNo].TC_IER=TC_IER_CPCS; // RC compare interrupt chTC->TC_CHANNEL[chNo].TC_IDR=~TC_IER_CPCS; NVIC_EnableIRQ(TONE_IRQ); TCChanEnabled = 1; } if (!pinEnabled[ulPin]) { pinMode(ulPin, OUTPUT); pinEnabled[ulPin] = 1; } TC_Stop(chTC, chNo); TC_SetRC(chTC, chNo, rc); // set frequency TC_Start(chTC, chNo); } void noTone(uint32_t ulPin) { TC_Stop(chTC, chNo); // stop timer digitalWrite(ulPin,LOW); // no signal on pin } // timer ISR TC1 ch 0 void TC3_Handler ( void ) { TC_GetStatus(TC1, 0); if (toggle_count != 0){ // toggle pin TODO better digitalWrite(tone_pin,pin_state= !pin_state); if (toggle_count > 0) toggle_count--; } else { noTone(tone_pin); } }

Thanks.


Repetier

Thanks. I have updated dev version with a HAL that creates sounds on my ultratronics as well. Seems like WRITE_VAR was not working.


lmcbmai

Just tested latest HAL files with the following GCode:

M300 S262 P200 M300 S0 P50 M300 S196 P400 M300 S0 P50 M300 S196 P400 M300 S0 P50 M300 S220 P200 M300 S0 P50 M300 S196 P200 M300 S0 P250 M300 S247 P200 M300 S0 P50 M300 S262 P200

Worked perfectly!!

@Repetier Thanks for outstanding support!!


Privacy Policy  |  About Us