29 september 2015

Tutorial 1 - Conventies, programmeren en het gebruik van inputs.

Conventies


Conventies; afspraken met betrekking tot de code. Eentje is er al genoemd: het aangeven van het type PIC dat gebruikt wordt. De Programming Editor doet het (ook) zelf, als niets opgegeven is; hij gaat uit van de aangesloten PIC.


Naamgeving

Aangezien de laatste versie Microchip/PICAXE PICs nogal wat mogelijkheden hebben per pootje (zie het referentie plaatje), is het een goede gewoonte om de commando's te gebruiken met een PORT.PIN notatie. In geval van de 08M2 lijkt dat (en is het) een tikkie overdreven, maar de PICAXE-40X2 heeft maar liefst vier poorten (A, B C en D), dus dan is het zo gek niet.
Kortom, het eerste programma wordt dus:
; connect physical pin 3 to L1, L2, or L3 ; set picaxe type #picaxe 08m2 main: high C.4 ; switch pin 3 high pause 1000 ; wait for 1 second low C.4 ; switch pin 3 low pause 1000 ; wait for 1 second goto main


Programmeren

Aan de hand van voorbeelden staan hieronder een paar programmeer principes uitgewerkt. Hopelijk wordt het potentieel van de PICAXE PICs duidelijk. De referentie staat natuurlijk online.


Symbols

Bij het gebruik van PICs met veel pootjes wordt het steeds lastiger om te onthouden welk in- of uitvoer apparaat gekoppeld is aan welk pootje. Dan is het gebruik van symbols makkelijk. Zo kun je de output C.4 in bovenstaand test programma vervangen door het symbol "LED", of "rode_LED", of "lampje".
; connect physical pin 3 to L1, L2, or L3 ; set picaxe type #picaxe 08m2 symbol LED = C.4 ; define LED connected to C.4 main: high LED ; switch on LED wait 1 ; wait for 1 second low LED ; switch LED off wait 1 ; wait for 1 second goto main ; loop forever

In plaats van pause gebruik ik hier wait. Pause telt in milliseconden, wait in hele seconden. Pause accepteert waarden tussen 1 en 65535, wait verwacht input tussen 1 en 65.


Loops

Loops, of lussen, zijn herhalende stukjes programma. Bovenstaand voorbeeld is een programma, dat altijd maar doorgaat, dankzij het "goto main" als laatste commando. Hordes programmeurs zijn tegen goto-commando's, bovendien wordt "goto" niet door alle programmeertalen herkend. Bovendien is een "goto" altijd op te vangen met een andere constructie.
In bovenstaand voorbeeld is het een loop. Daarnaast ga ik een teller gebruiken - nog een toepassing van SYMBOL, maar nu om een variabele te definiëren (LED was een constante):
; connect physical pin 3 to L1, L2, or L3 symbol counter = b1 ; define the variable b1 as "counter" symbol LED = C.4 ; define pin 3 with the name "LED" ; set picaxe type #picaxe 08m2 main: for counter = 1 to 5 ; start a for...next loop high LED ; switch pin 3 high pause 500 ; wait for 0.5 second low LED ; switch pin 3 low pause 500 ; wait for 0.5 second next counter ; end of for...next loop end ‘ end program
Dit programma zal dus de LED vijf keer laten "flashen" en is dan beëindigd. Dat is niet erg spectaculair... als je wilt laten zien wat je kan met zo'n PIC en iemand reageert niet snel genoeg, dan is het alweer voorbij. Je moet de PIC dan opnieuw opstarten, en bij een PICAXE-08M2 betekent dat: spanning eraf en weer opnieuw aansluiten.
Dat kan anders!


Input


