NWm 发表于 2013-7-10 14:16:08

PPM信号程序 ppm输出不对

程序如下:
#define PPMCH                 8

#define LED 13
#define PPMOUT 8

unsigned int ppm1 = {
0, 1500, 1500, 1500, 1900, 1500, 1500, 1500, 1500};
unsigned int ppm2 = {
0, 1500, 1500, 1500, 1900, 1500, 1500, 1500, 1500};
unsigned int ppmout = {
0, 1500, 1500, 1500, 1900, 1500, 1500, 1500, 1500};


void PPM_ISR0(void)
{
volatile static char ch;
static unsigned lastmicros;
unsigned mic = micros();
if(digitalRead(2) == HIGH)
{
    if(mic - lastmicros>3000)
    {
      ch = 0;
    }
    ppm1 = mic - lastmicros;
    lastmicros = mic;
    ch = (++ch)%(PPMCH+1);
}
}
void PPM_ISR1(void)
{
volatile static char ch;
static unsigned lastmicros;
unsigned mic = micros();
if(digitalRead(3) == HIGH)
{
    if(mic - lastmicros>3000)
    {
      ch = 0;
    }
    ppm2 = mic - lastmicros;
    lastmicros = mic;
    ch = (++ch)%(PPMCH+1);
}
}
void setup(void)
{
Serial.begin(57600);
pinMode(2, INPUT_PULLUP);
pinMode(3, INPUT_PULLUP);
pinMode(PPMOUT, OUTPUT);
digitalWrite(PPMOUT, HIGH);
attachInterrupt(0, PPM_ISR0, CHANGE);
attachInterrupt(1, PPM_ISR1, CHANGE);
}
void loop(void)
{
unsigned int timecount = 0;
for(int i=0; i<=PPMCH; i++)
{
   
    if(i < 6)
    {
      if(ppm1 > 900 && ppm1 < 2100)
      ppmout = (ppm1 + ppmout)/2;
    }
   
   
else
    {
      if(ppm2 > 900 && ppm2 < 2100)
      ppmout = (ppm2 + ppmout)/2;
    }
   
    ppmout = 1900;
}
timecount = 0;
for(int i=1; i<=PPMCH; i++)
{
   
    digitalWrite(PPMOUT, LOW);
    delayMicroseconds(300);
    digitalWrite(PPMOUT, HIGH);
    delayMicroseconds((ppmout/3)*2);
    timecount += ppmout;
    //*/
}

digitalWrite(PPMOUT, LOW);
delayMicroseconds(300);
digitalWrite(PPMOUT, HIGH);
delay((23000-timecount)/1000);

}
现在输出的波形用另外一个arduino接上上位机测试(实际上就是一个mwc的例程)检测输出波形呈正弦小范围波动    不知道是为什么

这段代码里面把ppm输出改成串口输出读入的ppm值可以正常显示..... 不知道错在哪里求指教

路遥~倒转回忆 发表于 2013-8-18 12:32:10

解释一下代码?
页: [1]
查看完整版本: PPM信号程序 ppm输出不对