Hi Jens,
wieviele motoren willst du den betreiben ? 6?
ich kenne mich auch mit Bascom und basic nicht aus
aber wenn du 6 motoren betreiben willst würde ich dir emphelen die ersten 2 mit timer 0 direkt per HW PWM zu betreiben und dann jeweils 2 mit einem 16-bit comperator mit software PWM .. bei meinen tests flogen die copter schon mit SW PWM nur eben nicht ganz so gut..
ich gehe mal von 16MHz aus
timer 1 einstellen .. im normal mode leuft der ja bis 65535 hoch .. eine MS ist dann 16000 also ist das prinziep
- pin1 high
- 0-1ms(der duty wert von motor 1) warten .. der high wert
- pin 2 Low
- 1ms-(duty von pin 2) der .. der low wert
- pin 2 high
- 0-1ms (der duty wert von motor 2) warten
- pin 1 low
- 1ms - (der duty wert von motor 1) warten
[edit] hier war ein fehler in dem schema.. jetzt ises richtig[/edit]
das dann halt mit coperator A und B von timer 1
mann muss en bischen gucken das die duty times nie zu nah an 0 sind .. sonst zitterts mit anderen interrupts .. wir haben dafür die frequenz auf 500hz erhöt und so halt nur ein maximal signal von ~1950 .. was aber meisstens reicht
hier der C code wie wie wir das SW PWM in Multiwii machen.. leuft so mit ~488Hz
Code:
ISR(SOFT_PWM_ISR1) {
static uint8_t state = 0;
if(state == 0){
SOFT_PWM_1_PIN_HIGH;
SOFT_PWM_CHANNEL1 += atomicPWM_PIN5_highState;
state = 1;
}else if(state == 1){
SOFT_PWM_2_PIN_LOW;
SOFT_PWM_CHANNEL1 += atomicPWM_PIN6_lowState;
state = 2;
}else if(state == 2){
SOFT_PWM_2_PIN_HIGH;
SOFT_PWM_CHANNEL1 += atomicPWM_PIN6_highState;
state = 3;
}else if(state == 3){
SOFT_PWM_1_PIN_LOW;
SOFT_PWM_CHANNEL1 += atomicPWM_PIN5_lowState;
state = 0;
}
}
mit I2C PWM dinger kenne ich mich auch net aus .. weiss nur das viele, die extra für Servos gemacht sind auch nur irgentwie 50Hz können
.. hoffe das hilft 
gruß
felix
Lesezeichen