RF komunikace mezi 2 AVR

Ahoj, nemá někdo ověřený program v Cčku pro RF komunikaci s vyřešeným protokolem ? zkoušel jsem program z těchto stránek:
winavr.scienceprog.com/example-avr-projects/running-tx433-and-rx433-rf-modules-with-avr-microcontrollers.html
Vysílač nejspíše fungoval, protože po jeho zapnutí jsem na výstupu RX modul chytal obdelníkový signál a po vypnutí jen šum.

Problém mám ale hlavně s příjimačem, jako první zradu jsem zjistil ve vektoru přerušení. Místo ISR(USART_RXC_vect) musí být ISR(USART__RXC_vect) (divné že na to kompilátor neupozornil, používám Winavr překladač).
Ale ani po této úpravě program nefunguje a připadá mi to, že procesor je neustále v rutině přerušení a kvuli šumu nedokáže přijmout správně data, nebo nevím, ohledně RF komunikace toho moc nevím a teprve se je učím.

Moc by mi pomohlo kdyby jste měl někdo funkční kod, nebo mě nakopli kde by mohl být problém s výše uvedeným příkladem, díky.

Už se to tady probíralo. Z přijímače pořád nějaká data lezou. Je to “přeložený” šum z okolí. Jakmile zapneš vysílač, tak signál vysílače tenhle šum potlačí a dostaneš na vstupu data, která jdou z vysílače. Jakmile vysílač vypneš, postupně se na lince opět objeví šum. Dělám to tak, že přijímám data trvale, až dostanu posloupnost 0x00 (ve starších diskuzích najdeš 0x55). Jakmile je jich alespoň 10 za sebou, vím, že můžu začít přijímat data. První byte označuje začátek dat = startovací byte (například 0xDD) a za ním následují data. Pokud první byte není startovací byte (není 0xDD), tak sekvenci zahazuju a čekám na další posloupnost minimálně 10x 0x00 a nový startovací byte. Vysílat 0x00 jako preamble má několik výhod. Jednak není mezi bity žádná sestupná hrana (kromě start bitu), tudíž se lépe synchronizuje přijímač s vysílačem a jedna lze z délky log. 0 na vstupu určit rychlost přenosu, pokud není pevně daná. Pokud je pak možno, tak vysílač je nastaven na 8N2, přijímač na 8N1. Tím dochází v podstatě k automatické synchronizaci přijímače s vysílačem během celého přenosu dat a není tím pádem nutné dělat synchronizační mezery mezi jednotlivými byty nebo není nutné dlouhé přenosy dělit na kratší pakety. Není ani nutné použití krystalů.

Data tím pádem musíš trvale přijímat, analyzovat a zahazovat nebo zpracovávat podle toho, co dorazilo.

Dělal jsem komunikaci 2xAVR s moduly RFM12B s obsluhou přes přerušení, ale v assembleru.
Mám dotaz k synchronizaci USART, v dokumentaci se píše, že přijímač ignoruje nastavení dvou stop bitů a vyhodnocuje jen ten první stop bit, takže když nastavím dva stop bity v obousměrné komunikaci, měla by probíhat synchronizace po každém bajtu a v obou směrech. Je to tak?

Nevím, jak USART v AVRku souvisí s modulem RFM12B, který se ovládá pomocí SPI. Nicméně v dokumentaci AVRka opravdu píšou, že přijímač ignoruje 2. STOP bit. Otázkou je, jestli jen ignoruje jeho stav (1/0) nebo jestli po prvním STOP bitu už ukončuje příjem bytu a začíná čekat na START bit. Pokud jenom ignoruje jeho stav a START bit začíná detekovat až po uplynutí času STOP bitu, pak obousměrná synchronizace fungovat nemusí. Pokud ho ale ignoruje úplně a po prvním STOP bitu začne čekat na nový START bit, pak to fungovat bude.

USART a RFM12B spolu nesouvisí. Komunikaci USART jsem dělal před RF komunikací, narazil jsem na problémy s komunikací při použití interních RC oscilátoru a použít 2 STOP bity mě nenapadlo, jak se k tomu vrátím vyzkouším. Díky za radu.