ATmega328p-pu -> 8-Bit-Timer mit LED

Gast #4907355
Lesenswert?

Hallo, ich habe bei PD5 eines ATmega328p eine LED hängen, die ich gerne 
über FastPWM dimmen möchte. (
Mein Problem ist folgendes: Die LED leuchtet die ganze Zeit, und scheint 
nicht mal beeindruckt von dem Wert, den ich ins OCR0B-Register schreibe, 
der ja ständig mit dem aktuellen Timerwert kontrolliert wird, und bei 
einem match den Ausgang der LED auf Low schalten sollte, zu sein.
Hier mal mein Code:
1
#include <avr/io.h>
2

3
void init_timer0(void);
4

5

6
int main(void)
7
{
8

9
  DDRD |= (1<<PIND5);
10

11
  init_timer0();
12
OCR0B = 100; //Dieser Compare-Wert lässt meine PWM völlig kalt
13

14

15
    while (1);
16
}
17

18

19
void init_timer0(void) 
20
{
21
TCCR0A |= /*(1<<COM0B0) |*/ (1<<COM0B1) | (1<<WGM00) | (1<<WGM01);
22
TCCR0B |= (1<<WGM02) | (1<<CS02) | (1<<CS00); //Prescaller von 1024
23
}
#4907651
Lesenswert?

Felix schrieb:
> Eigentlich sollte man OCR0B setzen, das sieht man auch bei der
> Pinbelegung der Pinout-Map.(Anhang)

Um den Schaltpunkt der PWM festzulegen ist das auch richtig. Du hast 
aber auch WGM0:2 gesetzt, damit zählst die PWM bis zum Wert, der in 
OCR0A steht, da du den nicht festgelegt hast zählt die PWM nur bis 0, 
der Ausgang soll aber nur geschaltet werden, wenn 100 erreicht ist. Das 
wird nie erreicht, also wird auch nie geschaltet. Das hab ich heute 
morgen übersehen.
Gast #4907681
Lesenswert?

Felix schrieb:

> Eigentlich sollte man OCR0B setzen, das sieht man auch bei der
> Pinbelegung der Pinout-Map.(Anhang)

In dem PWM-Modus, den du eingestellt hast, muss man BEIDES setzen. Das 
eine kontrolliert die Zykluszeit, das andere den Duty.

Lies doch endlich mal dieses verschissene Datenblatt, damit du endlich 
wirklich weisst, was du da tust!

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren