Täällä aiomme muodostaa yhteyden ATmega8-mikrokontrollerin ja Arduino Unon välille. Tässä muodostettu tiedonsiirto on UART (Universal Asynchronous Receiver Transmitter) -tyyppi. Se on sarjaliikenne. Tällä sarjaliikenteellä tietoja voidaan jakaa kahden ohjaimen kesken, mikä vaaditaan useissa sulautettujen järjestelmien sovelluksissa.
Sulautetuissa järjestelmissä meillä on oltava perustiedot järjestelmäviestinnästä, joten tätä varten teemme tämän projektin. Tässä projektissa keskustelemme perusviestintäjärjestelmästä ja lähetämme joitain tietoja lähettimestä vastaanottimeen sarjaan.
Tässä projektissa ATMEGA8 toimii LÄHETTIMEKSI ja ARDUINO UNO VASTAANOTTIMEKSI. Sarjaliikenteessä lähetämme dataa BIT BY BIT, kunnes datan BYTE siirretään kokonaan. Tiedot voivat olla 10-bittisiä, mutta säilytämme toistaiseksi 8BITS.
Tarvittavat komponentit
Laitteisto: ATMEGA8, ARDUINO UNO, virtalähde (5v), AVR-ISP-OHJELMOINTI, 100uF kondensaattori (kytketty virtalähteen yli), 1KΩ vastus (kaksi kappaletta), LED, painike.
Ohjelmisto: Atmel studio 6.1, progisp tai flash magic, ARDUINO NIGHTLY.
Piirikaavio ja selitys
Ennen kuin keskustelemme lähettimen ja vastaanottimen kytkentäkaaviosta ja ohjelmoinnista, meidän on ymmärrettävä sarjaliikenne. ATMEGA lähettää tietoja UNO: lle sarjassa, kuten aiemmin keskusteltiin.
Sillä on muita viestintätapoja, kuten MASTER SLAVE -viestintä, JTAG-viestintä, mutta tiedonsiirron helpottamiseksi valitsemme RS232: n. Tässä yhdistämme ATMEGA8: n TXD (lähetin) PIN-koodin ARDUINO UNO: n RXD (vastaanotin) PIN-koodiin
Perustettu tietoliikenne on ohjelmoitu siten, että sillä on:
- Kahdeksan databittiä
- Kaksi stop-bittiä
- Ei pariteettitarkistusbittiä
- Siirtonopeus 9600 BPS (bittiä sekunnissa)
- Asynkroninen tiedonsiirto (ATMEGA8: n ja UNO: n välillä ei ole kellonjakoa (molemmilla on erilaiset kelloyksiköt))
Perustamiseksi UART välillä Arduino Uno ja ATMEGA8 meidän tarvitse ohjelmoida asetusta tarkasti. Tätä varten meidän on pidettävä yllä mainitut parametrit samoina molemmissa päissä. Tässä yksi toimii LÄHETTIMEKSI ja toinen toimii VASTAANOTTIMEKSI. Keskustelemme alla olevista sivuasetuksista.
Nyt varten RS232, seuraavat ominaisuudet tulee täyttyä lähettimen puolella (ATMEGA8):
1. LÄHETTIMEN on oltava käytössä ensimmäisen ohjaimen TXD-tappi (tiedon vastaanottotoiminto).
2. Koska tiedonsiirto on sarjaliikennettä, meidän on tiedettävä aina, kun ohi vastaanotetaan, jotta voimme pysäyttää ohjelman, kunnes täydellinen tavu on vastaanotettu. Tämä tapahtuu sallimalla datan vastaanoton täydellinen keskeytys.
3. DATA lähetetään ja vastaanotetaan ohjaimelle 8-bittisessä tilassa. Joten kaksi merkkiä lähetetään ohjaimelle kerrallaan.
4. Moduulin lähettämissä tiedoissa ei ole pariteettibittejä, yksi pysäytysbitti.
Yllä olevat ominaisuudet asetetaan ohjaimen rekistereihin; keskustelemme niistä lyhyesti:
TUMMA HARMAA (UDRE): Tätä bittiä ei asetettu käynnistyksen aikana, mutta sitä käytetään työn aikana tarkistamaan, onko lähetin valmis lähettämään vai ei. Katso lisätietoja TRASMITTER SIDE -ohjelmasta.
VOILET (TXEN): Tämä bitti on asetettu lähettimen nastan ottamiseksi käyttöön TRASMITTER SIDE -ohjelmassa.
KELTAINEN (UCSZ0, UCSZ1 ja UCSZ2): Näitä kolmea bittiä käytetään valitsemaan vastaanotettavien tai lähetettävien databittien määrä kerralla.
Kahden SIDESin välinen tiedonsiirto muodostetaan kahdeksan bitin tiedonsiirroksi. Yhdistämällä viestintä taulukon kanssa, UCSZ0, UCSZ1 yhteen ja UCSZ2 nollaan.
ORANGE (UMSEL): Tämä bitti asetetaan sen mukaan, onko järjestelmä yhteydessä asynkronisesti (molemmat käyttävät eri kelloa) vai synkronisesti (molemmat käyttävät samaa kelloa).
Molemmat SYTEMS eivät jaa mitään kelloa. Koska molemmat käyttävät omaa sisäistä kelloa. Joten meidän on asetettava UMSEL arvoon 0 molemmissa ohjaimissa.
VIHREÄ (UPM1, UPM0): Nämä kaksi bittiä säädetään bittipariteetin perusteella, jota käytämme viestinnässä.
Data ATMEGA on tässä ohjelmoitu lähettämään dataa ilman pariteettia, koska tiedonsiirron pituus on pieni, emme voi selvästi odottaa tietojen häviämistä tai virheitä. Joten emme aseta mitään pariteettia täällä. Joten asetamme molemmat UPM1, UPM0 nollaksi tai ne ovat jäljellä, koska kaikki bitit ovat oletusarvoisesti 0.
SININEN (USBS): Tätä bittiä käytetään tiedonsiirron aikana käyttämiemme bittien lukumäärän valitsemiseen.
Perustettu tiedonsiirto on asynkronista tyyppiä, joten tarkemman tiedonsiirron ja vastaanoton saamiseksi meidän on käytettävä kahta pysäytysbitiä, joten asetamme USBS: n arvoon 1 lähettimen puolella.
Siirtonopeus asetetaan ohjaimessa valitsemalla sopiva UBRRH:
UBRRH-arvo valitaan vertaamalla baudinopeutta ja suorittimen kristallitaajuutta:
Joten ristiviittauksella UBRR-arvo nähdään arvona '6', joten siirtonopeus asetetaan.
Tämän avulla olemme luoneet asetukset LÄHETTIMEN PUOLELLE; puhumme nyt vastaanottavasta puolesta.
Sarjayhteyden salliminen UNO: ssa voidaan suorittaa yhdellä komennolla.
|
Yhteyden, jonka oletimme muodostavan, tehdään BAUD-nopeudella 9600 bittiä sekunnissa. Joten UNO: lle tällaisen siirtonopeuden muodostamiseksi ja sarjaliikenteen aloittamiseksi käytämme komentoa ”Serial.begin (9600);”. Tässä 9600 on siirtonopeus ja muuttuva.
Nyt kaikki jäljellä, jos UNO vastaanottaa tietoja, yksi tieto on vastaanotettu, se on käytettävissä otettavaksi. Nämä tiedot noudetaan komennolla “receivesdata = Serial.read ();”. Tällä komennolla sarjatiedot viedään 'vastaanotetut tiedot' -nimiseen kokonaislukuun.
Kuten piirissä näkyy painike lähettimen puolella kytkettynä, kun tämä painettuna painettu kahdeksan bitin data lähetetään LÄHETTIMEN (ATMEGA8) kautta ja nämä tiedot vastaanotetaan VASTAANOTTIMELLA (ARDUINO UNO). Vastaanotettuaan nämä tiedot onnistuneesti se kytkee siihen kytketyn LEDin päälle ja pois päältä osoittaakseen onnistuneen tiedonsiirron kahden ohjaimen välillä.
Tällä UART-yhteydellä ATMEGA8-ohjaimen ja ARDUINO UNO: n välinen yhteys onnistuu.