I denne opplæringen skal vi etablere en seriell kommunikasjon mellom to ATMEGA8 mikrokontrollere. Kommunikasjonen som er etablert her, er av typen UART (Universal Asynchronous Receiver Transmitter). Ved denne serielle kommunikasjonen kan data deles mellom to mikrokontrollere, noe som kreves i forskjellige innebygde systemer.
Komponenter kreves
Maskinvare: ATMEGA8 (2 deler), strømforsyning (5v), AVR-ISP PROGRAMMER, 100uF kondensator (koblet over strømforsyning), 1KΩ motstand (to deler), LED, knapp.
Programvare: Atmel studio 6.1, progisp eller flash magi.
Kretsdiagram og forklaring
La oss forstå seriekommunikasjonen i AVR-mikrokontrollere. Her sender ATMEGA data til den andre ATMEGA i serie. Den har annen kommunikasjonsmåte, men for enkel kommunikasjon velger vi RS232. RS232-pinnen på den første ATMEGA8 er koblet til RXD-pinnen på den andre ATMEGA8.
Den etablerte datakommunikasjonen er programmert til å ha:
- Åtte databiter
- To stoppbiter
- Ingen paritetskontrollbit
- Baudrate på 2400 BPS (Bits per sekund)
- Asynkron kommunikasjon (Ingen klokkedeling mellom to ATMEGA8)
Så vi har to settregistre for to ATMEGA8 annerledes, hvor man fungerer som SENDER og andre fungerer som MOTTAKER.
Nå for RS232-grensesnittet mellom to ATmega-mikrokontrollere, må følgende funksjoner være tilfredsstilt for TRANSMITTER og MOTTAKER:
1. TXD-pinnen (datamottaksfunksjonen) til den første kontrolleren må være aktivert for TRANSMITTER, og RXD-pinnen til den andre kontrolleren må være aktivert for MOTTAKER.
2. Siden kommunikasjonen er seriell, må vi vite når data-byten mottas, slik at vi kan stoppe programmet til fullstendig byte er mottatt. Dette gjøres ved å aktivere datamottak fullstendig avbrudd.
3. DATA overføres og mottas til kontrolleren i 8bit-modus. Så to tegn vil bli sendt til kontrolleren om gangen.
4. Det er ingen paritetsbiter, en stoppbit i dataene som sendes av modulen.
Ovennevnte funksjoner er angitt i kontrollerregistrene; vi skal diskutere dem kort,
DARK GRAY (UDRE): (TRASMITTER SIDE) Denne biten er ikke satt under oppstart, men den brukes under arbeid for å sjekke om senderen er klar til å sende eller ikke. Se programmet på TRASMITTER SIDE for mer informasjon.
LIGHT GREY (RXC): (MOTTAK SIDE) Denne biten er ikke satt under oppstart, men den brukes under arbeid for å sjekke om mottakeren er klar til å motta data eller ikke. Se programmet på MOTTAK SIDE for mer informasjon.
VOILET (TXEN): (TRASMITTER SIDE) Denne biten er satt til å aktivere senderpinnen på TRASMITTER SIDE.
RØD (RXEN): (MOTTAK SIDE) Denne biten representerer mottaksdata-funksjonen, denne biten må være satt for at dataene fra modulen skal mottas av kontrolleren, den muliggjør også RXD-pinnen på kontrolleren.
BRUN (RXCIE): Denne biten må settes for å få et avbrudd etter vellykket datamottak. Ved å aktivere denne biten blir vi kjent med det, rett etter at 8 bit data mottas. Vi kommer ikke til å bruke denne biten her, så den blir alene.
PINK (URSEL): Denne biten må settes før du aktiverer andre bits i UCSRC, etter at du har satt andre nødvendige bits i UCSRC; URSEL må deaktiveres eller settes til null. Vi kommer ikke til å bruke denne biten her, så den blir alene.
GUL (UCSZ0, UCSZ1, UCSZ2): (MOTTAK SIDE & TRASMITTER SIDE) Disse tre bitene brukes til å velge antall databiter vi mottar eller sender på en gang.
Kommunikasjonen mellom to ATMEGA er etablert som åtte-biters kommunikasjon. Ved å matche kommunikasjonen med tabellen har vi, UCSZ0, UCSZ1 til en og UCSZ2 til null.
Vi må sette disse på både mottaks- og sendesiden.
ORANGE (UMSEL): (MOTTAK SIDE & TRASMITTER SIDE) Denne biten settes ut fra om systemet kommuniserer asynkront (begge bruker annen klokke) eller synkront (begge bruker samme klokke).
Begge kontrollerne deler ikke noen klokke. Siden begge bruker egen klokke. Så vi må sette UMSEL til 0 i begge kontrollerne.
GRØNN (UPM1, UPM0): (MOTTAK SIDE & TRASMITTER SIDE) Disse to bitene justeres basert på bitparitet vi bruker i kommunikasjon.
ATMEGA er programmert til å sende data uten paritet, siden dataoverføringslengden er liten, kan vi tydeligvis ikke forvente tap av data eller feil. Så vi setter ikke noen paritet her. Så vi setter både UPM1, UPM0 til null eller de er igjen, fordi alle bitene er 0 som standard..
BLÅ (USBS): (MOTTAK SIDE & TRASMITTER SIDE) Denne biten brukes til å velge antall stoppbiter vi bruker under kommunikasjonen.
Kommunikasjonen som er etablert her, er av asynkron type, så for å få mer nøyaktig dataoverføring og mottak, må vi bruke to stoppbiter, og derfor setter vi USBS til '1' i begge kontrollerne.
Baudhastigheten stilles inn i kontrolleren ved å velge riktig UBRRH.
UBRRH-verdien velges ved å kryssreferere baudrate og CPU-krystallfrekvens.
Så ved kryssreferanse blir UBRR-verdi sett på som '25', og så blir overføringshastigheten satt.
Som vist i kretsen er en knapp koblet til på sendersiden. Når denne knappen trykkes inn, sendes en åtte-bit data av TRANSMITTER, og disse dataene mottas av MOTTAKER. Ved vellykket mottak av disse dataene slår den lysdioden som er koblet til den PÅ og AV, som viser vellykket dataoverføring mellom to kontrollere.