I've tried so many different example codes, scoured the datasheet and set my own TCCR0A and TCCR0B bits to set the modes, but every program so far has either a) not lit the LED at all or b) lit the LED at full brightness, ie does not correlate to OCR0A at all. The LED MOSFET is on PB2 (OCR0A, right?) and works fine with a simple blink function. The code I'm trying currently: (this one outputs full brightness all the time. I've even tested with a normal 5V led on the output to make sure it wasn't the MOSFET having an extremely slow recovery time)
Code: Select all
#ifndef F_CPU
#define F_CPU 8000000UL // 8 MHz clock speed
#endif
#include <avr/io.h>
//#include <avr/interrupt.h>
#include <util/delay.h>
int main(void)
{
DDRB |= 1 << PB2;
TCCR0A |= (1<<WGM00)|(1<<COM0A1);
TCCR0B |= (1<<WGM02)|(1<<CS00);
while(1){
for (uint8_t i = 0; i < 255; i++) {
OCR0A = i;
_delay_ms(4);
}
for (uint8_t i = 255; i >= 0; i--) {
OCR0A = i;
_delay_ms(4);
}
}
}
And the (full) schematic:
I'm attempting to put PWM on the White control MOSFET, which is driving a small section of 12V LED strip. MOSFETs are NVR4501NT1G n-channel
This is on a custom-made board which had the problem of a broken ground plane where I haphazardly placed mousebites, so I have two bodge wires to fix that issue.
Any help would be greatly appreciated; even just an example of what should work would let me know whether this is a software issue or another problem with my board.