Kennismaking met de Parallax Propeller 2 (Deel 2): een LED aansturen met Spin2
Nadat we in deel 1 de mogelijkheden van de Parallax Propeller 2 hebben leren kennen, kijken we nu naar de ontwikkelomgeving en de codering. Lees verder om te zien hoe u de Spin2 taal kunt gebruiken om een LED aan te sturen.
Toegang tot de onboard LEDs
Laten we beginnen met de softwareomgeving en het aansturen van een van de LED's op het bord. We doen onze ontwikkeling in Windows 10 met de door de leverancier geleverde tools. Met als resultaat een basis software setup om code te compileren en te uploaden naar de Propeller 2.
Parallax heeft zijn Propeller Tool versie 2.3 Alpha ter beschikking gesteld, inclusief Propeller 2 ondersteuning voor Spin/Spin2. Als assembleertaal uw voorkeur heeft, kunt u PNut gebruiken als ontwikkelomgeving of assembly inline opnemen. Als u net als ik graag in C/C++ codeert: de compiler en ontwikkelomgeving zijn momenteel helaas nog niet beschikbaar. Er wordt aan gewerkt om dit te verbeteren, zoals te zien op de videopresentatie over C/C++ op de Propeller 2.
De kern van de ontwikkelomgeving
U kunt de Propeller Tool 2.3 Alpha downloaden op [2]. Download eerst de Propeller Tool 1.3.2 en voeg als tweede stap in de programmamap de Propeller Tool 2.3 Alpha executable toe . Nadat de installatie is voltooid, kunt u de editor starten en beginnen met coderen. De gebruikersinterface van de tool is te zien in figuur 1.
Coderen in assembly of in Spin2?
De vraag is: Spin2 of assembly voor de initiële code? Om het eenvoudig te houden, gaan we voorlopig verder met Spin2. Spin2 is een interpreter, zoals BASIC, maar dan anders. De commando's en taalreferenties voor Spin2 kunnen worden gevonden met het Propeller-hulpmiddel onder de menuoptie Help (zie figuur 2).
Om met Spin2 aan de slag te gaan, kunt u gebruik maken van een handleiding, maar bedenk wel dat deze nog niet af is. Via het menu krijgen we dus de voorlopige documentatie voor de geïmplementeerde Spin2-taal op de Propeller 2 MCU.
Aangezien dit uiteindelijk geïnterpreteerde code is, zijn ongeveer zes instructie-cycli, dus 12 klok-cycli, nodig om één commando uit te voeren. Dit is -in termen van klokcycli- niet de snelste manier, maar met Spin2 beginnen is gemakkelijker dan met assembly. Omdat Spin2 meer een high-level benadering heeft, blijven van commando's de meeste assembly-instructies verborgen en zijn ze makkelijker te gebruiken dan de assembly-instructies. U kunt een nieuw Spin2-project maken zoals te zien in figuur 3.
I/O Pinnen
Voor we verder gaan met het schrijven van code, kijken we kort hoe de I/O-pinnen werken. We gebruiken ze hier als gewone I/O-pinnen en zullen later een uitgebreid overzicht geven over al hun mogelijkheden. In het algemeen moeten we de pin van onze keuze instellen als een uitgang om een laag of hoog niveau aan te sturen. Op het evaluatiebord zijn de LED's met P56 tot en met P63 duidelijk zichtbaar (zie figuur 4).
Dit is een groep LED's die verbonden zijn met pin 56 tot en met pin 63 op de Propeller 2; we kiezen de eerste LED56 om aan te sturen. In het schema is duidelijk dat ze niet rechtstreeks op de chip zijn aangesloten, maar via een 74HCT244 8-voudige buffer. De anoden van de LEDs zijn verbonden met VCC; de I/O pin kan met behulp van de buffers de kathoden met massa verbinden om ze te doen oplichten (zie figuur 5).
Geïnverteerde LED
Voor de code die we gaan schrijven, betekent dit dat een hoog niveau op de MCU-pin de LED zal uitschakelen en een laag niveau hem zal laten oplichten. Met deze omgekeerde logica in gedachten, moeten we in onze code pin 56 hoog maken om de LED uit te zetten. Als we niets doen, is de pin standaard een ingang en zal de octale buffer zich gedragen alsof de pin logisch hoog wordt aangestuurd, zodat elke LED die erop is aangesloten, wordt uitgeschakeld. Voor onze Spin2 code, om de LED te laten oplichten, betekent dit dat we het volgende moeten doen:
- De MCU initialiseren en tenminste één core (cog)
- Pin 56 als uitgang configureren
- Pin 56 laag maken
- Niks doen
Stap één, de initialisatie, wordt in dit geval voor ons gedaan. De Spin2-code zelf heeft slechts enkele regels code nodig. Onze code begint met de functie pub main() gevolgd door de methode pinwrite() (zie figuur 6).
De pinwrite() is ingebouwd in de Spin2 taal en maakt het mogelijk om een of meer pinnen met een gegeven waarde in te stellen. Hier gebruiken we pin 56, waar onze LED op is aangesloten, en geven voor het uitgangsniveau een '0' door om de pin laag te maken en de LED aan. De laatste regel repeat dwingt het programma in een eindeloze lus. Als we de herhaling hier niet gebruiken, zal de code eindigen en stoppen met het aansturen van de I/O pinnen.
De code overbrengen naar de Propeller 2
Als de code klaar is, kunt u deze uploaden naar het Propeller 2 evaluatieboard en de code laten uitvoeren. Hiervoor sluit u het board aan op een van de USB-poorten van het systeem en kiest u in het menu Run->Compile Current->Load RAM om de code direct in het RAM van de MCU te uploaden en te laten uitvoeren. Aangezien de LED op pin 56 nu oplicht, is de eerste soort van "Hallo, wereld" klaar. Een vraag die kan opkomen: "Kunnen we hem ook laten knipperen?" Ja, natuurlijk kan dat. In Spin2 hebben we een WAITMS-instructie die b.v. met WAITMS(500) de uitvoering van code 500 ms zal vertragen. Aangezien we geleerd hebben dat de code na REPEAT steeds opnieuw wordt uitgevoerd, zal de volgende stap zijn om de LED te laten knipperen. Gebruik de informatie die u tot nu toe hebt verzameld om de code te ontwikkelen en aan te passen zodat de LED gaat knipperen. Voor deze oefening zullen we later een voorbeeldoplossing geven.
Nu we een I/O pin kunnen aansturen, is de volgende stap om uit te zoeken hoe we seriële data kunnen versturen. De meesten van ons zijn gewend aan deze manier van debuggen, vooral als eerste of tweede stap op een apparaat met een AVR. Aangezien dit de Smart-Pin functies zal betreffen, zal de volgende stap zijn om daarmee vertrouwd te raken.
Lees ook deel 1
Wilt u meer van dit soort Elektor-inhoud?
Neem vandaag nog een Elektor-lidmaatschap en mis nooit meer een artikel, project of tutorial.