Kommentar: Einfügen von HTML im Kommentar: Link einfügen: <a href="LINKURL" target="_blank">LINKTITEL</a> Bild einfügen: <img src="BILDURL"> Text formatieren: <b>fetter Text</b> <i>kursiver Text</i> <u>unterstrichener Text</u> Kombinationen sind auch möglich z.B.: <b><i>fetter & kursiver Text</i></b> C Quellcode formatieren: <code>Quellcode</code> BASIC Quellcode formatieren: <basic>Quellcode</basic> (Innerhalb eines Quellcodeabschnitts ist kein html möglich.) Wichtig: Bitte mache Zeilenumbrüche, bevor Du am rechten Rand des Eingabefeldes ankommst ! -> I > Hallo, > > ich habe die Lösung selbst herausgefunden.Hier die Anleitung und Source-Code dazu. > Einfach neues Projekt in der IDE anlegen, 'Main.cc' hinzufügen und folgenden Source-Code hineinkopieren. > Der Servo läuft zuerst in die Mittelstellung dann 90 Grad nach links und anschließend um 180 Grad nach rechts. > > Viel Spaß. > Macianer > > /* > > SERVO ANSTEUERUNG / Pulsweitenmodulation (PWM) > > //----------------------- > void Timer_T1PWM(word period,word PW0,byte PS); > > Diese Funktion initialisiert den Timer1 mit dem angegebenen Vorteiler, > Pulsweite und Periodendauer, siehe Tabelle . > Die Ausgangssignale erscheinen an Mega32: PortD.4 (PIN18) und PortD.5 (PIN19). > Mega128: PortB.5 (X1_3) und PortB.6 (X1_2). > > > Periode=Period*PS/FOSC (100*64/14,7456MHz=434 µs) > > Period legt die Länge des Signals fest > PW0 gibt an wie lange Kanal A,B high ist, rest der Periode ist low > > <PW> > ___ > | | > | | > _| |__________________ > > <---Periodenlänge-------> > > Über den Timer Prescaler wird das Teilungsverhältnis (Oszillatorfrequenz/ps) > festgelegt. (14,7456MHz/ps) > > 'Vorteiler (prescaler) Zeitbasis (Dauer eines Ticks) > 'ps_1 (1) 67,8 ns > 'ps_8 (2) 542,5 ns > 'ps_64 (3) 4,34 µs > 'ps_256 (4) 17,36 µs > 'ps_1024 (5) 69,4 µs > > > -------------------------------------------------------- > Gängige Periode Servo: 10 - 20 ms > Gängige Impulsbreite am Servo: 0,7 - 2,2 ms > > -------------------------------------------------------- > Beispiel am Servo: MODELCRAFT TS-11 MG DIGI LINE (Conrad) > > Lagerart: Gleitlager > Abm.: (L x B x H) 19 x 7.5 x 15.6 mm > Stecksystem: JR > Getriebe: Metall > Typ: 6 > Stell-Zeit bei 4,8 V: 0.12 s / 50 ° > Stell-Zeit bei 6 V: 0.10 s / 50 ° > Stell-Moment bei 4,8 V: 10 Ncm > Stell-Moment bei 6 V: 12 Ncm > Gewicht: 5.5 g > > Stromaufnahme: > 300mA > > ------------------------- > Anschluss Servo: > > rot (+) //eigener Stromkreis (z. B. Netzgerät 4,8 - 6 V Gleichspannung) > braun (-) //ist mit Ground (GND) am Application Board zu verbinden > orange (puls) // inkl. Vorwiderstand 1k Ohm an PortD.4 (PIN18) oder PortD.5 des Application Boards verbinden > > */ > > word periode; > word maxLeftPos; > word midPos; > word maxRightPos; > > void main(void) > { > Port_DataDirBit(PORT_SW1,PORT_IN); > Port_DataDirBit(PORT_LED1,PORT_OUT); > Port_DataDirBit(PORT_LED2,PORT_OUT); > Port_WriteBit(PORT_LED1,PORT_OFF); > Port_WriteBit(PORT_LED2,PORT_OFF); > > // 217 * 69,4 µs = 15.06848 ms > periode = 217; > > //7 * 69,4 µs = 0.48608 ms (-90 Grad) > maxLeftPos = 7; > > //19 * 69,4 µs = 1.31936 ms (0 Grad) > midPos = 19; > > //30 * 69,4 µs = 2.0831 ms (+90 Grad); > maxRightPos = 30; > > //loop > while(1) > { > // if switch SW1 'on' > if( Port_ReadBit(PORT_SW1) == 0 ) > { > move(); > } > } > } > > void move(void) > { > > //start Timer, move to mid position > Timer_T1PWM(periode, midPos, PS0_1024); > Port_WriteBit(PORT_LED1,PORT_ON); > > //Short Pause > AbsDelay(1500); > > //move to max. left position > Timer_T1PWA(maxLeftPos); > Port_WriteBit(PORT_LED1, PORT_OFF); > > //Short Pause > AbsDelay(1500); > > //move to max. right position > Timer_T1PWA(maxRightPos); > Port_WriteBit(PORT_LED2, PORT_ON); > > //Short Pause > AbsDelay(1500); > > //stop Timer (output) > Timer_T1Stop(); > Port_WriteBit(PORT_LED2, PORT_OFF); > } > > > > > > > > > Hallo, > > > > ich versuche einen Servo mittels Pulswellenmodulation anzusteuern. > > > > In der IDE-Hilfe habe ich folgendes dazu gefunden: > > ----------------------------------------------- > > Timer0 (8 Bit): > > Beispiel: Pulsweitenmodulation mit 138,9 µs Periode und 5,42 µs Pulsweite, geändert auf 10,84 µs Pulsweite > > // Puls: 10*542,5 ns = 5,42 µs, Periode: 256*542,5 ns = 138,9 µs > > > > Timer_T0PWM(10,PS0_8); > > ----------------------------------------- > > > > Für den Servo ist eine Periode zwischen 10 - 20ms und eine Pulsweite von 1 - 2ms geforderdert. > > Wie komme ich zu diesen Werten und wie könnte ein Beispielcode in C dafür aussehen. > > > > Ein anderes Beispiel hatte ich <a href="http://www.c-control.de/c-control-pro/applikationen/servos_ansteuern.html">hier</a> gefunden leider nur in Basic und ohne PWM. > > > > > >