PPM generator

Jak generovat PPM protokol co se používá při RC modelech.
Potřeboval bych nasměrovat jak to průběžně přepočítat pod vystup časovače.

A co potřebuješ generovat? Celý rámec pro několik kanálů nebo signál pro jeden kanál?

Potřebují celý rámec 8 kanálu jako na tomto obrázku aerodesign.de/peter/2000/PCM/frame_ppm.gif

Dělal jsem dekodér do přijímače, tak si to prohlídni. časovač 0 je pro měření délky impulsů z vysílače, 1 generuje impulsy na jednotlivých výstupech přijímače a 2 odměřuje 20ms rámce. Ty potřebuješ ale funkci kodéru. Takže použiješ jeden časovač pro 20ms a druhý pro generování 8 impulsů. Po přetečení prvního nastartuješ druhý časovač, nastavíš mu dobu do přetečení prvního kanálu a nastavíš výstup na 1, počkáš na přetečení, nastavíš na mezeru 320us , shodíš výstup na 0, počkáš na přetečení a znova pro další kanál.
PPMdekoder.zip (2.65 KB)

Našel sem něco takového github.com/Hasi123/generate-ppm … y.inojenom to potřebují přeložit do C
Tady sem začal ale výstupu OC1A je jenom LOG 1 neměl by se mi tam objevit start puls

[code]#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>

uint16_t chanel[7];

int main (void){

DDRA |= (1<<PA0);       //LED

DDRD |= (1<<PD5);

// TCCR1A |= (1<<COM1A1) | (1<<COM1A0); // set polarity 1
TCCR1A |= (1<<COM1A1); // set polarity 0

OCR1A = 100;  // compare match register, change this
TCCR1B |= (1 << WGM12) | (1 << WGM13) | (1 << WGM11) | (1 << WGM10);  // turn on CTC mode
TCCR1B |= (1 << CS11);  // 8 prescaler: 0,5 microseconds at 16mhz
TIMSK |= (1 << OCIE1A); // enable timer compare interrupt

sei();

while(1){

	_delay_ms(500);
    PORTA ^= (1<<PA0);  //LED

}

}

ISR(TIMER1_COMPA_vect){

static uint8_t state = 1;

TCNT1 = 0;

if(state){
	TCCR1A |= (1<<COM1A1) | (1<<COM1A0);     // set polarity 1
    OCR1A = 600;
    state = 0;

}
else{
	TCCR1A |= (1<<COM1A1);                  // set polarity 0
	state = 1;

}

}[/code]