Er zitten een aantal schakelaar op het AXE091 prototype bord. Ik ga ervoor zorgen, dat de PIC de LED vijf keer laat flashen nadat de schakelaar ingedrukt is. Om dit voor elkaar te krijgen, sluit ik ingang C.1 (pootje 6) aan op schakelaar SW3. Ingang C.3 (pootje 6) - groene draad. De gele draad is (nog steeds) uitgang C.4 (pootje 3).
Groene draad gaat aan connector met opschrift SW3; de gele is (nog steeds) verbonden met L1:
Het programma wordt vervolgens:
; connect physical pin 3 to L1, L2, or L3 ; connect physical pin 6 to SW1, SW2, or SW3 symbol counter = b1 ; define the variable b1 as "counter" symbol LED = C.4 ; define pin 3 with the name "LED" symbol KEY = pinC.1 ; define pin 6 with the name "KEY" ; set picaxe type #picaxe 08m2 main: ; main loop if KEY = 1 then flash ; 1 means high (Vcc) goto main flash: for counter = 1 to 5 ; start a for...next loop high LED ; switch pin 4 high pause 500 ; wait for 0.5 second low LED ; switch pin 4 low pause 500 ; wait for 0.5 second next counter ; end of for...next loop goto main ; done - wait for next key

En dit is het resltaat:

Wordt vervolgd met analoge input.

28 september 2015

Layout en interfacing

Het bord

Het bord kaal ziet er zo uit:
Wat ik slecht vind is het gebruik van een 9V batterij snap-on, terwijl deze spanning veel te hoog is. Bye-bye board! Niet doen, dus.
Je moet de batterijhouder gebruiken. En dan nog: niet verkeerd aansluiten, dus eerst goed kijken of de connectoren op elkaar passen, en dan pas contact laten maken. Voor zover ik weet zit er geen beveiliging tegen ompolen op!

Details


Voor de vaarregelaar (ook wel: Electronic Speed Controller, of ESC) moet een 08M2 volstaan. Deze werd ook door Alan gebruikt, en ik heb er twee mee laten komen met het bordje.
Hier zit hij op het bord:
Ik ga dus voorlopig alleen deze gebruiken. Om dit duidelijk te maken zal ik in de source code duidelijk maken om welk type microcontroller het gaat. Dat is sowieso een goede gewoonte.
Dit gaat als volgt:
; set picaxe type #picaxe 08m2
Regels, die beginnen met een puntkomma (semi colon, ";") zijn commentaarregels. Je mag ook een apostrof ("'") gebruiken:
'dit is ook commentaar maar dit niet meer!
Een apostrof is, net als een puntkomma, een aanduiding voor één regel commentaar.
Als je meer regels commentaar wilt gebruiken kun je de #rem opdracht gebruiken, samen met #endrem:
#rem dit wordt door de PICAXE Programmer/Editor gezien als een blok commentaar dat doorgaat totdat het endrem directive bereikt wordt: #endrem

Regels, die voorafgegaan worden met zo'n nummer teken (hash, "#"), zijn 'directives', dit zijn geen programmaregels, maar aanwijzingen voor de compiler. Het "#rem" directive, hierboven was dus een aanwijzing voor de compiler, om de volgende regels niet te beschouwen als programmacode, maar te negeren.
Het #picaxe directive is er ook zo een, en deze vertelt de compiler expliciet welke chip er geprogrammeerd gaat worden. Zie handboek 2, pagina 7, Directives.


Input en output


Er zitten nogal wat componenten op het AXE091 bordje. Hier in detail de IO aansluitingen:
Van links naar rechts zitten er de volgende connectoren op:
  • V+ (+ Spanning, Vcc) 
  • 0V (- Spanning, Gnd) 
  • KD Keyboard Data 
  • KC Keyboard Clock 
  • IRR Infra-rood ontvanger [=receiver] 
  • IRL Infra-rood LED
  • L3 LED L3 (rood)
  • L2 LED L2 (geel)
  • L1 LED L1 (groen)
  • SVO Servo
  • LDR Lichtgevoelige weerstand
  • TMP DS18B20 temperatuur sensor
  • SW3 Schakelaar 3
  • SW2 Schakelaar 2
  • SW1 Schakelaar 1
  • POT Potentiometer (regelbare weerstand)
  • V+ (+ Spanning, Vcc)
  • V+ (+ Spanning, Vcc)
  • 0V (- Spanning, Gnd)
  • 0V (- Spanning, Gnd)
