PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : 2 unterschiedliche PWMs an OC1A und OC1B erzeugen?



kautz
30.07.2008, 10:18
Hallo, ich möchte 2 Motoren ansteuern (links,rechts).
Es soll natürlich möglich sein beide unterschiedlich schnell drehen zu lassen oder?
Hier ist mein Ansatz:


void pwm_init()
{
DDRB = 1<<PB1) | (1<<PB2); //PINS als Ausgang konfigurieren
TCCR1A = (1<<WGM10) | (1<<WGM11);
/* Einstellen der PWM-Frequenz auf ca. 8 kHz ( Prescaler = 1 ) */
TCCR1B = (1<<CS10);
}
void motor_links(int geschw)
{
PORTD |= (1<<PD5);
PORTB &= ~(1<<PB0);
OCR1A = geschw;
TCCR1A |= (1<<COM1A1) ;//Start

}
void motor_rechts(int geschw)
{
PORTD &= ~(1<<PD6);
PORTD |= (1<<PD7);
OCR1B = geschw;
TCCR1A |= (1<<COM1B1) ;//Start

}

uwegw
30.07.2008, 10:52
Sieht in etwa richtig aus... hab grad kein Lust, alles noch mal im Datenplatt nachzuschlagen. Nur in der dritten Zeile solltest du noch ne Klammer setzen, aber das wird dir der Complier auch noch mitteilen. Ansonsten: probier es doch einfach aus!

BlackDevil
30.07.2008, 12:50
Gibt es zu PWM in C gute Tuts? Gerade zum Thema Servosteuern. ..

avion23
30.07.2008, 15:43
Kennst du schon http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial ?

kautz
30.07.2008, 15:45
Der Code da oben von mir funktioniert.
Ich hatte nur die Motoren falsch angeschlossen, somit war alles irgendwie bißchen komisch.
Danke für die schnellen Antworten.

oberallgeier
30.07.2008, 16:02
Gibt es zu PWM in C gute Tuts? Gerade zum Thema Servosteuern. ..
Also ich hatte über diese beiden:
http://www.mikrocontroller.net/articles/AVR_PWM und
https://www.roboternetz.de/wissen/index.php/Servos
na ja, eigentlich eher nur über den PWM-Artikel mitunter geschimpft. Aber das liegt entweder an meiner Denk-Trägheit oder vielleicht ein bisschen an der relativen Kompliziertheit der PWM - solange ich die nicht wirklich verstanden hatte, kam sie mir doch komplex vor. Anfangs hatte ich PWM´s softwaremässig gemacht, weil ich sie hardwaremässig nicht hinbekommen hatte - aber nun funktioniert das recht prächtig (bei meinen Aufgabenstellungen). Immerhin laufen z.B. für einen Zweiräder die beiden PWM´s OC0A und OC0B für die Motoren - kplt. mit Regelung, die sogar einen prächtigen Geradeauslauf ergibt, und daneben/dazu eine PWM OC1A für drei IR-LED für drei SFH5110 auf einem mega168. Und die tun genau das was ich will :). Ich will damit sagen - ich hatte als Anfänger vor einigen Monaten erhebliche Probleme mit dem Tutorial und den doc´s. Aber jetzt verstehe ich die PWM einigermassen. Na ja, es ging eben nicht auf die Schnelle . . .

uwegw
30.07.2008, 16:12
Ein Problem ist, dass es viele verschiedene Timer-Versionen gibt. Je nach Alter und Größe des AVRs gibt es da deutliche Unterschiede in der Ausstattung. Das macht es schwer, ein kurzes, allumfassendes Tutorial zu schreiben...

oberallgeier
30.07.2008, 16:34
... Problem ... verschiedene Timer-Versionen ... schwer, ein kurzes, allumfassendes Tutorial zu schreiben...
Stimmt. Dabei gibt es ja sehr umfassende Timer-Tutorials - in den docs. Ich hatte mit einem tiny13 angefangen, danach ein 2313, dann ein m32 auf RNControl, ein m16 - mal so zum Spass, weil der auf das RNControl passte :( (klar, war Schwachsinn) - und bin dann beim m168 gelandet. Dauernd ein anderes doc - ich kannte da keines auch nur annähernd und musste immer nachblättern (tut ja keiner). Vorerst bleibe ich auch bei dem m168. Nach einiger Zeit kannte ich mich dann auch etwas besser aus und komme derzeit mit dem doc relativ gut zurecht. CGS. Im Nachhinein betrachtet muß ich sagen, es wird dort alles recht gut erklärt. Halt nicht Anfänger-like.

BlackDevil
30.07.2008, 18:57
http://www.avrfreaks.net/index.php?name=PNphpBB2&file=viewtopic&t=50106 Das Timer Tutorial funzt mit jedem Mega (getestet) und ählich isses auch mit PWM. Es geht eigentlich nur drum: Was macht PWM und wie Implementiere ich es und welche möglichkeiten gibt es es zu Implementieren.

Die beiden Fragen beantworten die hier geposteten Tuts für mich nich :(


OCR1A=128; // LED 50%

Liegt das daran weil der Timer 8 bit hat und damit von 0 bis 256 Zählt? Dann wäre die MItte 128 ... Und wo is der zusammenhang Port B und PWM?

edit: seh gerade http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#PWM_.28Pulsweitenmodulation.29 das hier ^^ das is das was ich suchte ... wieso is mir das nie aufgefallen