AVR Assembler handledning 6 (1 / 3 steg)
Steg 1: Hur kan vi få två mikrokontroller att prata med varandra?
Sedan börjar vi att utvidga vårt projekt så att vår enda slutprodukten utgörs av en samling av mindre delar vi behöver mer stift än en enda Atmega328P kan ge. Därför kommer vi att göra varje del i ett övergripande projekt på en separat mikrokontroller och sedan få dem dela data mellan dem.
Så det problem som vi måste lösa är hur kan vi komma med en enkel metod för de registeransvariga att prata med varandra och överföra data mellan dem?
Tja, är en sak om dessa styrenheter att de varje utföra 16 miljoner instruktioner per sekund. Detta är mycket exakt tid och så kan vi använda denna timing för att överföra data. Om vi använder millisekund förseningar för att utgöra data behöver då vi verkligen inte vara så exakt eftersom CPU körs 16.000 instruktioner i en enstaka millisekund. Med andra ord, är en millisekund en evighet för Processorn.
Så låt oss prova med tärningskast. Jag vill överföra resultatet av ett tärningskast från dice rulle chip till analyzer chip. Anta att du stod tvärs över gatan och jag ville signalera att du resultatet av min rulle ett par tärningar. En sak jag kunde göra, om vi båda hade en klocka, är jag kunde vända på en ficklampa, sedan när du är redo att ta emot min data du slå på ficklampan och vi båda börjar våra klockor. Då jag hålla min ficklampa på för det exakta antalet millisekunder som tärningskast och sedan stänga av. Så om jag rullade en 12 skulle jag hålla min ljus för 12 millisekunder.
Nu är problemet med ovanstående att det finns inget sätt för dig och mig, skulle vi kunna tid saker exakt nog för att skilja mellan 5 millisekunder och 12 millisekunder. Men vad om detta: Antag att vi beslutade att jag skulle hålla min ljus ett år för varje nummer på tärningen? Sedan om jag rullar en 12 jag skulle skina ljuset på dig i 12 år och jag tror ni håller med om att det finns ingen möjlighet att du kommer att göra ett misstag i räkna ut hur många rätt? Du kan ta en paus och gå spela baseball, du kan även gå Spela craps i Vegas för 6 månader, så länge någon gång under året för att sneglade över gatan för att se om ljuset var på du inte vill missa en räkning. Jo det är precis vad vi gör för microcontrollers! En enstaka millisekund för Processorn är som ett år. Så om jag aktiverar signalen för 12 millisekunder finns det nästan ingen chans som andra microcontroller kommer att förvirra det för 10 eller 11 oavsett vilka avbrott och whatnot hända under tiden. För microcontrollers är en millisekund en evighet.
Så är här vad vi ska göra. Först kommer vi att välja två portar på handkontrollen för att våra kommunikationsportar. Jag kommer att använda PD6 för ta emot Data (vi kan kalla det Rx om vi gillar) och jag kommer att välja PD7 för överföring av data (vi kan kalla det Tx om vi gillar). Analyzer chip kontrollerar regelbundet det är Rx stift och om den ser en signal om det kommer att sjunka till en "kommunikation subrutin" och sedan överföra en retur signal till dice rullen säger att det är redo att ta emot. De kommer båda starta tidtagningen och dice rullen kommer att överföra en signal (dvs 5V) för en millisekund per nummer på tärningen. Så om rullen var dubbla sexor eller en 12, sedan tärningarna rullen skulle ställa det är PD7 till 5V för 12 millisekunder och sedan sätta den rygg till 0V. Analysutrustningen kommer att kontrollera dess PD6 pin varje millisekund, räknar varje gång, och när det går tillbaka till 0V sedan det utgångar många till analysutrustningen Visa, visar en tolv i binär på lysdioder.
Så är det planen. Låt oss se om vi kan genomföra den.