Timer, pin PWM e uscite digitali su Arduino Mega
Sto usando un Arduino Mega per controllare i motori tramite PWM e driver del motore Adafruit DRV8871. Uso anche TIMER1 per un interrupt a tempo. Dopo aver aggiunto l'interrupt TIMER1 ho scoperto di avere problemi con il controllo del motore, che alla fine ho rintracciato utilizzando i pin 11 e 12 per PWM contemporaneamente all'utilizzo di TIMER1 per interrupt temporizzati.
Il mio pensiero iniziale era di cambiare il timer utilizzato per l'ISR per evitare il conflitto dei pin 11/12, ma ora non sono sicuro di quali siano le restrizioni per l'utilizzo dei pin associati ai timer. Ora mi rendo conto che i pin associati a un interrupt del timer non possono essere utilizzati per PWM utilizzando analogWrite (int val), ma possono essere utilizzati come uscite digitali di uso generale?
Ad esempio, se cambio da TIMER1 a TIMER0 per il mio interrupt del timer, sembra che cambi la dipendenza dei pin da 11/12 a 4/13. Non uso il pin 13, ma utilizzo il pin 4 come uscita digitale. L'uso del pin 4 come uscita digitale funzionerà ancora correttamente?
TIA,
Franco
Risposte
Puoi usarli per qualsiasi scopo diverso da PWM. Puoi persino usarli per PWM purché le impostazioni del timer ti consentano di produrre la forma d'onda che desideri.
Il motivo per cui PWM si è rotto è che hai modificato le impostazioni del timer. Il timer è ciò che controlla il PWM. Quando hai modificato queste impostazioni, hai disattivato la funzione PWM o impostato alcune impostazioni in cui non funzionava. Quindi i pin associati a quel timer non hanno più ricevuto PWM. Puoi fare qualsiasi altra cosa che non coinvolga il timer, incluso l'uso del pin per l'ingresso o l'uscita o qualsiasi altra funzione speciale non correlata al timer.
Se modifichi l'interruzione del timer in TIMER0, corri il rischio che ritardo, millisecondi e micro smettano di funzionare correttamente. Dipendono dall'interrupt di overflow TIMER0 in esecuzione a un intervallo impostato per il conteggio del tempo. Dipende da come si imposta il timer.
Ti suggerisco di leggere un po 'su come funzionano questi timer. La scheda tecnica del chip ATMega328P è un ottimo punto di partenza.