Hi ich versuche ein paar Zeilen in einem Code zu verstehen und weiss nicht ob ich auf dem richtigen Weg bin. Ich habe hinter die Zeilen jeweils geschrieben was ich denke worum es sich handelt. Es geht um diese Zeilen: 1. TCCR1A = (1<<COM1A0) | (1<<COM1B0) //? 2. |(1<<WGM10) | (1<<WGM11); // Bestimmt in Kombination mit Zeile 3 den Betriebsmodus Fast PWM 3. TCCR1B = (1<<WGM12) | (1<<WGM13); 4. OCR1B = 0; //? 5. OCR1A = 15383; // Top-Wert.Bei erreichen wird OC1A von 0 auf 1 bzw umgekehrt je nach Festlegung Was ich nicht ganz verstehe ist die Funktion von COM1. Ich habe in einer Tabelle gelesen, dass bei der gewählten Setzung der Pins wie in Zeile 1, ein Wechsel an OC1A stattfindet bei einem compare match und OC1B abgeschaltet wird. Bedeutet das das sich OC1B und OC1A immer abwechseln? Und allgemein die Frage, handelt es sich bei dem Code um 2 PWM Signale? Eins das bei OCR1B = 0 ausgelöst wird und eins das bei OCR1A = 15383 ausgelöst wird? Falls dem so ist, wieso benötigt man beim steuern der Geschwindigkeit eines Schrittmotors mit einem Potentiometer zwei PWM Signale? Vielleicht könnte mir jemand kurz weiterhelfen? lg
Carlton Banks schrieb: > Bedeutet das das sich OC1B und OC1A immer abwechseln? Nein, OC1B hat die normale Pinfunktion und OC1A toggelt timergesteuert. > Und allgemein die Frage, handelt es sich bei dem Code um 2 PWM Signale? Nein, der macht überhaupt kein PWM. An OC1B wäre PWM möglich, aber dazu müßten COM1B1/COM1B0 anders gesetzt werden, entweder auf 10 oder 11. Vielleicht geschieht das später im Programm noch irgendwo, das wäre möglich.
Also wenn ich es richtig verstanden habe wird jedesmal beim erreichen von OCR1A = 15383 (TOP), OC1A getoggelt. Und da WGM 10, 11, 12, 13 gesetzt sind handelt es sich um eine Fast PWM. An OCB1 liegt keine PWM an. Wenn bspw. OCB1 beim Treiber vom Motor an CW/CCW angeschlossen wäre und man OCRB1 = 0 setzt, würde man damit dann die Drehrichtung des Motors festlegen? Bin noch neu auf dem Gebiet daher noch etwas unsicher.
Hi >Und da WGM 10, 11, 12, 13 gesetzt sind handelt es sich um eine Fast PWM. Im dem Fall, COM1A0 = 1, wird das ganze zum CTC-Mode mit einem festen vom Tastverhältnis von 1:1. >Wenn bspw. OCB1 beim Treiber vom Motor an CW/CCW angeschlossen wäre und >man OCRB1 = 0 setzt, würde man damit dann die Drehrichtung des Motors >festlegen? OC1B ist in dem Fall ein ganz normales Portpin. Wird also über die ganz normalen Portregister (DDRD, PORTD und PIND) angesprochen. MfG Spess
Carlton Banks schrieb: > Also wenn ich es richtig verstanden habe wird jedesmal beim erreichen > von OCR1A = 15383 (TOP), OC1A getoggelt. Genauso ist das. > Und da WGM 10, 11, 12, 13 gesetzt sind handelt es sich um eine Fast PWM. > > An OCB1 liegt keine PWM an. Richtig, wie ich schon schrieb: der verhält sich bei gegebener Konfiguration wie ein ganz normaler Port-Pin, hat also mit dem Timer nichts zu tun. Wenn man aber nun irgendwo später im Programm noch eine Anweisung hat á la: TCCR1A |= (1<<COM1B1); Dann ändert sich das ab eben dieser Anweisung und über OC1B wird dann tatsächlich ein PWM-Signal ausgegeben, dessen duty factor ganz normal über das OCR1B-Register steuerbar ist. > Wenn bspw. OCB1 beim Treiber vom Motor an CW/CCW angeschlossen wäre und > man OCRB1 = 0 setzt, würde man damit dann die Drehrichtung des Motors > festlegen? Nein. Wie gesagt: der Timer hat bei der gegebenen Konfiguration mit dem Pin nix zu schaffen. Wennschon, dann müßte man eine Ausgabe auf das entsprechende PORT-Register machen. > Bin noch neu auf dem Gebiet daher noch etwas unsicher. Jeder hat mal angefangen, das ist keine Schande. Mir sind die Leute viel lieber, die ein Programm wirklich verstehen wollen, es aber noch nicht können, als die, die es nur stumpf per copy&paste übernehmen und sich dann auch noch für Programmierer halten...
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.