Heb je nog een oude desktopcomputer, dan hoef je die echt nog niet weg te doen, Zo kun je bijvoorbeeld gegevens binnenhalen op dit ‘oudje’ in BASIC.
Henk Siewert
In mijn artikel in PC-Active 304 over het zelf bouwen van een weerstation, gaf ik al aan dat er vele manieren zijn om de gegevens van het station, in feite een Arduino, in een computer kunnen worden binnengehaald en op het scherm kunnen worden weergegeven. Dit artikel is min of meer een vervolg op dat artikel, maar je kunt ook andere data op een oude computer binnenhalen.
Oude pc
Het eerste waar je misschien aan denkt, is het maken van een app voor de telefoon.
Tenslotte is een zogenaamde smartphone niets anders dan een handzame computer met de mogelijkheid om ook te bellen.
Maar dat ga ik (nog) niet doen. Ik reis terug in de tijd en laat je zien hoe je gegevens kunt binnenhalen en opslaan via een ‘ouderwetse’ communicatiepoort.
Als je een weerstation gaat maken dat onafhankelijk van de (gezins)computer moet kunnen functioneren, dan kan het handig zijn om een oude pc op de kop te tikken. Dat kan bijvoorbeeld op Marktplaats of in de plaatselijke hergebruikwinkel waar je meestal voor een paar tientjes een nog goed functionerende pc kopen. Het voordeel van zo’n oude pc is dat als er iets misgaat met de elektronica, de schade beperkt blijft.
Mijn ervaring is dat usb-poorten bij het minste geringste scheve voltje of kromme ampèretje er de brui aangeven. Of je moet het geluk hebben dat je een ‘oude’ HP-computer uit de DC- of RC-serie hebt kunnen kopen. Deze computers zijn uitgerust met een beveiliging op de usb-poorten. Als die poorten meer dan 500 mAh trekken, slaan ze dicht en komt er een melding op het scherm te staan dat er iets niet helemaal goed is. Dat is heel handig bij het experimenteren met zelfgebouwde schakelingen. Zelf gebruik ik voor mijn experimenten zowel een DC7500 als een RP5700, beiden opgepept met een extra harde schijf en 3 en respectievelijk 4 GB RAM.
RS232C-poort
De RP5700 is bovendien uitgerust met vier RS232C-poorten en vier extra usb-poorten die ook nog eens zijn voorzien van programmeerbare/schakelbare spanningsuitgangen van 5 tot 24 Volt. Kijk, daar kun je wat mee. Loop je ooit eens ergens tegen zo’n systeem aan dat te koop is, gelijk doen. Dit zijn ideale experimenteermachines.
Dit is Turing, mijn RP5700
Dit is Turing, mijn RP5700 met floppy- en zipdrive en hij draait op Windows 10 Pro 32-bits. Ja, mijn computers hebben namen. Ze kunnen tenslotte ook praten. En je weet wat het gezegde is, toch? Ik praat dus ik leef…
Verschillende besturingssystemen
Het mooie van die oude machines is dat ze op veel verschillende besturingssystemen kunnen draaien. Dat loopt uiteen van MS-DOS tot en met Windows 10. Zo heb ik op de RP5700 een 3,5inch-floppydrive en een Iomega Zip100 aangesloten. Dan kun je ook MS-DOS booten en heb je voor DOS een 100MB schijf. Dat is lekker werken!
Bij de RP5700 heb ik ook een losse harde schijf met Ubuntu. De pc kan dan via het bootmenu (F12) ook in Linux werken. Nu ben ik daar geen liefhebber van: probeer maar eens een Arduino of een LaunchPad te programmeren onder Linux, wat een gedoe. Als je daar wel goede ervaringen mee hebt, hoor ik het graag.
Op Turing heb ik, hoewel hij een 64bits-processor heeft, een 32bits Windows 10-versie geïnstalleerd. Op een Windows 10-computer met 64bits kun je niet zomaar DOS-programma’s draaien en op een 32bits-versie wel, vandaar dus…
Dat betekent dat ik ook in BASIC en andere, onder DOS draaiende talen de RS232C-poorten kan gebruiken. Waarom? Gewoon omdat dat leuk is en soms ook wel heel erg handig. RS232C-poorten laten heel lange kabels toe. Probeer maar eens betrouwbaar gegevens over een tien meter lange usb-kabel te verzenden, dat is vragen om problemen. Usb is gemaakt voor maximaal 3 meter.
Microsoft QuickBasic en CP/M
Voor het te bespreken programma maak ik gebruik van Microsoft QuickBasic versie 4.5. Deze versie is overal op het internet te downloaden.
Ik moet wel even een opmerking maken over de manier waarop ik het geprogrammeerd heb. Waarschijnlijk zul je bij het zien van de code eerst even in je ogen wrijven of je bril schoonpoetsen, maar het staat er werkelijk. Het is niet de meest gebruikelijke manier om een BASIC-programma te schrijven, maar het werkt prima en het levert heel goede, stabiele en snelle programma’s op.
De programmeerstijl is afkomstig van de legendarische BASCOM-compiler voor CP/M. (Wil je meer weten wat CP/M is, zoek dat dan op met een zoekmachine).
Maar het leuke is dat deze programmeerstijl vanaf de eerste Microsoft BASIC-compiler tot en met de laatste versie, VisualBasic for MS-DOS, steeds werd ondersteund. Weinig mensen zullen dit waarschijnlijk weten, maar ik heb er al die jaren prima mee gewerkt.
Het enige verschil tussen de CP/M en de latere DOS-versies is dat in de CP/M-versie voor de labels nummers werden gebruikt in plaats van tekst.
Voor meer informatie over deze manier van programmeren verwijs ik je graag naar het boek: Using Microsoft Compiled Basic, Murray L. Lesser, McGraw-Hill (January 1, 1985).
Nummerlabels in CP/M BASCOM broncode
Code van het programma
Laten we nu maar eens naar de code van het programma kijken. De code is van de website SWT Observatory (http://www.swtobservatory.nl) te halen. Misschien is het handig om de code uit te printen en naast het blad te leggen. Of zet de code in een editor die je opent in een tweede venster naast het blad.
Het programma is gemaakt voor het uitlezen van de waarde van een Analog TMP36 temperatuursensor die is gekoppeld aan een Arduino Uno. De Arduino stuurt de ADC-waarde naar de computer en op de computer wordt de waarde ontvangen via de RS232C-poort.
Maar daar moeten we wel eerst iets voor doen: de voltages van de TTL-uitgang van de Arduino en de RS232C-ingang van de pc verschillen namelijk behoorlijk. Deze poorten direct op elkaar aansluiten, leidt tot ongelukken in de elektronica. Een standaard RS232C-poort werkt met voltages tussen +15 en -15 Volt, de Arduino Uno werkt met alleen 5 Volt. We moeten dus deze niveaus aan elkaar aanpassen, maar gelukkig zijn daar kant-en-klare schakelingen voor te koop.
Met deze schakeling kunnen we de Arduino veilig aansluiten op de RS232C-aansluiting van de pc. Het geheel ziet er dan zo uit:
De Arduino aangesloten op de RS232C-aansluiting van de pc
Code
OK, dan nu de code. Het blok setup: ' define functions and program options lijkt me overduidelijk. Het word pas echt interessant bij main: Daar staat maar één regeltje : DO: LOOP. Dat is niet veel. Het is een eindeloze loop, waarin niets gebeurt maar dat is schijn.
Deze loop is alleen maar bedoeld om het programma aan het draaien te houden, de rest van de acties verloopt via interrupts. Dat houdt in dit geval in dat het programma in de loop ronddraait totdat er gegevens op de COM-poort verschijnen. Dan schiet het geheel in actie, verwerkt de gegevens en gaat vervolgens weer wachten op nieuwe gegevens.
Dat gebeurt door de regels:
OPEN portspec$ FOR RANDOM AS #1 ' open com port
ON COM(1) GOSUB getdata
COM(1) ON
Als er gegevens op COM(1) binnenkomen, komt ook het blok getdata: in actie. Als de gegevens zijn verwerkt, keert het blok weer terug naar de DO:LOOP en gaat rustig ronddraaien tot er weer gegevens op COM(1) binnenkomen, tenzij er een functietoets word ingedrukt. Er zijn vijf functietoetsen gedefinieerd via een interrupt:
ON KEY(1) GOSUB help ' help
KEY(1) ON
Toetsen
F1 en F2 zijn zogenaamde toggle-toetsen: dat betekent dat de aan/uit-functie beurtelings door dezelfde toets wordt uitgevoerd. Er wordt dus steeds omgeschakeld. F1 schakelt de helpfunctie aan en uit en F2 schakelt het opslaan van gegevens aan en uit.
F8 en F9 schakelen de debug-functie aan en uit, alleen doen zij het met verschillende toetsen. Je kunt hiervoor natuurlijk ook één toggle-toets maken, het voorbeeld heb je al.
F10 schakelt het programma op een nette manier uit. De COM-poort en een eventueel gegevensbestand worden gesloten om gegevensverlies te voorkomen. Het programma met ingeschakelde help- en debug-functie ziet er zo uit:
Het programma met ingeschakelde help- en debug-functie
Het vlakje bij File : is groen ten teken dat er een gegevensbestand open is en de gegevens worden opgeslagen. Elke keer als de File-functie wordt geactiveerd, wordt er een nieuw bestand aangemaakt met als naam de tijd waarop het bestand wordt geopend. Het is een CSV-bestand: CSV staat voor Comma Seperated Value en dat betekent dat je het bestand meestal rechtstreeks in een spreadsheetprogramma zoals Excel kunt openen om bijvoorbeeld een grafiek te maken.
Let even op de Vref-waarde. De Arduino is in dit geval ingesteld op analogReference(INTERNAL). Dat betekent dat Vref een waarde heeft van 1.1 Volt. Gebruik je bijvoorbeeld analogReference(DEFAULT), dan moet je de waarde aanpassen naar 5 Volt.
Het is het gemakkelijkste om het programma vanuit de QuickBasic IDE te starten of de compiler. Maak je gebruik van de command line compiler (BC.EXE), let er dan op dat je de juiste parameters meegeeft. Anders werken de interrupts niet.
Verder is het programma standaard BASIC, dus dat zal weinig problemen opleveren als je bekend bent met BASIC.
Mochten er vragen of opmerkingen zijn, kijk dan op de website http://www.swtobservatory.nl