Odeslat nové téma Odpovědět na téma  [ Příspěvků: 6 ] 
Autor Zpráva
 Předmět příspěvku: Dekódování PPM obecně
PříspěvekNapsal: sob 13.07.2013 16:56 
Moderátor serveru
Moderátor serveru
Uživatelský avatar

Registrován: 28.2.2005
Příspěvky: 20822
Bydliště: Rakovník, CZ
Obrázky: 0
Mohl by mi někdo znalý naznačit slovně, jak se dekóduje PPM signál? Chtěl bych si ulepit vlastní dekodér; sice něco mám, ale dost kostrbatě. Budu to dělat v PICBasicu, tak prosím slovně, v bodech, jak to probíhá v procesoru (jakémkoli).

Zatím jsem vypotil jen toto:
detekovat synchronizační mezeru (přerušení, časovač, ...)
příchodem prvního impulzu po mezeře nahodit 1 na prvním výstupu
příchodem dalšího impulzu první výstup shodit na 0 a nahodit 1 na druhém
....
detekováním synchronizační mezery vynulovat čítač pořadí impulzů a po mezeře to samé dokola...

než to začnu datlovat, mohlo by to tak fungovat?
Ono je to vlastně obdoba klasického dekodéru s posuvným registrem, resetovaného mezerou (RC článek...) ...
Příloha:
4017_decoder_harry1.gif
4017_decoder_harry1.gif [ 2.02 KiB | Zobrazeno 10467 krát ]

Vím že to tu už bylo, dá se najít plno věcí i jinde, ale to bych musel nejdřív nastudovat příkazy těch jazyků ve kterých to lidi psali, abych pochopil funkci...

_________________
jyrry.webnode.cz


Nahoru
 Profil  
 
 
 Předmět příspěvku: Re: Dekódování PPM obecně
PříspěvekNapsal: sob 13.07.2013 17:10 
Mazák
Mazák
Uživatelský avatar

Registrován: 22.2.2010
Příspěvky: 11876
Bydliště: ČR
Obrázky: 1
Inspiruj se z jednoduchého příkladu zdrojáku pro Arduino demonstrujícího obecné čtení PPM signálu viz tento odkaz.


Nahoru
 Profil Soukromé album  
 
 Předmět příspěvku: Re: Dekódování PPM obecně
PříspěvekNapsal: sob 13.07.2013 17:36 
Moderátor serveru
Moderátor serveru
Uživatelský avatar

Registrován: 28.2.2005
Příspěvky: 20822
Bydliště: Rakovník, CZ
Obrázky: 0
jestli jsem dobre pochopil syntaxi, tak pri kazdem impulzu prectu (a vynuluji) timer a pokud je cas do pristiho impulzu v relaci 510us-1910us, tak ten cas zapisu do pole a navysim index prvku pole; kdyz je ten cas delsi, vynuluji index a jedu znova... ju?
Pak muzu pracovat s hodnotami jednotlivych kanalu, mne zatim staci je rovnou posilat na vystupy...
Ono mi totiz i u 6k prijimace leze ven uplne PPM 12k a tak muzu hlavni fce ridit primo z prijimace a blbinky si expandovat az do 12k... :-)

_________________
jyrry.webnode.cz


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Dekódování PPM obecně
PříspěvekNapsal: sob 13.07.2013 18:26 
Mazák
Mazák
Uživatelský avatar

Registrován: 22.2.2010
Příspěvky: 11876
Bydliště: ČR
Obrázky: 1
jyrry píše:
jestli jsem dobre pochopil syntaxi, tak pri kazdem impulzu prectu (a vynuluji) timer a pokud je cas do pristiho impulzu v relaci 510us-1910us, tak ten cas zapisu do pole a navysim index prvku pole; kdyz je ten cas delsi, vynuluji index a jedu znova... ju?

V podstatě ano. Pro jistotu uvedu svůj popis.

V každém přerušení k němuž dochází při změně na příslušném PPM pinu tj. ať už dojde ke změně stavu z 0 na 1 nebo z 1 na 0 tak je vyvolána funkce napojená na příslušné přerušení v daném případě je to funkce read_ppm().

