Stap 4: ATTiny USI I2C Code implementatie - overzicht
Om het voorwoord, is het bord komt te staan op de belangrijkste foto van deze stap een aangepaste unipolaire stepper motor controller die ik heb als onderdeel van mijn senior project dit voorjaar ontworpen. De Raad van bestuur is geschikt voor het rijden van een enkele unipolaire stappenmotor met PWM, variabele snelheid en drie verschillende stepping modi (single-intensivering, macht, intensivering en half-intensivering). Zij is ook actief in uitbarstingen, aangezien de controller zal alleen het draaien van de motor voor het opgegeven aantal stappen. Voor ononderbroken gebruik, moet de stappen teller worden herladen door wat is het besturen van het bord voordat het nul. Niets van dit is belangrijk voor de tutorial.
Het belangrijkste deel hier is dat de robot deze planken macht drie wielen (omnidirectionele wielen heeft, gerangschikt in een driehoekige patroon). Ik wilde bouwen van drie identieke platen, maar slechts één RS-232 seriële interface van de robot de hoofdcomputer (een laptop) te gebruiken om te controleren alle drie. Het idee dat ik kwam met was verbinding maken alle drie platen via de seriële poort van de computerinterface en de I2C-bus. In deze opstelling neemt het bord aangesloten op de PC de master rol naast het feit dat een slaaf-knooppunt. De PC stuurt dat I2C opgemaakt berichten op de bus voor de drie planken te bedienen op.
Voor deze taak, zou mijn platen moeten zowel I2C modi, zijnde kundig voor opereren als zowel een slaaf en een master afhankelijk van de bewerkingen van de seriële poort ondersteunen. Weten heel weinig over de USI hardware en slechts iets meer over de I2C-protocol in het algemeen, uiteengezet heb ik te beheersen de I2C-protocol, om het mijn slaaf en commando te doen mijn gegevensoverdracht. En dat ik deed, en het werkte goed voor het project.
Allemaal totdat ik heb mijn Raspberry Pi op zijn minst, omdat toen ik eindelijk rond te spelen met de Pi, heb ik geprobeerd mijn I2C motor platen op de I2C-poort aansluiten in een poging om een Pi-aangedreven robot. Helaas, ongeacht welke opdrachten ik heb verzonden, kan de Pi niet maken communicatie gebeuren. Aangezien ik had nooit mijn protocol gevalideerd buiten mijn eigen meester code praten met mijn eigen code slaaf, ik dacht dat ik was niet uitvoering van het protocol precies goed, en ging zitten om het allemaal correct werken. Dat ik deed, met de nieuwe code veel meer gestroomlijnde, georganiseerd en begrijpelijk (reacties galore voor iedereen die wil leren!). Aangezien mijn reis naar de wereld van de I2C ruw was, besloten heb ik om hier post voor iedereen te zien en te gaan zo gedetailleerd mogelijk te maken de I2C functionaliteit duidelijk.
In de volgende paar stappen zal ik spreken over de USI hardware en hoe het werkt als een meester en een slaaf. Ik heb ook mijn codebestanden USI bijgevoegd. Ik wil mensen een goede USI implementatie en ik wil ook hen om te lezen hoe het werkt, weten precies wat er gaande is van cruciaal belang wanneer het behandelen van een complex, low-level systeem, dus ik heb gereageerd mijn bestanden grondig.