Annex32 BASIC – programmeren

Héél lang geleden heb ik best veel gedaan met BASIC. Het zal 1985 – 1986 is geweest dat ik voor het eerst zelf een heuse computer had! Eerst de Atari 600XL en later de iets grotere 800XL met meer geheugen. Er was een Atari BASIC beschikbaar, blijkbaar een afgeleide van Microsoft BASIC.

Atari 600XL
Atari 800X

Er was iets mis met die 600XL. Er kwamen allerlei foutmeldingen en zelfs de weinige zaken die in de summiere handleiding stond kreeg ik niet voor elkaar. Ik heb hem vrij snel kunnen omwisselen (met bijbetaling natuurlijk!) voor de 800XL. Ze kwamen als set inclusief een taperecorder op programma’s op te kunnen slaan en weer te kunnen laden (met cassettebandjes).

Atari 1050 taperecorder

Via die Atari ben ik ook voor het eerst met elektronica in aanraking gekomen. In een of ander tijdschrift stond destijds een hele artikelenreeks over elektronicaprojectjes met de Atari. Het eerste artikel ging over het aansluiten van LDR (light dependent resistor) op een van de joystickporten. Door er meer of minder licht op te laten vallen veranderde een door de Atari geproduceerd geluid van toonhoogte. Geweldig vond ik het. 🙂 Ik denk dat het uit het “Atari User” magazine kwam. Heel veel opties zijn er niet, want er was toen maar weinig documentatie over Atari voorhanden. Ik ben nog wel eens voor wat boekjes vanuit Delft naar Haarlem (geloof ik) gereden, omdat ze daar een boek hadden dat ik bij mij in de omgeving niet kon krijgen! Het kan ook zijn dat ik het in het blad “ELEX” heb zien staan, maar ik kan de artikelenreeks daar niet terugvinden.
In ieder geval was dat mijn eerste aanraking met computers en met programmeren in BASIC. Veel anders kon je er ook niet me doen. Je kon er spelletjes mee spelen (er was een uitsparing om spelletjes-modules in te doen) maar daar had ik geen interesse in.

Na de 800XL overgestapt op de Atari 1040ST, met een prachtig scherp monochroom beeld op de SC1224 monitor en met GFA BASIC. Ook op de opvolgen, de Atari Mega 2 en later 4, met GFA BASIC gewerkt.

De Atari 1040ST – the poor man’s Mac.

Daarna nog een tijdje een echte Mac gehad: zo’n grijze, dus niet echt een Mac! Maar wel met een BASIC-verie (mogelijk was dat MacBasic). Op enig moment overgestapt op Windows computers en ook overgestapt van BASIC naar een Pascal-variant: Delphi. Veel later nog wel eens, onder Windows (XP vermoed ik) wat gedaan met Visual BASIC.

En nu dan BASIC op een microcontroller. Het programma om een OLED schermpje aan te sturen zit echt verbluffend eenvoudig in elkaar. Zowel I2C als het OLED-schermpje (SSD1306) zijn gewoon als standaardelement opgenomen in de taal. Dat maakt het allemaal zeer bondig.

I2C.SETUP 8, 9  ' set I2C port on pins 21 and 22

OLED.INIT 1 ' init the OLED upside-down
OLED.CLS ' clear the screen
OLED.FONT 2
OLED.COLOR 1

OLED.PRINT 10,10, "HELLO WORLD"

In de Editor op de kleurrijke webpagina van de ESP ziet dat er zo uit.

Na het invoeren van de programmaregels moet je het opslaan in de microcontroller met Save. Met Run wordt het programma uitgevoerd. Hieronder het resultaat.

De zondagochtend zon verlicht mijn “werk”

Voor het testen van van deze programmaatjes heb ik een opstelling gemaakt van een ESP32-C3, een OLED-schermpje, een aantal drukknopjes en een rijtje LEDs.

ESP32-C3 met aanhangsels
Schematisch

Onderstaand programmaatje laat LED 1 (op GPIO2) 20 21 (want 0 t/m 20) maal aan en uit knipperen.

PIN.MODE 2, OUTPUT

DO  
  PIN(2) = 1
  pause 1000
  PIN(2) = 0
  pause 1000 
   
  i = i + 1
  
LOOP UNTIL i >20

Het volgende programmaatje zet de LED’s een voor een aan en zet ze daarna weer uit, gebruikmakend van een DO – LOOP en een FOR – NEXT lus.

PIN.MODE 2, OUTPUT  'LED 1 
PIN.MODE 3, OUTPUT  'LED 2
PIN.MODE 4, OUTPUT  'LED 3

i = 2

DO                    'Zet de LEDs 1 t/m 3 een voor een aan
  pin(i) = 1
  pause 1000
  i = i + 1
LOOP UNTIL i >4

FOR i = 1 TO 4         'Zet de LEDs 1 t/m 3 een voor een uit
  pin(i) = 0
NEXT i

Het maakt niet uit of je kleine of hoofdletters gebruikt A is hetzelfde als a in Annex32. En je kunt het ook zo maar door elkaar gebruiken. PIN en/of pin, PAUSE of Pause het maakt allemaal niks uit.

PIN.MODE 0, INPUT, PULLUP
PIN.MODE 1, INPUT, PULLUP

PIN.MODE 2, OUTPUT
PIN.MODE 3, OUTPUT
PIN.MODE 4, OUTPUT

I2C.SETUP 8, 9  ' I2C op pin 8 (SDA) en 9 (SCL)
OLED.INIT 0     ' OLED scherm normaal (niet ondersteboven)
OLED.CLS        ' wis het scherm
OLED.FONT 2
OLED.COLOR 1

do

A = pin(0)
B = pin(1)

if A = 0 THEN
  OLED.CLS
  OLED.PRINT 10,10, "LED 1 aan"
  pin(2) = 1
  PAUSE 1000
  OLED.CLS
END IF

if B = 0 THEN
  OLED.CLS
  OLED.PRINT 10,10, "LED 1 uit"
  pin(2) = 0
  PAUSE 1000
  OLED.CLS
END IF

loop

Hierboven: wanneer je op knop 1 drukt, gaat LED 1 aan en dat toont ie ook op het OLED-schermpje. Druk je daarna op knop 2 dan gaat LED 1 uit en ook dat wordt op het OLED-scherm getoond. Om inbranden van het schermpje te voorkomen wordt de tekst telkens na 1 seconde gewist met OLED.CLS.

ADC
Op zo’n ESP32-C3 zitten ook nog eens zes analoge ingangen. Hieronder heb ik GPIO5 gebruikt. Ik heb even moeten zoeken, maar de opdracht OLED.PRINT verwacht een string als variabele. Uit de ADC komt een getal (tussen 0 en 4095) dat door STR$() omgevormd moet worden naar een string. Opgelost.

' ADC_OLED_test.bas

I2C.SETUP 8, 9  ' I2C op pin 8 (SDA) en 9 (SCL)
OLED.INIT 0     ' OLED scherm normaal (niet ondersteboven)
OLED.CLS        ' wis het scherm
OLED.FONT 1
OLED.COLOR 1

DO
  A=ADC(5) 
  OLED.PRINT 10,10,STR$(A)
LOOP

Het leukste is nog dat het allemaal goed gaat. 🙂

Een volgende keer verder kijken naar de meer geavanceerde mogelijkheden. Bijvoorbeeld een webpagina die je over WiFi, of Bluetooth kunt benaderen en waarmee je e.e.a. kunt aansturen.

Geef een reactie

Je e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *

Deze site gebruikt Akismet om spam te verminderen. Bekijk hoe je reactie gegevens worden verwerkt.