Aan de onderkant zitten er nog een aantal, zie de beschrijving van het AXE091 bord.


Troubleshooting het eerste programma


Ik gebruik onderstaand altijd als refentie:
Voor het eerste experiment moeten uitgang C.4, fysieke pin 3, van de PICAXE-08M2 worden verbonden met een van de LED connectoren L1, L2 of L3. Naar gelang of je rood, geel of groen leuk vindt.
Vervolgens sluit je de batterijen en de interface kabel aan. Je hebt de driver natuurlijk al geïnstalleerd. Je opent de Programming Editor, en geeft je eerste programma in (zie ook de eerste kennismaking)
Vervolgens laat je de syntax controleren:
En dan programmeren maar! Oeps:
Deze fout komt nogal eens voor, en stelt weinig voor. Open het Options item in je Programming Editor, en je zult zien dat de USB interface niet op COM1, maar op COM5 zit.
Doodeenvoudig de juiste COM-poort selecteren en nogmaals proberen:
En dit is dan het resultaat:

27 september 2015

Het begin

Intro

Door omstandigheden ben ik (weer) met modelbouw begonnen. Waar ik vroeger snelheidsregelaars bouwde met een NE544 (toen heb ik prototype samples aangevraagd; inmiddels is het IC uit de handel!), kom je er tegenwoordig geen enkele meer tegen, die zonder een PIC werkt.
Ook de eindtrap; die van mij gebruikte de TIP140 en TIP145 complementaire power darlingtons. Tegenwoordig gebruik je een IRF6648, een BUZ11 of iets wat er op lijkt. In elk geval iets, dat bij de 10A, die de TIP140 kon verstouwen geen 30 Watt (VCE(SAT)=3,0V bij ICE=10A, P=U*I) verstookte, maar iets van 3 Watt (RDS(ON)=0,032Ω en P=I^2*R)

Doel: met behulp van een PIC zelf een vaarregelaar bouwen.

Welke chip?

Iets dat ik tegenkwam, waren de pagina's van Alan Bond met een geweldige geluiden generator. Alan gebruikt PIC's afkomstig van een firma PICAXE. Feitelijk zijn het micro controllers van Microchip.
Ze zijn goedkoop (variërend van UKP 1,80 tot UKP 5,90), makkelijk te programmeren, en -last but no least- alle programmatuur is gratis!
En dus vallen Arduino's, ATMega's en Raspberries af - te veel van het goede.

Hard- en Software

Een ogenblik nagedacht over de kit, die ik zou gaan kopen. Besloten om voor de universele AXE091 te gaan - daar kun je elke controller mee programmeren, en je kunt ermee experimenteren.

Features:
  • USB programmeerkabel.
  • PICAXE-18M2 Microcontroller.
  • Ondersteunt alle 8/14/18/20/2840 pin PICAXE chips.
  • Computer download schakeling is on-board.
  • Groot breadboard.
  • Voeding middels batterijen (houder inlcuded) of externe voeding (niet meegeleverd).
  • LED power indicator.
  • 3 LEDs als outputs.
  • 3 schakelaars als input.
  • LDR en potmeter als analoge inputs.
  • DS18B20 digitale temperatuur sensor.
  • Infra rood ontvanger en zender (LED).
  • Keyboard connector.
  • Seriële (MAX202 buffered) RS232 connector (inverted en non-inverted).
  • IC houders voor I2C en SPI geheugen modules (niet meegeleverd).
  • Socket en batterij connector voor een DS1307 Real Time Clock (niet meegeleverd).

De software zou op CD worden geleverd, maar de meest recente versies staan toch online - de CD zat er (dus) ook niet bij.

Eerste controle

Nadat je de driver hebt geïnstalleerd, en je computer ervan overtuigd hebt dat er iets is aangesloten, volgt het eerste programma!
main: high 4 pause 1000 low 4 pause 1000 goto main