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?
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
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.
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
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(); |
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?!
Da kommt ein Dreiecksignal raus?! Hast du das mit dem Oszi gemessen? Häng da mal nen Bild an bitte.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.
