Hoffentlich liegt das Ziel auch am Weg
..................................................................Der Wegzu einigen meiner Konstruktionen
Hallo,
danke für die Antworten ich meine 180° Phasenverschiebung und nicht Invertierung.
Wollte es mit dem Phase-Correct PWM Mode machen aber leider geht das nicht so,
weil das Register mit dem ich die Frequenz einstelle das gleiche ist mit dem ich den einen Impuls machen möchte:
"Note that in this mode, only output B can be used for PWM; OCRA cannot be used both as the top value and the PWM compare value."
(http://www.righto.com/2009/07/secret...duino-pwm.html)
Dachte ich könnte vllt einfach einen Interrupt auslösen wenn ich die obere Grenze erreiche und einen Pin toggeln.
Ist zwar nicht optimal aber besser als beide pulse in Software zu erzeugen.
Leider funktioniert mein Programm nicht, da ich nicht in die isr rein komme.
kann mir jemand meinen Fehler sagen?
Code:// A sketch that creates an 250 kHz 6-bit resolution PWM with varying duty cycle #include <avr/io.h> #include <util/delay.h> void setup() { Serial.begin(115200); pinMode(3, OUTPUT); // Output pin for OCR2B pinMode(2, OUTPUT); // Set up the 250 kHz output TCCR2A = bit(COM2A1) | bit(COM2B1) | bit(WGM21) | bit(WGM20); TCCR2B = bit(WGM22) | bit(CS20); TIMSK2 |= (1 << OCIE2A); // enable timer compare interrupt OCR2A = 63; OCR2B = 0; sei();//allow interrupts } ISR(Timer2_COMPA_vect) // timer compare interrupt service routine { PORTD |= 0x4; PORTD &= ~0x4; } void loop() { }
Geändert von alex91 (15.11.2018 um 09:08 Uhr)
Rechtschreibfehler dürft ihr euch behalten
Vielleicht generiert man von einem PWM-Ausgang zwei Signale. Das erste Signal wird einfach weitergereicht und, für den zweiten Ausgang, in einer digitalen Stufe um eine gewisse Zeit verzögert (wegen der 180°) und kann dann dort abgegriffen werden. Man müsste das PWM-Signal an dem zweiten Ausgang des Atmega zeitversetzt starten - geht das überhaupt?
Vielleicht auch andere Aussagen dazu lesen: https://forum.arduino.cc/index.php?topic=224085.0
MfG
Es gab mal ein ähnliches Problem.
Hier der Code:Und zwar von hier: https://forum.arduino.cc/index.php?P...opic=366453.15Code:const byte PWMUhv = 3; // Spannung für Treiber const byte PWMUdesat = 11; // Spannung für Desat void initTimer2PWM() { TCCR2B= _BV(CS21); //prescaler8=3,9KHz; CS22=0; CS21=1; CS20=0; Timer2 TCCR2A= _BV(WGM21) | _BV(WGM20) | _BV(COM2A1) | _BV(COM2B1)| _BV(COM2A0)| _BV(COM2B0); OCR2B= 128; //Duty 50% für Pin 3 } void setup() { pinMode(PWMUhv, OUTPUT); // PWMUhv als Ausgang deklariert pinMode(PWMUdesat, OUTPUT); // PWMUdesat als Ausgang deklariert initTimer2PWM(); } int nacheilung = 0; void loop() { OCR2A= 128 + nacheilung; delay(200); nacheilung++; if(nacheilung>100) nacheilung = 0; }
MfG
Moppi
Lesezeichen