ATtiny84 drop-in vervanger voor Parallax BASIC Stamp 1 voor gebruik in de Lego BASIC-Buggy uit 1999

De BASIC Stamp 1 van Parallax is een kleine single board computer met een PIC16C56A microcontroller die bij de introductie in 1992 vooral werd gebruikt om in studenten en hobbyisten bekend te maken met de mogelijkheden en de werking van microcontrollers. De BASIC Stamp 1 werd uitgebracht met een uitgebreide experimenteerhandleiding met veel toepassingsvoorbeelden.

De Parallax BASIC Stamp 1 (afbeelding Parallax)

Werken met de BASIC Stamp 1

De microcontroller was door Parallax voorzien van PBASIC 2.5, een BASIC dialect met taaluitbreidingen voor het gebruik van de hardwarevoorzieningen van de Stamp. Deze vroeger populaire maar nu wat in vergetelijkheid geraakte programmeertaal werd door Parallax goed ‘verkocht’, met omschrijvingen als “program execution is a single process from top to bottom, making it easy to follow and understand” en “the syntax is very clean and simple — no curly braces or semicolons required“, voorbijgaand aan in PBASIC missende concepten als functies en namespaces. Maar bonuspunten voor de poging deze retro programmeertaal weer wat op te vijzelen.

Schematische weergave van de Parallax BASIC Stamp 1 (illustratie Parallax)

De BASIC Stamp 1 bestaat uit een kleine printplaat van 35,8 x 10,2 mm, met hierop de volgende onderdelen:

  • PIC16C56A microcontroller in 20 pins SSOP behuizing
  • 93LC56 2K seriële EEPROM in 8 pins SOIC behuizing
  • TC54VN43 spanningsdetector in 3 pins SOT-23A behuizing
  • LM2936M-5 spanningsregulator in 8 pins SOIC behuizing
  • 4 MHz kristal
  • 4-voudige weerstandsarray
  • 15µF/10V elektrolytische condensator
  • 14 printpennen

Er zijn 8 I/O pinnen die voor diverse doeleinden kunnen worden gebruikt. De I/O pinnen zijn genummerd P0..P7 en worden ook zo in PBASIC geadresserd. Hiernaast zijn er twee aansluitingen voor de voedingsspanning: Vin voor spanningen tussen 5,5 V en 15 V en Vdd voor een vaste voedingsspanning van 5 V. Seriële communicatie vindt plaats via PCO en PCI. De stroomopname is 1 mA bij normaal gebruik en 25 µA in slaapstand.

Om de bruikbaarheid van PBASIC in te schatten een voorbeeldprogramma: met een op P7 aangesloten led kan deze met het volgende programma met tussenpauzen van 500 ms worden aan- en uitgeschakeld:

DO
  HIGH 7
  PAUSE 500
  LOW 7
  PAUSE 500
LOOP

Er is in de BASIC Stamp 1 ruimte voor in totaal 80 instructies, die in de 2K EEPROM worden opgeslagen. De verwerkingssnelheid is ongeveer 2000 instructies per seconde.

Lego BASIC-Buggy met BASIC Stamp 1

Ik heb een Lego BASIC-Buggy gemaakt, in 1999 door Elektuur gepubliceerd in haar aprilnummer. Het is het soort robotplatform dat ik in 1994 zelf had willen ontwerpen, als ik toen de beschikking had gehad over de Lego micromotoren en een BASIC Stamp 1. Als platform is het een uiterst minimalistisch geheel, met voldoende sensoren en actuatoren om het geheel ook als autonome robot een kans van slagen te geven. 80 instructies, de maximum capaciteit van de BASIC Stamp 1, is echter niet veel om een programma met een hoog ambitieniveau in te schrijven.

De Elektuur BASIC-Buggy met de BASIC Stamp 1

