V tomto kurzu se chystáme navázat sériovou komunikaci mezi dvěma mikrokontroléry ATMEGA8. Komunikace zde navázaná je typu UART (Universal Asynchronous Receiver Transmitter). Díky této sériové komunikaci lze data sdílet mezi dvěma mikrokontroléry, což je vyžadováno v různých vestavěných systémech.
Požadované komponenty
Hardware: ATMEGA8 (2 kusy), napájecí zdroj (5 V), AVR-ISP PROGRAMÁTOR, kondenzátor 100 uF (připojený přes napájecí zdroj), rezistor 1 KΩ (dva kusy), LED, tlačítko.
Software: Atmel studio 6.1, progisp nebo flash magic.
Schéma zapojení a vysvětlení
Rozumíme sériové komunikaci v mikrokontrolérech AVR. Zde ATMEGA posílá data do druhého ATMEGA sériově. Má jiný způsob komunikace, ale pro snadnou komunikaci volíme RS232. Pin RS232 první ATMEGA8 je připojen k RXD kolíku druhé ATMEGA8.
Navázaná datová komunikace je naprogramována tak, aby měla:
- Osm datových bitů
- Dva stop bity
- Žádný bit kontroly parity
- Přenosová rychlost 2400 BPS (bitů za sekundu)
- Asynchronní komunikace (žádné sdílení hodin mezi dvěma ATMEGA8)
Takže máme dva nastavené registry pro dva ATMEGA8 odlišně, kde jeden funguje jako VYSÍLAČ a druhý jako PŘIJÍMAČ.
Nyní pro rozhraní RS232 mezi dvěma mikrokontroléry ATmega musí být pro VYSÍLAČ a PŘIJÍMAČ splněny následující funkce:
1. Pin TXD (funkce přijímání dat) prvního řadiče musí být povolen pro VYSÍLAČ a pin RXD druhého řadiče musí být povolen pro PŘIJÍMAČ.
2. Jelikož je komunikace sériová, musíme vědět, kdykoli je datový bajt přijat, abychom mohli program zastavit, dokud nebude přijat celý bajt. To se provádí povolením úplného přerušení přijímání dat.
3. DATA jsou přenášena a přijímána do řadiče v 8bitovém režimu. Do řídicí jednotky budou tedy odeslány současně dva znaky.
4. V datech odeslaných modulem nejsou žádné paritní bity, jeden stop bit.
Výše uvedené funkce jsou nastaveny v registrech řadiče; budeme o nich krátce diskutovat,
DARK GREY (UDRE): (TRASMITTER SIDE) Tento bit není nastaven během spouštění, ale používá se během práce ke kontrole, zda je vysílač připraven vysílat nebo ne. Další informace najdete v programu na TRASMITTER SIDE.
LIGHT GREY (RXC): (RECEIVING SIDE) Tento bit není nastaven během spuštění, ale používá se během práce ke kontrole, zda je přijímač připraven přijímat data nebo ne. Další informace najdete v programu na PŘÍJEMI.
VOILET (TXEN): (TRASMITTER SIDE) Tento bit je nastaven pro povolení pinu vysílače na TRASMITTER SIDE.
ČERVENÉ (RXEN): (PŘIJÍMACÍ STRANA) Tento bit představuje funkci přijímání dat, tento bit musí být nastaven pro data z modulu přijímaná kontrolérem, umožňuje také pin RXD kontroleru.
BROWN (RXCIE): Tento bit musí být nastaven pro získání přerušení po úspěšném příjmu dat. Povolením tohoto bitu se seznámíme hned po 8bitovém příjmu dat. Nebudeme zde tento bit používat, takže zůstane sám.
PINK (URSEL): Tento bit musí být nastaven před povolením dalších bitů v UCSRC, po nastavení dalších potřebných bitů v UCSRC; URSEL musí být deaktivován nebo vynulován. Nebudeme zde tento bit používat, takže zůstane sám.
ŽLUTÁ (UCSZ0, UCSZ1, UCSZ2): (STRANA PŘÍJMU A STRANA TRASMITTERU) Tyto tři bity se používají k výběru počtu datových bitů, které přijímáme nebo odesíláme najednou.
Komunikace mezi dvěma ATMEGA je navázána jako osmibitová komunikace. Porovnáním komunikace s tabulkou máme UCSZ0, UCSZ1 s jednou a UCSZ2 s nulou.
Musíme je nastavit na přijímací i vysílací straně.
ORANGE (UMSEL): (RECEIVING SIDE & TRASMITTER SIDE) Tento bit je nastaven na základě toho, zda systém komunikuje asynchronně (oba používají různé hodiny) nebo synchronně (oba používají stejné hodiny).
Oba řadiče nesdílejí žádné hodiny. Protože oba používají vlastní vnitřní hodiny. Musíme tedy nastavit UMSEL na 0 v obou řadičích.
ZELENÁ (UPM1, UPM0): (PŘÍJEMOVÁ STRANA & TRASMITTEROVÁ STRANA) Tyto dva bity jsou upraveny na základě bitové parity, kterou používáme v komunikaci.
ATMEGA je naprogramován tak, aby odesílal data bez parity, protože délka přenosu dat je malá, a proto můžeme jasně očekávat, že nedojde ke ztrátě ani chybě dat. Takže zde nenastavujeme žádnou paritu. Takže jsme nastavili oba UPM1, UPM0 na nulu nebo jsou ponechány, protože všechny bity jsou standardně 0.
MODRÁ (USB): (STRANA PŘÍJMU A STRANA TRASMITTERU) Tento bit se používá k výběru počtu stop bitů, které používáme během komunikace.
Komunikace zde navázaná je asynchronního typu, takže pro získání přesnějšího přenosu a příjmu dat musíme použít dva stop bity, proto jsme v obou řadičích nastavili USBS na '1'.
Přenosová rychlost se nastavuje v ovladači výběrem vhodné UBRRH.
Hodnota UBRRH se volí přenosovou rychlostí a krystalovou frekvencí CPU.
Takže křížovým odkazem je hodnota UBRR považována za „25“, a tak je nastavena přenosová rychlost.
Jak je znázorněno v obvodu, tlačítko je připojeno na straně vysílače. Když je toto tlačítko stisknuto, vysílá osmbitová data VYSÍLAČEM a tato data jsou přijímána PŘIJÍMAČEM. Po úspěšném přijetí těchto dat přepne LED k nim připojené ZAPNUTO a VYPNUTO, což ukazuje úspěšný přenos dat mezi dvěma řadiči.