hOLA, HE ESTADO PROBANDO LAS SALIDAS PWM DE 16 BITS DEL mega 2560 Y ME HE ENCONTRADO CON UNA INQUIETUD; POE EJEMPLO HE INTENTADO OBTENER LA MISMA SEÑAL PWM YA PREVIAMENTE SETEADA POR LOS PINES CORRESPONDIENTES A oc1a, oc1b Y oc1c, YA QUE POR ESTOS 3 SEGUN EL MANUAL DEL ATMEGA2560 SE PUEDE TENES DICHA SEÑAL, PERO POR EL PIN DE oc1c NO HE PODIDO OBTENER DICHA SEÑAL NO ASI EN LOS oc1a Y oc1b QUE INCLUSO AL MISMO TIEMPO ME ENTREGAN SEÑAL PWM DE 16 BITS.
sI ALGUIEN TIENE LA RESPUESTA MUCHAS GRACIAS.
eSTE ES PARTE DEL SKETCH
pinMode(11, OUTPUT); //habilita pin11 OC1A COMO SALIDA
pinMode(12, OUTPUT); //HABILITA PIN 12 OC1B COMO SALIDA
pinMode(13, OUTPUT); //HABILITA PIN 13 OC1C COMO SALIDA
// Timer/Counter 1 initialization
TCCR1A = 0xA2; //borrado de OC1A OC1B y OC1CB en match,SET de estos registros al alcanzar BOTTOM(modo no invertido)
TCCR1B = 0x19; //modo operacion FAST PWM TOP= ICR1 y clk_i/o/1 es decir no preescalado
TCNT1H = 0x00; //carga valores iniciales a registros del contador1 H
TCNT1L = 0x00; //carga valores iniciales a registros del contador1 L
duty_cycle = 0; // Change this value to the desired duty cycle (0-100 %)
icr = F / fr - 1; // icr and frecuency values are set to generate a 25 kHZ signal 640=icr
frecuency = 16000000 / (1 + icr);
ICR1H = icr >> 8; //carga valores de ICRH ALTOS
ICR1L = icr & 0x00ff; //carga valores de ICRl BAJOS
// Sets the duty cycle with the value entered in line 12
delay(1500);
}
void loop() {
for (int i = 0; i < 1000; i++) {
temperature = analogRead(A0);
media = temperature + media;
delay(5);
}
temperature = media / 1000;
media = R * (1023.0 - temperature) / temperature;
media = 1 / (((log(media) - log(Rth)) / B_A) + (1 / 298.15)) - 273.15;
if (media >= 18 && media <= 22)
duty_cycle = (25 \* media - 450);
else if (media < 18)
duty_cycle = 0;
else duty_cycle = 100;
OCR1A = icr * (duty_cycle / 100.0);
OCR1B = icr * (duty_cycle / 100.0);
OCR1C = icr * (duty_cycle / 100.0);
//analogWrite(11, 255*duty_cycle/100);