Tässä opetusohjelmassa aiomme muodostaa sarjaliikenteen kahden ATMEGA8-mikrokontrollerin välille. Tässä muodostettu tiedonsiirto on UART (Universal Asynchronous Receiver Transmitter) -tyyppi. Tällä sarjaliikenteellä data voidaan jakaa kahden mikro-ohjaimen kesken, mitä tarvitaan eri sulautetuissa järjestelmissä.
Tarvittavat komponentit
Laitteisto: ATMEGA8 (2 kpl), 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.
Piirikaavio ja selitys
Olkaamme ymmärretty sarjayhteys AVR-mikrokontrollereissa. Täällä ATMEGA lähettää tietoja toiselle ATMEGA: lle sarjana. Sillä on toinen viestintätapa, mutta viestinnän helpottamiseksi valitsemme RS232: n. Ensimmäisen ATMEGA8: n RS232-nasta on kytketty toisen ATMEGA8: n RXD-nastaan.
Perustettu tietoliikenne on ohjelmoitu siten, että sillä on:
- Kahdeksan databittiä
- Kaksi stop-bittiä
- Ei pariteettitarkistusbittiä
- Siirtonopeus 2400 BPS (bittiä sekunnissa)
- Asynkroninen tiedonsiirto (ei kellojakoa kahden ATMEGA8: n välillä)
Joten meillä on kaksi asetettua rekisteriä kahdelle ATMEGA8: lle eri tavalla, jossa yksi toimii lähettimenä ja toinen vastaanottajana.
Nyt jo RS232 rajapinnat kahden ATmega mikro, seuraavat ominaisuudet tulee täyttyä lähettimen ja vastaanottimen:
1. Ensimmäisen ohjaimen TXD-nastan (tiedon vastaanottotoiminto) on oltava käytössä lähettimelle ja toisen ohjaimen RXD-nastan on oltava käytössä vastaanottimelle.
2. Koska tiedonsiirto on sarjamuotoista, meidän on tiedettävä aina, kun datatavu 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): (TRASMITTERIN SIVU) 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.
VALON HARMAA (RXC): (VASTAANOTTAVA SIVU) Tätä bittiä ei asetettu käynnistyksen aikana, mutta sitä käytetään työn aikana tarkistamaan, onko vastaanotin valmis vastaanottamaan tietoja vai ei. Katso lisätietoja vastaanottopuolelta saadaksesi lisätietoja.
VOILET (TXEN): (TRASMITTER SIDE) Tämä bitti on asetettu lähettimen nastan käyttöönottoa varten TRASMITTER SIDE.
PUNAINEN (RXEN): (VASTAANOTTAVA SIVU) Tämä bitti edustaa vastaanottodatan ominaisuutta, tämä bitti on asetettava moduulista tulevan datan vastaanottamiseksi ohjaimelle, se mahdollistaa myös ohjaimen RXD-nastan.
RUSKEA (RXCIE): Tämä bitti on asetettava keskeytyksen saamiseksi onnistuneen datan vastaanoton jälkeen. Ottamalla tämän bitin käyttöön saamme tietää heti 8-bittisen datan vastaanottamisen jälkeen. Emme aio käyttää tätä bittiä täällä, joten se jätetään yksin.
PINK (URSEL): Tämä bitti on asetettava ennen kuin muut bitit otetaan käyttöön UCSRC: ssä sen jälkeen kun muut tarvittavat bitit on asetettu UCSRC: ssä; URSEL on poistettava käytöstä tai asetettava nollaan. Emme aio käyttää tätä vähän täällä, joten se jätetään yksin.
KELTAINEN (UCSZ0, UCSZ1, UCSZ2): (VASTAANOTTAVA SIVU & LÄHETTIMEN SIVU) Näitä kolmea bittiä käytetään valitsemaan vastaanotettavien tai lähetettävien databittien määrä kerralla.
Kahden ATMEGA: n välinen tiedonsiirto muodostetaan kahdeksan bitin tiedonsiirroksi. Yhdistämällä viestintä taulukon kanssa, UCSZ0, UCSZ1 yhteen ja UCSZ2 nollaan.
Meidän on asetettava nämä sekä vastaanotto- että lähetyspuolelle.
ORANGE (UMSEL): (VASTAANOTTAVA SIVU & TRASMITTERIN SIVU) 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 ohjaimet 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): (VASTAANOTTAVA SIVU & TRASMITTERIN PUOLI) Nämä kaksi bittiä säädetään tiedonsiirrossa käytetyn bittipariteetin perusteella.
ATMEGA on ohjelmoitu lähettämään tietoja 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): (VASTAANOTTAVA SIVU & TRASMITTERIN SIVU) Tätä bittiä käytetään tiedonsiirron aikana käyttämiemme bittien lukumäärän valitsemiseen.
Tässä muodostettu 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 molemmissa ohjaimissa.
Siirtonopeus asetetaan ohjaimessa valitsemalla sopiva UBRRH.
UBRRH-arvo valitaan ristiviittaamalla baudinopeutta ja suorittimen kidetaajuutta.
Joten ristiviittauksella UBRR-arvo nähdään arvona '25', joten siirtonopeus asetetaan.
Kuten piirissä näkyy, painike on kytketty lähettimen puolelle. Kun tätä painiketta painetaan, kahdeksan bitin dataa lähettää LÄHETIN ja nämä tiedot vastaanottaa vastaanotin. Saatuaan nämä tiedot onnistuneesti, se kytkee siihen kytketyn LEDin päälle ja pois päältä, mikä osoittaa onnistuneen tiedonsiirron kahden ohjaimen välillä.