Jeg vil øke PWM-bitoppløsningen til Arduino Uno. For øyeblikket er den 8-bit som jeg anser for lav. Er dette mulig uten å miste muligheten for avbrudd og forsinkelser?
Koen
EDITDette oppsettet leverer en 16-biters resultat
ugyldig oppsettPWM16 () {DDRB | = _BV (PB1) | _BV (PB2); / * sett pinner som utganger * / TCCR1A = _BV (COM1A1) | _BV (COM1B1) / * ikke-inverterende PWM * / | _BV (WGM11); / * modus 14: rask PWM, TOP = ICR1 * / TCCR1B = _BV (WGM13) | _BV (WGM12) | _BV (CS11); / * prescaler: klokke / 8 * / ICR1 = 0xffff; / * TOP-tellerverdi (frigjør OCR1A * /} / * Kommentarer til oppsettet Endring av ICR1 vil påvirke mengden oppløsningsbiter. ICR1 = 0xffff; (65535) 16-biters oppløsning ICR1 = 0x7FFF; (32767) 15-biters oppløsning ICR1 = 0x3FFF ; (16383) 14-biters oppløsning osv .... Endring av prescaler vil påvirke PWM-signalets frekvens. Frekvens [Hz} = CPU / (ICR1 + 1) hvor i dette tilfellet CPU = 16 MHz 16-bit PWM vil være>>> (16000000/8) / (65535 + 1) = 30,5175Hz * // * 16-biters versjon av analogWrite (). Fungerer bare på pinn 9 og 10. * / ugyldig analogWrite16 (uint8_t pin, uint16_t val) {bryter (pin ) {case 9: OCR1A = val; break; case 10: OCR1B = val; break;}}