Stap 1: Hoe kunnen we twee microcontrollers om te praten met elkaar komen?
Aangezien wij beginnen om uit te breiden van ons project, zodat onze één eindproduct is opgebouwd uit een verzameling van kleinere delen die we gaan moeten meer spelden dan een enkele Atmega328P kan bieden. We willen dus elk stuk van het totale project op een aparte microcontroller doen en vervolgens hebben ze de gegevens tussen hen delen.
Dus het probleem dat wij moeten oplossen hoe we kunnen komen met een eenvoudige methode voor de controllers met elkaar praten en de overdracht van gegevens tussen hen is?
Nou, is een ding over deze controllers dat ze elke 16 miljoen instructies per seconde uitvoert. Dit is heel precies getimed en dus kunnen we deze timing gebruiken om de overdracht van gegevens. Als we milliseconde vertraging gebruiken voor het vormen van de gegevens moeten niet echt we alles wat om precies te zijn omdat de CPU is het uitvoeren van 16.000 instructies in een één milliseconde. Met andere woorden, is een milliseconde een eeuwigheid voor de CPU.
Dus laten we proberen het met de dobbelstenen rollen. Ik wil voor het verzenden van het resultaat van een dobbelsteen van de dobbelstenen roller chip naar de analyzer-chip. Stel dat u aan de overkant stonden en ik wilde signaal aan u het resultaat van mijn rol van een paar dobbelstenen. Een ding die ik doen kan, als we beide een horloge hadden, is dat mij zou zwenking voort een zaklamp, dan wanneer u bent klaar om te ontvangen van mijn gegevens u uw zaklamp inschakelen en we allebei onze klokken beginnen. Toen ik mijn zaklamp op voor het exacte aantal milliseconden als dobbel is het broodje te houden en vervolgens het uitgeschakeld. Dus als ik een 12 rolde zou ik mijn licht op houden voor 12 milliseconden.
Nu het probleem met het bovenstaande is dat voor jou en mij, er geen manier is zou men kunnen dingen nauwkeurig genoeg tijd om te onderscheiden tussen 5 milliseconden en 12 milliseconden. Maar hoe zit dit: Stel dat we besloten dat ik mijn licht op voor één jaar voor elk getal op de dobbelsteen houden zou? Dan als ik een 12 rollen ik het licht op je voor 12 jaar schijnen zou en ik denk dat je zal eens dat dat er geen mogelijkheid die u een fout maakt is zal bij het uitzoeken van het juiste nummer? U kon een pauze nemen en gaan spelen honkbal, kon je zelfs gaan spelen craps in Vegas voor 6 maanden, zo lang als op enig moment tijdens het jaar keek overkant van de straat te zien dat als het licht was op u een telling niet zou missen. Nou is dat precies wat we doen voor de microcontrollers! Een enkele milliseconden voor de CPU is net als een jaar. Dus als ik het signaal voor 12 milliseconden inschakel is er bijna geen kans dat de andere microcontroller zal het verwarren voor 10 of 11 ongeacht welke interrupts en whatnot in de tussentijd gebeuren. Voor de microcontrollers is een milliseconde een eeuwigheid.
Dus is hier wat we gaan doen. Eerst zullen we twee poorten op de controller als onze communicatiepoorten kiezen. Ik zal gebruik maken van PD6 voor ontvangen gegevens (we zouden kunnen noemen Rx als wij) en ik zal PD7 kiezen voor het overbrengen van gegevens (we kunnen noemen het Tx als wij). De spaander van de analysator zal periodiek controleren is Rx pin en ziet als een signaal zal dalen tot een "mededeling subroutine" en vervolgens een retour signaal doorgeeft naar de rol van de dobbelstenen zeggen dat het is klaar om te ontvangen. Zij zullen beide beginnen timing en de rol van de dobbelstenen zullen een signaal (d.w.z. 5V) doorgeeft voor een milliseconde per getal op de dobbelsteen. Dus als de worp dubbele Zessen, of een 12 was, vervolgens de dobbelstenen rol zou het PD7 wil 5V voor 12 milliseconden en vervolgens troep op weerom voor 0V. De analyzer zal controleren de PD6 pin elke milliseconde, tellen elke keer, en wanneer het gaat terug naar 0V vervolgens het uitgangen het resulterende getal naar de analyzer weergeven, waaruit een twaalf in binaire op de LED's.
Dus is dat het plan. Laten we eens kijken als we het kunnen toepassen.