Ve funkci read_ppm() vždy nejprve uložíš hodnotu čítače TCNT1 do proměnné counter. Pak TCNT1 vynuluješ. TCNT1 automaticky čítá s periodou 0,5 mikrosekundy.

Je-li hodnota counter < 1020 (tj. 510 us) uložíš ji do proměnné pulse a nic víc.

Je-li hodnota counter > 3820 vynuluješ proměnnou channel, která je index do pole dá se říct kanálů.

Je-li hodnota counter v rozmezí 1020 až 3820 (tj. 510us až 1910us) tak se na index pole channel zapíše hodnota odpovídající polovině ze sumy aktuální hodnoty counter a dříve uložené hodnoty v proměnné pulse přičemž proměnná pulse se po nastavení na nějakou nenulovou hodnotu nevynuluje dokud nenastane situace kdy bude hodnota counter nulová a tak se při každém dalším průchodu kdy je counter v rozmezí 1020 až 3820 hodnota pulse přičítá k hodnotě counter.

Všechny proměnné deklarované uvnitř funkce read_ppm() (tj. pulse, counter a channel) jsou static což znamená, že před prvním voláním kódu jsou automaticky vynulovány, ale i když jsou napsány uvnitř funkce tak z hlediska udržení naposledy nastavené hodnoty se chovají jako by byly globální tj. jako by byly napsané mimo funkci podobně jako pole ppm akorát s tím rozdílem, že nejsou přímo přístupné mimo funkci read_ppm().

Jakmile se tedy některá z těchto static proměnných nastaví na nějakou hodnotu tak ta hodnota v ní zůstává v platnosti i při následném volání funkce read_ppm() do té doby dokud uvnitř této funkce není změněna.

Kód:
int ppm[16];

...

// Funkce přerušení
void read_ppm()
{
  static unsigned int pulse;
  static unsigned long counter;
  static byte channel;

  counter = TCNT1;
  TCNT1 = 0;

  if (counter < 1020) {
    pulse = counter;
  } else if (counter > 3820) {
    channel = 0;
  } else {
    ppm[channel] = (counter + pulse) / 2;
    channel++;
  }
}


Nahoru
 Profil Soukromé album  
 
 Předmět příspěvku: Re: Dekódování PPM obecně
PříspěvekNapsal: sob 13.07.2013 23:47 
Moderátor serveru
Moderátor serveru
Uživatelský avatar

Registrován: 28.2.2005
Příspěvky: 20822
Bydliště: Rakovník, CZ
Obrázky: 0
diky moc

ta hodnota pulse eliminuje sirku impulzu v PPM, predpokladam. To nahradim reakci jen na nabeznou hranu signalu (budu predpokladat jen kladne impulzy). Jinak to asi pobiram, jen nevim proc je hranice zrovna 1910us kdyz to muze jit jeste dal; ale to uz je jen cisilko...

_________________
jyrry.webnode.cz


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Dekódování PPM obecně
PříspěvekNapsal: pon 20.08.2018 17:56 
Nováček serveru
Nováček serveru

Registrován: 14.11.2011
Příspěvky: 1
Jedna hotová možnost s PIC16F630 je na
http://www.ivanb.wz.cz/PPM-dekoderPIC630.htm


Nahoru
 Profil  
 
Zobrazit příspěvky za předchozí:  Seřadit podle  
Odeslat nové téma Odpovědět na téma  [ Příspěvků: 6 ] 

 


Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 5 návštevníků


Nemůžete zakládat nová témata v tomto fóru
Nemůžete odpovídat v tomto fóru
Nemůžete upravovat své příspěvky v tomto fóru
Nemůžete mazat své příspěvky v tomto fóru
Nemůžete přikládat soubory v tomto fóru

Hledat:
Přejít na:  

 

  Powered by phpBB® Forum Software © phpBB Group  Český překlad – phpBB.cz 

 

NAVRCHOLU.cz