Stap 2: Software Annoyances
De software moet vrij eenvoudig: in een lus uitzoeken als het is tijd om te doen een PID-cyclus, doen; Controleer als de uitvoer PWM aandacht nodig heeft, dan behandelen dat; anders, controleer om te zien als de UI aandacht moet.
In de praktijk hebben wij een paar kwesties op de PICAXE.
1] Er zijn geen timingfuncties, buiten de functies van de vertraging.
2] Er zijn geen echte hardware-interrupts die je bent toegestaan om mee te spelen
3] de "zachte" interrupts zijn zowaar zacht en kunt u slechts één zijn gedefinieerd.
4] variabelen zijn registers. Als u gebruik wilt maken RAM, peek en poke out of it
5] seriële uitgang is bit-geneukt en hangt van de code voor de duur van de transfer.
6] we kan alleen 16 GoSub aanroepen gebruiken in de software, of wat programma ruimte elders verliezen.
De laatste was eenvoudig genoeg op te lossen... Mij got afhelpen van zo veel GoSubs mogelijk door de in-voering wat code.
Dus, als u rond de timing aspecten, vond ik een post op het forum op registreert hoe peek/zak de hardware voor het uitvoeren van de timer. Wij hadden nog steeds worden gecontroleerd op overstorten, maar het is beter dan niets.
Volgende, aangezien wij geen echte interrupts definiëren, we moesten er het beste van degene die we hadden. Ik zet het op de "A" kant van de roterende encoder. Elke keer de knop verplaatst, moet het leiden tot een interrupt en zien als de "B" kant ging hoog of laag ons de richting vertellen zou. Als u het te snel verplaatst, het zal verliezen, maar dat is wat we kregen.
De knop is ondervraagden. Niets er spannend. We eenvoudig bijhouden hoeveel teller overflows het is ingedrukt houdt om te zien als het is ingedrukt wordt gehouden een beetje of veel van.
#4 is onvergeeflijk in een high-level taal. De compiler moet deze behandeling worden, tenzij ik het anders vertellen. Vanwege dit, zult u een bos van ladingen in en uit geheugen in de code zien.
De seriële vertragingen zijn vrij ernstig. Dit betekent dat als u meer dan 2 tekens naar de display schrijven, u een timer-overloop verliest. Ik heb niet de moeite om te werken rond het. De timing van de PID is niet nauwkeurig en evenmin de PWM timing is... maar het is minder dan 1% afwijking, dus het is fijn in deze toepassing.