Ciao a tutti,
sto realizzando un semplice programma che usa la libreria OneButton per leggere diverse pressioni di un pulsante (collegato sull'ingresso D4) e un'uscita PWM sul pin 5 che usa il Timer 0;
Se imposto il Timer 0 come TCCR0B = TCCR0B & 0b11111000 | 0x01; (quindi a frequenza massima) la libreria non legge più correttamente le pressioni, mentre funziona perfettamente se lascio la frequenza al valore di default (ma avendo collegato una ventola sull'uscita PWM devo impostare la frequenza al valore più alto altrimenti fischia).
Come posso risolvere questo problema?
Grazie mille a tutti!
Il timer 0 è usato dalla millis() e dalla delay()
Simonv92:
Come posso risolvere questo problema?
Usando altro pin ed altro Timer.
Arduino UNO Timers (ATmega328P)
Timer0
Usato da millis() e delay() e per il PWM sui pin 5 e 6
fast hardware pwm
(default 976.5625 Hz)
Pin 5 è anche usato per il “pulse counting”
Pin 8 è usato per il “input capture”
Timer1
Usato dalla libreria Servo e per il PWM sui pin 9 e 10. Libreria e PWM mutuamente esclusivi.
8-bit phase correct pwm mode
(default 488.28125 Hz)
Timer2
Usato per il PWM sui pin 3 e 11
8-bit phase correct pwm mode
(default 488.28125 Hz)
Guglielmo
Grazie a tutti per le risposte, non c'è modo per far funzionare millis() con una frequenza diversa da quella di dafault?
No, meglio se cambi timer e quindi pin. Consiglio il Timer2 che è a 8 bit come il Timer0, mentre il Timer1 è a 16 bit.
https://arduino-info.wikispaces.com/Timers-Arduino