ATTINY85 el pin no se pone completamente BAJO cuando está en PWM

1

He conectado 3 LED a ATTINY85 (modo PWM). Cada LED está conectado con NPN3904 y resistencia de 68 ohmios al puerto PB0, PB1 o PB5.

Todo funciona bien, excepto por alguna razón cuando establezco los valores de OCR0A o OCR0B en 0, el valor inferior será BAJO, pero en su lugar continuará emitiendo un señal débil, mientras se configura OCR1B en 0 funciona como se esperaba y PB5 se pone completamente BAJO:

Código:

#define F_CPU 8000000

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

void main()
{
    DDRB   = 1 << DDB4   | 1 << DDB1   | 1 << DDB0;
    TCCR0A = 2 << COM0A0 | 2 << COM0B0 | 3 << WGM00;
    TCCR0B = 0 << WGM02  | 1 << CS00;
    TCCR1  = 0 << PWM1A  | 0 << COM1A0 | 1 << CS10;
    GTCCR  = 1 << PWM1B  | 2 << COM1B0;

    for (;;)
    {
        OCR0A = 0x00;
        OCR0B = 0x00;
        OCR1B = 0x00;

        _delay_ms( 1000 );

        OCR0A = 0xFF;
        OCR0B = 0xFF;
        OCR1B = 0xFF;

        _delay_ms( 1000 );
    }
}

He rotado todos los componentes y he probado con VCC en el rango de 2.7 a 3.5 voltios, pero el resultado es el mismo. El problema parece estar vinculado a los pines PB0 y PB1 específicamente. ¿Alguna pista sobre lo que me estoy perdiendo? Gracias!

    
pregunta Kristian

2 respuestas

2

En hoja de datos de este mcu se explica este comportamiento y también se sugiere cómo cambiarlo.

  

si    El OCR0A se establece en BOTTOM, la salida será un pico estrecho para cada ciclo de reloj del temporizador MAX + 1. Configurar el OCR0A igual a MAX dará como resultado un nivel alto o    bajo rendimiento (dependiendo de la   polaridad de la salida se   t por los bits COM0A [1: 0].)

Lo que significa que no pueden alcanzar el 0% de PWM, pero pueden alcanzar el 100%. Para su aplicación, puede invertir salidas e invertir el significado en el código.

OCR0A = 0x00; //fully on
OCR0A = 0xFF; //fully off

Esto apagará el LED completamente.

    
respondido por el Rokta
1

La mayoría de los generadores de pwm no pueden funcionar correctamente con 0% dc o 100% dc: tendrán 1 tick alto o 1 tick bajo, dándole lo que vio.

dos formas de hacerlo.

1) si el generador pwm permite la inversión, ajuste el dc al otro extremo. LM3S estaría en esta categoría;

2) o para salir de pwm a 0% o 100% dc y configurar el pin bajo o alto. Arduino toma este enfoque.

    
respondido por el dannyf

Lea otras preguntas en las etiquetas