Vielleicht bringts dir (oder anderen was)...
Beispielcode:
Und hier die PWM.h:Code:#include "PWM.h" /** * @brief This function sets a PWM duty-cycle value. * @param pwmc - specifies PWM channel (A, B, C) * @param value - duty-cycle value (0..255) * @note Values below 0 result in a duty-cycle value of 0, * values higher than 255 will be set to 255! **/ void setPWM(char pwmc, int value) { int pwmdc; //pwm duty-cyle value if (value > 255) value = 255; else if (value < 0) value = 0; pwmdc = 255 - value; // set PWM if ((pwmc)=='A') { OCR1A = pwmdc; PWM_value[0]=value; } else if ((pwmc)=='B') { OCR1B = pwmdc; PWM_value[1]=value; } else { pwmc ='C'; OCR1C = pwmdc; PWM_value[2]=value; } } /** * @brief This small function returns the duty-cylce value for a PWM outport. * @param c - specifies PWM channel * @return duty-cycle value for PWM channel * @retval 0..255 * @see InterpreteCommand() **/ int getPWM(int c) { return PWM_value[c]; } /** * @brief PWMinit configurates the onboard PWM controller. **/ void PWMinit(void) { int i; i = 0x00FF; TCNT1 = i; //set TimerCounter i = 253; TCCR1A = i; //set compare output mode and waveform generation mode i = 9; TCCR1B = i; //set ClockSource and waveform generation mode //set PWM outputs for (i=0;i<3;i++) { PWM_value[i] = 0; setPWM((i+65), 0); } i = 0x00FF; //set all duty-cycles to 0% OCR1A = i; OCR1B = i; OCR1C = i; TCCR1C = (128+64+32); // activate PWM outports OC1A, OC1B and OC1C }
Hab das mal bei einem ATmega128 verwendet auf dem Ethernut2.1 Board (www.ethernut.de) und unter NutOSCode:/** * @var PWM_value * Array containing current PWM outport values. **/ int PWM_value[3]; void setPWM(char pwmc, int value); int getPWM(int c); void PWMinit(void);
Gruß,
Cypax







Zitieren

Lesezeichen