Forum: Mikrocontroller und Digitale Elektronik Timer im Code richtig interpretieren


von Carlton Banks (Gast)


Lesenswert?

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

von c-hater (Gast)


Lesenswert?

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.

von Carlton Banks (Gast)


Lesenswert?

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.

von spess53 (Gast)


Lesenswert?

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

von c-hater (Gast)


Lesenswert?

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...

von Carlton Banks (Gast)


Lesenswert?

Danke für die Hilfe, dass hat mir gut weitergeholfen :)

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.