v20140310
03 < index > 05
opl. oef.

GPIO aansturen onder RISC OS

Deel 04, GPIO als een ingang voor een schakelaar

Eigenschappen van de GPIO pinnen
Een schakelaar aansluiten op GPIO pin 18
Checken met !GPIOConfig
Ons basic-programma "LED aan"
Als compleet programma "!Switch"
Samenvatting
Extra oefeningen

top

Eigenschappen van de GPIO pinnen, herhaling
Kennen we de egienschappen nog ? Neen, een beetje, . . . laten we dan even kijken naar deel 3, GPIO als uitgang.

top

Een schakelaar aansluiten op GPIO pin 18, header pin 12
Het kan eenvoudig maar ...
omdat standaard de pin laag getrokken wordt door een inwendige weerstand, is het aansluiten van een schakelaar naar de positief reeds voldoende een eigen pull-down weerstand van 10k geeft meer zekerheid. De extra stroom van 3.3v/10k=0.33mA door de weerstand, tijdens het sluiten van de schakelaar, is te verwaarlozen een extra begrenzingsweerstand, want je weet maar nooit dat de GPIO pin toevallig een uitgans is terwijl we de schakelaar in drukken ! Maar de begrenzingsweerstand in serie met de schakelaar geeft samen met de pull-down weerstand een een spannigsdeler. Als de schakelaar wordt ingedrukt is de ca. 3V nog ruim voldoende om als "hoog" ingelezen te worden. de begrenzingsweerstand in serie met de ingang kan ook
Contactdender ontstaat als de beide contacten elkaar net raken en contact beginnen te maken: contact en geen contact wisselen elkaar heel snel op. Afhankelijk van de soort en kwaliteit van de schakelaar kan/zal er meer/minder contactdender optreden. Maar geen probleem, met software, kunnen we dit opvangen, zie later in de voorbeelden

En praktisch ?


mijn oplossing voor de cursus
3 ledjes en een schakelaar

alles ingestoken

of een zicht op mijn breadboard
met verschillende projecten

top

Checken met !GPIOConfig
Zoals in deel 3, gaan we ook nu het programma "!GPIOConfig" gebruiken. Gewoon het programma starten en kijken wat er gebeurt als we de schakelaar indrukken.

top

Ons basic-programma "LED aan"
We schrijven een programma: de LED gaat aan als we op de schakelaar drukken.
Schakelaar en LED zijn aangsloten en nagekeken, zie hierboven. Opgelet, geen enkele ingebouwd controle zoals in deel 3.
Het programma stoppen met de esc-toets.
Het programma werkt enkel omdat we vooraf met "!GPIOConfig" de GPIO pin 4 reeds als output hebben gezet.

top

Als compleet programma "!Switch" Om onszelf wat typwerk te besparen, vertrekken we van een "leeg skelet"

top

Samenvatting
RISC OS TaskWindow/BASIC Raspian Python
>SYS "GPIO_GetBoard" TO variable

>SYS "GPIO_ReadMode",gpio-nr% TO variable%
>SYS "GPIO_WriteMode",gpio-nr,1 (output)

>SYS "GPIO_ReadData",gpio-nr TO variable

>SYS "GPIO_WriteData",gpio-nr,1
>SYS "GPIO_WriteData",gpio-nr,0

ledaan

REM is dit een Raspberry Pi ?
SYS "GPIO_GetBoard" TO board%

IF board% = 11 OR board% = 12 THEN
   PRINT "Dit is een Raspberry Pi ";
   IF board%=11 THEN PRINT "A"
   IF board%=12 THEN PRINT "B"

   REM de waarde achter pin% is het GPIO pin nummer
   pinin%=18 : PRINT "GPIO "+STR$(pinin%)+" is input."
   pinout%=4 : PRINT "GPIO "+STR$(pinout%)+" wordt output."

   REM is GPIO pin reeds een uitgang ?
   SYS "GPIO_ReadMode",pinout% TO mode%
   IF mode% <> 1 THEN
       SYS "GPIO_WriteMode",pinout%,1
       PRINT "GPIO pin is nu een uitgang."
   ELSE
       PRINT "GPIO pin was al een uitgang."
   ENDIF

   REM do this forever
   PRINT "Starting ..."
   REPEAT
       SYS "GPIO_ReadData", 18 TO in%
       IF in%=0 THEN
          SYS "GPIO_WriteData",4,0
       ELSE
          SYS "GPIO_WriteData",4,1
       ENDIF
   UNTIL FALSE

ENDIF
END

Dubbel-klikken om programma te starten.

top

Extra oefeningen
Enkele variaties en uitbreidingen om een ledje aan te sturen
Klik hier voor een mogelijk oplossing, met korte beschrijving.