Risoluzione PWM Arduino Due?

Ciao a tutti,
da poco sono un utilizzatore di un Arduino Due. Sto facendo alcuni test sulla generazione di segnali PWM; quello che vorrei ottenere è un segnale con frequenza 400 Hz e risoluzione sul duty cycle di meno di 1 microsecondo (12 bit).

Sono riuscito ad ottenere la frequenza desiderata modificando la define "#define PWM_FREQUENCY 400" all'interno del file "variant.h".
Riguardo alla risoluzione del segnale PWM ho letto che con la funzione analogWriteResolution() è possibile modificare la risoluzione ed ottenere grazie alla funzione analogWrite() un segnale pwm con risoluzione fino a 12bit .

Ho utilizzato questa funzionalità ma non sono riuscito ad ottenere la risoluzione desiderata (la risoluzione reale rimane ad 8 bit);
Oscilloscopio alla mano, ho potuto verificare che l'utilizzo di analogWriteResolution() non ha effetto sulla generazione di segnali PWM sui pin digitali [2 ..13].

Questo è il codice usato:

void setup() 
{
   Serial.begin(115200);
   pinMode(6,OUTPUT);
   analogWriteResolution(12); 
}
void loop() 
{
  // Test con 12 bit di risoluzione
   analogWrite(6,2464); 
  delay(1000);
}

Sbaglio qualcosa? O semplicemente sto interpretando male la guida?
Grazie del supporto
Matteo

I think analogWriteResolution only applies to the DAC pins.

http://arduino.cc/en/Reference/AnalogWriteResolution:
analogWriteResolution() is an extension of the Analog API for the Arduino Due.

analogWriteResolution() sets the resolution of the analogWrite() function. It defaults to 8 bits (values between 0-255) for backward compatibility with AVR based boards.

The Due has the following hardare capabilities:

12 pins which default to 8-bit PWM, like the AVR-based boards. These can be changed to 12-bit resolution.
2 pins with 12-bit DAC (Digital-to-Analog Converter)

By setting the write resolution to 12, you can use analogWrite() with values between 0 and 4095 to exploit the full DAC resolution or to set the PWM signal without rolling over.

Allora sia il DAC che i PWM possono essere usati con una risoluzione di 12 bit.

Ciao Uwe

Ciao Uwe,
innanzi tutto grazie per la pronta risposta.
Ero anch'io a conoscenza della possibilità per il DUE di incrementare la risoluzione degli ADC dei PWM fino a 12 bit e in effetti è proprio quello che faccio.
Nel setup() invoco la "analogWriteResolution(12)" e nella" analogWrite() " inserisco valori da 0..4095.
A prima vista sembra funzionare tutto, se non che andando a verificare con l'oscilloscopio quello che osservo è una risoluzione reale inferiore, ossia identica a quella che ottengo settando 8 bit di risoluzione.
Qualche idea?

Matteo

EUREKA.
Ho ottenuto il risultato desiderato, ma per farlo ho dovuto modificare un header file dell'ide di arduino.
Credo che la function analogWriteResolution() presenti un bug.
Grazie a tutti
Matteo

Cosa hai modificato?

Se vuoi segnalare un bug puoi contattare gli sviluppatori

Bug Reporting
If you’ve found a bug in the Arduino software, check if it's already known by looking at Issues · arduino/Arduino · GitHub, and if it's not known, add it to the list.

From variant.h (version 1.5.5):

/*
 * PWM
 */
#define PWM_INTERFACE		PWM
#define PWM_INTERFACE_ID	ID_PWM
#define PWM_FREQUENCY		1000
#define PWM_MAX_DUTY_CYCLE	255
#define PWM_MIN_DUTY_CYCLE	0
#define PWM_RESOLUTION		8

/*
 * TC
 */
#define TC_INTERFACE        TC0
#define TC_INTERFACE_ID     ID_TC0
#define TC_FREQUENCY        1000
#define TC_MAX_DUTY_CYCLE   255
#define TC_MIN_DUTY_CYCLE   0
#define TC_RESOLUTION		8

PWM pins (TC-controlled and PWM-controlled) are 8 bit resolution, this is fixed.