Forum: Mikrocontroller und Digitale Elektronik PWM an PIN OC1B mit 8 Bit Timer


von Atmega16M1 (Gast)


Lesenswert?

Hallo

Ich will ein phase correct PWM mit dem 8-Bit Timer auf OC1B ausgeben. 
Leider finde ich den Weg dahin nicht. Kann es sein, dass man den 8-Bit 
Timer mit dem Pin PC1 überhaupt nicht nutzen kann, sondern nur OC0A und 
OC0B?

von Hanz mit z (Gast)


Lesenswert?

OC1x ist Timer1, OC0x ist Timer0.

von Draco (Gast)


Lesenswert?

Um welchen µC geht es hier eigentlich?

von H.Joachim S. (crazyhorse)


Lesenswert?

Atmega16M1 wahrscheinlich :-)

von Atmega16M1 (Gast)


Lesenswert?

Hanz mit z schrieb:
> OC1x ist Timer1, OC0x ist Timer0.

DH. den 8-Bit Timer kann man nicht nutzen mit OC1x

Draco schrieb:
> Um welchen µC geht es hier eigentlich?

Atmega16M1

von Draco (Gast)


Lesenswert?

Die Timer und die Pins:

---------------

Timer0 = 8Bit

OC0A = PD3
OC0B = PE1

---------------

Timer1 = 16Bit

OC1A = PD2
OC1B = PC1

---------------


Du kannst dir aber ne Interrupt Routine machen und die Pins ummappen.

von Atmega16M1 (Gast)


Lesenswert?

Danke.

Nehme ich nun OC0A am PD3 Pin müsste ich doch mit folgendem Code:
1
DDRD |= (1 << DDD3);  // PD3 als Ausgang    
2
TCCR0A = (1 << COM0A0 | 1 << WGM00); // Mode 5
3
TCCR0B = (1 << WGM02 | 1 << CS02 | 1 << CS00); // CLK/1024
4
OCR0A = 127;


Phase correct, 8 Bit Timer, clk/1024

Tuts aber nicht. Kann mir jemand sagen, woran das liegt? Erhalte nur ein 
ca. 1.5V spitze zu spitze dreieckssignal

von Draco (Gast)


Lesenswert?

Versuchs mal so:
1
DDRD |= (1 << 3);  // PD3 als Ausgang    
2
TCCR0A = (1 << COM0A0) | (1 << WGM00); // Mode 5
3
TCCR0B = (1 << WGM02) | (1 << CS02) | 1 (<< CS00); // CLK/1024
4
OCR0A = 127;

und schalte mal die Interrupts ein, falls du es nicht schon gemacht 
hast:
1
sei();
2
3
//bzw folgendes:
4
5
GlobalInterruptEnable();

von Atmega16M1 (Gast)


Lesenswert?

hmm die Klammern sollten doch egal sein.
Habs aber mal gemacht:
1
DDRD |= (1 << 3);  // PWM Pin als Ausgang    
2
TCCR0A = (1 << COM0A0) | (1 << WGM00); // Mode 5
3
TCCR0B = (1 << WGM02) | (1 << CS02) | (1 << CS00); // CLK/1024
4
OCR0A = 127;

Am Signal ändern sich aber nichts

Interrupts sind doch solange ich sie nicht nutzen will auch nicht von 
nöten?!

von Draco (Gast)


Lesenswert?

Da kommt ein Dreiecksignal raus?! Hast du das mit dem Oszi gemessen? 
Häng da mal nen Bild an bitte.

von Atmega16M1 (Gast)


Angehängte Dateien:

Lesenswert?

Anhang. Hoffe du kannst was erkennen.

von Draco (Gast)


Lesenswert?

Das ist kurios...

Wie sieht die Schaltung hinter dem Pin aus?!

von Atmega16M1 (Gast)


Lesenswert?

PD3 ist neben OC0A auch MOSI_A was man fürs Programmieren nutzt. Muss 
man da was umstellen? Habe gerade auch mal versucht einfach den Pin nur 
zu tgl. was auch nicht klappt. Bei jedem andern Pin klapps aber...

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.