Forum: Mikrocontroller und Digitale Elektronik ATmega328p-pu -> 8-Bit-Timer mit LED


von Felix (Gast)


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
}

von M. K. (sylaina)


Lesenswert?

Auf den ersten Blick würde ich sagen: Am Code liegt es nicht. Wie schaut 
dein Aufbau aus?

von honk (Gast)


Lesenswert?

Felix schrieb:
>
1
> TCCR0A |= ... | (1<<WGM00) | (1<<WGM01);
2
> TCCR0B |= (1<<WGM02) | ...; //Prescaller von 1024
3
>

Im Mode 7 mit OCR0A als TOP sollte man OCR0A auch setzen und nicht auf 
0x00 lassen?

von Felix (Gast)


Angehängte Dateien:

Lesenswert?

Eigentlich sollte man OCR0B setzen, das sieht man auch bei der 
Pinbelegung der Pinout-Map.(Anhang)
Das mach ich aber eh im Code nach der Init_timer0() Funktion.
mfg.

von M. K. (sylaina)


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.

von c-hater (Gast)


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!

von honk (Gast)


Lesenswert?

c-hater schrieb:
> Lies doch endlich mal dieses verschissene Datenblatt, ...

Tu es nicht!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.