De ontwerper van de robot, Gerhard Nöcker, krijgt van mij de prijs voor het implementeren van precies de belangrijkste sensoren in een robot. Hoewel er met een beetje inspanning nog wel ruimte voor verbetering was geweest is er met het huidige hardwareplatform voldoende te beleven: tastsensoren in de vorm van twee microschakelaars, twee infraroodsensoren voor het meten van afstanden, twee lichtsensoren voor het vinden van lichtbronnen, een kleine pieper en alles gevoed met een 9 volt batterij, voldoende voor een paar uur actieradius. Het schema laat zien dat werkelijk alle I/O aansluitingen van de BASIC Stamp 1 worden benut:

Schema Elektuur BASIC-Buggy (schema Elektuur/Gerhard Nöcker)

Naast de BASIC Stamp 1 vinden we de volgende onderdelen:

  • Sharp IS471F OPIC Light Detector with Built-in Signal Processing Circuit for Light Modulation System
  • 78L05 spanningsregulator
  • L293D motor driver
  • 74HC04 6-voudige NOT-poort
  • 2 x lichtgevoelige weerstand
  • Buzzer

In het schema wordt de voedingsspanning aan Vin toegevoerd en wordt Vdd niet gebruikt. PCO en PCI worden naar buiten gevoerd middels een programmeerconnector. De RESET aansluiting wordt niet gebruikt. De I/O pinnen zijn als volgt toegepast:

  • P0, P1 en P2 zijn verbonden met de motorbesturing. P0 activeert hierbij beide motoren en P1 en P2 bepalen de richting ervan. Hoewel andere manieren mogelijk zijn, heeft de ontwerper bedacht dat P0 de snelheid van beide motoren regelt
  • P2 bestuurt de buzzer, met de in PBASIC beschikbare SOUND instructie
  • P3 en P4 zijn verbonden met de afstandsensoren, waarbij de sensoren worden ingeregeld om op ca. 20 centimeter afstand de pinnen logisch 1 te maken; de waarde hiervan wordt ingelezen met de in PBASIC beschikbare POT instructie
  • P5 en P6 zijn verbonden met de LDR’s en de waarde hiervan wordt ingelezen met de in PBASIC beschikbare POT instructie
  • P7 is verbonden met een weerstandsnetwerkje waarmee de stand van de microschakelaars wordt bepaald, eveneens met de POT instructie

De PIC16C56A microcontroller die op de BASIC Stamp 1 wordt gebruikt heeft geen ADC omzetters aan boord en gebruikt een andere manier om analoge signalen te bemonsteren. De PBASIC POT pin, schaal, variabele instructie geeft een variabele (0 – 255) terug die de hoeveelheid tijd weergeeft die nodig was om een condensator via een weerstand te ontladen. De pin moet worden aangesloten op één kant van de variabele weerstand, waarvan de andere kant via een condensator met aarde is verbonden. POT realiseert dit door de pin eerst voor 10 ms logisch hoog te maken zodat de condensator is geladen. De pin wordt dan als input ingesteld en POT start een timer. Als de RC-spanning beneden 1.4 V valt ziet de PIC16C56A dit als logisch laag en de timer wordt gestopt. De tijd wordt vervolgens vermenigvuldigd met schaal / 256 en de resulterende waarde wordt aan de variabele toegekend.

In het schema worden P3, P4, P5, P6 en P7 op deze manier toegepast. P0, P1 en P2 worden als digitale pinnen met PWM gebruikt.

Van BASIC Stamp 1 naar ATtiny84

De BASIC Stamp 1 is anno vandaag de dag niet meer heel praktisch, met een moeizame programmeerinterface en weinig programmageheugen. Ik voel veel meer voor een drop-in replacement met een ATtiny84 bijvoorbeeld, een 14-pins microcontroller met 12 I/O pennen en 8 kbyte aan programmageheugen.

Omdat de elektronische schakelingen die zijn verbonden met P3, P4, P5, P6 en P7 een afwijkend gebruik kennen, moet daar eerst een voorziening voor komen wil er sprake kunnen zijn van een drop-in replacement.