I denna handledning ska vi etablera en seriell kommunikation mellan två ATMEGA8-mikrokontroller. Den här kommunikationen är av UART- typ (Universal Asynchronous Receiver Transmitter). Genom denna seriella kommunikation kan data delas mellan två mikrokontroller, vilket krävs i olika inbäddade system.
Komponenter krävs
Hårdvara: ATMEGA8 (2 delar), strömförsörjning (5v), AVR-ISP-PROGRAMMER, 100uF kondensator (ansluten över strömförsörjningen), 1KΩ motstånd (två delar), LED, knapp.
Programvara: Atmel studio 6.1, progisp eller flash magi.
Kretsschema och förklaring
Låt oss förstå seriekommunikationen i AVR-mikrokontroller. Här skickar ATMEGA data till den andra ATMEGA i serie. Den har ett annat kommunikationssätt men för enkel kommunikation väljer vi RS232. RS232-stiftet på första ATMEGA8 är anslutet till RXD-stiftet i det andra ATMEGA8.
Den etablerade datakommunikationen är programmerad att ha:
- Åtta databitar
- Två stoppbitar
- Ingen paritetskontrollbit
- Baudhastighet på 2400 BPS (bitar per sekund)
- Asynkron kommunikation (Ingen klockdelning mellan två ATMEGA8)
Så vi har två uppsatta register för två ATMEGA8 annorlunda, där en fungerar som SÄNDARE och andra fungerar som MOTTAGARE.
För RS232-gränssnittet mellan två ATmega-mikrokontroller måste följande funktioner vara uppfyllda för SÄNDARE och MOTTAGARE:
1. TXD-stift (datamottagningsfunktion) på den första styrenheten måste vara aktiverad för TRANSMITTER och RXD-stiftet på den andra styrenheten måste vara aktiverad för MOTTAGARE.
2. Eftersom kommunikationen är seriell måste vi veta när databyte tas emot, så att vi kan stoppa programmet tills fullständig byte mottas. Detta görs genom att möjliggöra en fullständig avbrott för datamottagning.
3. DATA överförs och tas emot till styrenheten i 8bit-läge. Så två tecken kommer att skickas till styrenheten åt gången.
4. Det finns inga paritetsbitar, en stoppbit i data som skickas av modulen.
Ovanstående funktioner ställs in i registerregistret; vi ska diskutera dem kort,
MÖRK GRÅ (UDRE): (TRASMITTER SIDE) Denna bit är inte inställd vid start men används under arbetet för att kontrollera om sändaren är redo att sändas eller inte. Se programmet på TRASMITTER SIDE för mer information.
LIGHT GREY (RXC): (MOTTAGANDE SIDA) Denna bit ställs inte in vid start men används under arbetet för att kontrollera om mottagaren är redo att ta emot data eller inte. Se programmet på MOTTAGANDE SIDA för mer information.
VOILET (TXEN): (TRASMITTER SIDE) Denna bit är inställd för att aktivera sändarstift på TRASMITTER SIDE.
RÖD (RXEN): (MOTTAGANDE SIDA) Denna bit representerar funktionen för mottagningsdata, den här biten måste ställas in för att data från modulen ska tas emot av styrenheten, det möjliggör också RXD-stift av styrenheten.
BRUN (RXCIE): Denna bit måste ställas in för att få ett avbrott efter lyckad datamottagning. Genom att aktivera den här biten lär vi oss, direkt efter att 8-bitars data har mottagits. Vi ska inte använda den här biten här så den lämnas ensam.
PINK (URSEL): Denna bit måste ställas in innan du aktiverar andra bitar i UCSRC, efter att du har ställt in andra nödvändiga bitar i UCSRC; URSEL måste inaktiveras eller sättas till noll. Vi ska inte använda den här biten här så den lämnas ensam.
GUL (UCSZ0, UCSZ1, UCSZ2): (MOTTAGANDE SIDA & TRASMITTERSIDA) Dessa tre bitar används för att välja antalet databitar vi tar emot eller skickar på en gång.
Kommunikationen mellan två ATMEGA etableras som åtta bitars kommunikation. Genom att matcha kommunikationen med tabellen har vi, UCSZ0, UCSZ1 till en och UCSZ2 till noll.
Vi måste ställa in dessa på både mottagande och sändande sida.
ORANGE (UMSEL): (MOTTAGANDE SIDA & TRASMITTER-SIDA) Denna bit ställs in baserat på om systemet kommunicerar asynkront (båda använder olika klockor) eller synkront (båda använder samma klocka).
Båda styrenheterna delar inte någon klocka. Eftersom båda använder sin egen interna klocka. Så vi måste ställa UMSEL till 0 i båda styrenheterna.
GRÖN (UPM1, UPM0): (MOTTAGANDE SIDA & TRASMITTERSIDA) Dessa två bitar justeras baserat på bitparitet vi använder i kommunikation.
ATMEGA är programmerad att skicka data utan paritet, eftersom dataöverföringslängden är liten kan vi tydligt förvänta oss ingen dataförlust eller fel. Så vi sätter ingen paritet här. Så vi sätter både UPM1, UPM0 till noll eller så är de kvar eftersom alla bitar är 0 som standard..
BLÅ (USBS): (MOTTAGANDE SIDA & TRASMITTERSIDA) Denna bit används för att välja antalet stoppbitar vi använder under kommunikationen.
Kommunikationen som upprättas här är av asynkron typ, så för att få mer exakt dataöverföring och mottagning måste vi använda två stoppbitar, därför sätter vi USBS till '1' i båda styrenheterna.
Överföringshastigheten ställs in i styrenheten genom att välja lämplig UBRRH.
UBRRH-värdet väljs genom korshänvisande baudhastighet och CPU-kristallfrekvens.
Så genom korsreferens ses UBRR-värdet som '25', och så inställes baudhastigheten.
Som visas i kretsen är en knapp ansluten på sändarsidan. När denna knapp trycks in sänds en åtta bitars data av TRANSMITTER och dessa data tas emot av RECEIVER. När du mottar dessa data framgångsrikt växlar lysdioden som är ansluten till den PÅ och AV, vilket visar framgångsrik dataöverföring mellan två styrenheter.