UART - ATMEGA problém

Dobrý den,
zkouším komunikaci přes rozhraní UART mezi dvěma aTmegama a vůbec mi to nefunguje. Použil jsem tu nejjednodušší možnost z datasheetu a snažím se odeslat znak do druhé aTmegy. Druhá atmega by měla znak příjmout a podle toho jaký to je znak by měla buď zapnout nebo vypnout LED. První atmega posílá jednolivé znaky s odstupem jedné vteřiny, takže by to mělo po vteřínách blikat. Nechápu co na tom nefunguje. Spojil jsem vývody RX a TX přímo drátem. Ještě dodám, že mikroprocesor, který je Master je aTmega164p a Slave je aTmega328p. CLKDIV8 jsem u obou mikropočítačů vypnul.

Nemá někdo nějakou radu? Už si s tím hraju 2 dny a nelze nic poslat. Jenom nějaký šum přijímám.
main.c (1.11 KB)
main.c (1.07 KB)

Rx na tx a tx na rx?

Ano, mám to takto

A máš použitý správný UART ? ATmega164 má dva.

Nainstaluj simulator Proteus 8.x
A vies posielat data. Aj prjimat terminalmi.
Pekne si to odsimulujes, tot tam snad funguje lebo i2c tam nechodi dobre.

Ano, používám správný. Ten proteus zkusím. Díky moc za radu

Když se podíváš do main() u mastera, tak máš zakomentovaný volání inicializace UARTu …

Díky, už jsem to rozchodil, ale stejně to není to co potřebuju. Koupil jsem si 2 atmegy8 a zkoušel jsem USART mezi nimi. Samozřejmě to hned šlo. Potom jsem to zkoušel s těma deskama co mám hotový a nešlo to. Začalo to fungovat, až když jsem měl společnou zem. Nemuselo bejt ani stejný napájení(3,9V a 5V), ale ta zem prostě musela bejt společná. Nevíte co s tím?

Já to mám na bezdrátovou komunikaci pomocí RF modulů, který běží na 433MHz. Teď když už jde USART na drátu, tak by to běžet mělo, ale neběží. Možná mám vadné moduly, tak je zkusím koupit, stojí pár korun, ale ta společná zem mě zaráží.

To, že potřebuješ společnou zem pro spojení po drátu je úplně normální jev - proud, který teče do drátu tam, musí mít taky kudy se vrátit. A to se děje buď po společný zemi nebo po nějakém druhém drátu. Když připojíš zařízení na plus baterky, tak nebude fungovat, dokud nepřipojíš i mínus - to je úplně to samé. Pro spojení po bezdrátu jsou důležitá trošku jiná pravidla. Tam sice společnou zem nepotřebuješ (na druhou stranu - když se na to podíváš hodně zeširoka, tak tam tu společnou zem máš taky), ale pořebuješ filtrovat to, co Ti po UARTu přichází. Přijímací modul totiž aby fungoval, musí přijatý signál nějak zpracovat - zesílit, demodulovat atd. Jenže ten modul nemá ani ponětí, jestli to, co chytá je signál pro něj nebo cokoliv jiného z okolí. Zpracovává tedy vše, co anténa pochytá. Na výstupu to pak vypadá, že z přijímače lezou nějaký data trvale a Ty je musíš v procesoru nějak filtrovat. Musíš tedy na vysílači odeslat preamble v nějakém definovaném tvaru tak, aby z přijímače začaly lézt data, která vysíláš a zároveň se z nich mohl přijímací UART synchronizovat - proto preamble. Jakmile z přijímače dostaneš preamble, počkáš na značku, která znamená, že následují data a můžeš začít přijímat přenášená data.

S tou baterkou to chápu, že bez mínus to nebude fungovat, ale když mám 2 atmegy na nezávislých napájeních, obě připojený samozřejmě na plus a mínus, tak jsem myslel, že to půjde.

S tím bezdrátovým přenosem díky. Zkusím si s tím pohrát a rozjet to. Případně něco pohledat na netu.

Můžeš se podívat třeba i tady : https://forum.mcontrollers.com/t/rx868fsk1-tx868fsk1-funkce-a-spolehlivost-spojeni/717/1
Probírali jsme to zde taky.

Bezdrátová komunikace je mnohem náročnější na znalosti, pochopení principů a dodržování pravidel. Pokud nevíš, že ke komunikaci po drátě potřebuješ vytvořit napěťový potenciál (ten nese informaci) a tudíž dva dráty, tak nevím nevím. Add RF moduly - některé moduly jsou absolutně hloupé a chovají se přibližně jak popisuje Balů a některé vyžadují pozornost procesoru jen když přijmou správná data (např. SI4468). Ty se zase musejí precizně zkonfigurovat. Co máš na stole nevím.

“Začalo to fungovat, až když jsem měl společnou zem.”

Signal z procesora UARTU je v kludovom stave log. 0 (cca < 0.5V) alebo log.1 (cca >4V pri 5V Ucc)

ALE VOCI COMU JE TO NAPATIE?

c je spravne. Voči zemi.

Odkiaľ má druhý procesor vedieť že na jeho vstupe niečo “poskakuje” keď to niečo neposkakuje voči jeho zemi? No odnikadiaľ a preto nič neprijíma.

Na prenos RX a TX cez 2 droty bez prepojenia zemi môžeš použiť rozhranie RS422 alebo RS485.
Tam sa napätie vyhodnocuje len voči dvom vodičom. Pri RS485 ale nemôžeš naraz aj vysielať a aj prijímať. Buď jedno alebo druhé. Prepínanie smeru si robia procesory sami - teda softver to musi zabezpečiť.

Budiče na RS422 a RS485 sú prakticky rovnaké.
Výhoda je veľká odolnosť a bezpečný dosah až do mnoho sto metrov až kilometrov.

Držím palce, daj vedieťako postupuješ

1 Like

Tak jsem to rozjel. Vyměnil jsem RF moduly a běhá to. Prvně jsem používal tyto: gme.cz/modul-vysilac-prijimac-433mhz
Na netu je s nima hodně návodů, ale nefungovalo to stabilně. Rozjel jsem to, ale pak to zase přestalo fungovat a bylo to takový všelijaký. Vyměnil jsem je za tyto moduly: gme.cz/prijimac-433mhz-srx882-ask
gme.cz/vysilac-433mhz-stx88 … ym-vykonem
Ten přijímač má už vlastní krystal, takže si myslím, že je to tím. Mám to zatím v nepájivým poli, ale funguje to zatím dobře. Budu to ještě testovat, tak můžu pak dát vědět, jestli to běhá stabilně nebo ne.

1 Like

A na aku vzdialenost to testujes a na aku to chces prenasat.

Stačí mi, aby to fungovalo na 10 metrů a to funguje. Víc jsem nezkoušel.