ATtiny85 PWM: ¿por qué es necesario configurar COM1A0 antes de que funcione PWM B?

4

Quiero habilitar la salida PWM de alta velocidad en PB4 usando un ATtiny85. Después de leer la hoja de datos, parece que se deben cumplir las siguientes condiciones:

  • PLL y PCK deben configurarse para habilitar el reloj periférico de alta velocidad
  • El prescaler debe configurarse para habilitar la sincronización
  • OCR1B y OCR1C deben configurarse para elegir el ciclo de trabajo
  • PB4 debe configurarse como una salida y el modo de comparación debe configurarse utilizando COM1B0 / COM1B1
  • PWM B debe habilitarse usando GTCCR: PWM1B

El siguiente código funciona: veo la salida PWM en PB4 y puedo variar el ciclo de trabajo cambiando OCR1B. Sin embargo, solo funciona si también configuro COM1A0 en TCCR1. Si no configuro COM1A0, PB4 permanece alto y no se genera ninguna salida PWM.

#include <avr/io.h>
#include <avr/delay.h>

int main() {
// Enable PLL and async PCK for high-speed PWM
PLLCSR |= (1 << PLLE) | (1 << PCKE);

// Set prescaler to PCK/2048
TCCR1 |= (1 << CS10) | (1 << CS11) | (0 << CS12) | (0 << CS13);

// Set OCR1B compare value and OCR1C TOP value
OCR1B = 128;
OCR1C = 255;

// Enable OCRB output on PB4, configure compare mode and enable PWM B
DDRB |= (1 << PB4);
GTCCR |= (1 << COM1B0) | (1 << COM1B1);
GTCCR |= (1 << PWM1B);

// Why is this necessary?
TCCR1 |= (1 << COM1A0);

while (1) {}

return 0;
}

¿Por qué esto es necesario? La hoja de datos indica que los bits COM1A controlan OC1A / PB1, que no debería tener nada que ver con OC1B y OCRB

La razón por la que estoy tratando de usar OC1B / PB4 en lugar de OC1A / PB1 es que PB4 no se usa durante el ISP, mientras que PB1 está

    
pregunta Sam

2 respuestas

5

¿Es este un chip antiguo? Parece que un par de personas también han tenido este problema.

enlace

Hacia la parte inferior del hilo, llegaron a la conclusión de que se trataba de un problema de hardware en el chip que desde entonces se ha solucionado. Tu código se ve bien. Me pregunto si Atmel alguna vez solucionó el problema.

La hoja de datos ATtiny85 en la La errata (sección 27.2.3 / página 213) dice:

  

4) Contador de temporizador 1 generación de salida PWM en OC1B: XOC1B no funciona correctamente
  Temporizador Counter1 PWM salida OC1B-XOC1B no funciona correctamente. Solo en el caso de que los bits de control, COM1B1 y COM1B0 estén en el mismo modo que COM1A1 y COM1A0, respectivamente, la salida OC1B-XOC1B funciona correctamente.

     

Solución de problemas / Solución alternativa
  La única solución es utilizar la misma configuración de control en los bits de control COM1A [1: 0] y COM1B [1: 0], consulte la tabla 14-   4 en la hoja de datos. El problema se ha solucionado para Tiny45 rev D.

    
respondido por el Justin Trzeciak
2

Esto realmente me dejó perplejo por un tiempo. He estado leyendo con la hoja de datos y, en su mayor parte, todo lo que dijo es correcto para mí. Sin embargo, noté algunas discrepancias potenciales, así que te las voy a disparar y quizás averigüemos cuál es el problema.

En primer lugar, verifiqué el registro TCCR1 y miré el bit COM1A0:

Esciertoque,segúnlatabla,estoindicaclaramentequelosbitsCOM1A[1:0]serefierensoloalasalidaPWMOC1A.Tengaencuentaqueenlaparteinferior,dice:

"En el modo PWM, estos bits tienen diferentes funciones"

Así que revisé la tabla 12-1.

LatablamuestraqueCOM1x1yCOM1x0manipulanelpinOC1x.UnopensaríaintuitivamentequesiunoestácambiandoelCOM1A[1:0],entoncessolomanipularíaelpinOC1APWM.Sinembargo,veaeltextodearriba:

"Cuando el valor del contador coincide con el contenido de OCR1A u OCR1B, las salidas OC1A y OC1B se configuran o borran"

Esto parece sugerir que si OCR1A O OCR1B coincide, las salidas OC1A Y OC1B se configuran o borran, de acuerdo con los bits COM1x [1: 0] .

Por lo tanto, me parece que al manipular los bits COM1x [1: 0], siempre que el HW esté habilitado en el modo PWM, estas salidas PWM están influenciadas al mismo tiempo. Esta es la razón por la que cuando COM1A [1: 0] está habilitado en '00', la tabla 12-1 dice que las salidas PWM no están conectadas.

Solo un pensamiento, quizás alguien más iluminado pueda criticar mi lógica.

    
respondido por el Nick Williams

Lea otras preguntas en las etiquetas