Een 16x84 is een single-chip microcontroller: een complete computer op een enkel IC. Compleet betekent dat een 16x84 een processor, programma geheugen, reken geheugen en aansluitingen voor het aansturen van andere ICs bevat. Vergeleken met een PC bevat een 16x84 van elk van deze dingen maar een heel klein beetje, en de processor is ook veel langzamer dan een PC. Daar staat tegenover dat een 16x84 een stuk kleiner en goedkoper is dan een complete PC en ook veel minder stroom verbruikt.
Het komt trouwens vaak voor dat er een 16x84 of een soortgelijke microcontroller verwerkt worden in een PC, b.v. in de muis.
PC | 16x84 | |
---|---|---|
![]() |
![]() |
|
programma geheugen | 1 Mb ROM, 5 Gb Harde Schijf | 1 K Instructies in EEPROM, 64 BYTES Data EEPROM |
reken geheugen | 32 Mb RAM | 36 (16c84) of 68 (16f84) byte RAM |
processor | 32 Bits, 200 MHz, 200 MIPS, 100 MFlops | 8 Bits, 10MHz, 2.5 MIPS, 1KFlops |
randapparatuur | monitor, toetsenbord, muis, paralelle poorten, seriele poorten, netwerk, joystick, MIDI, luidsprekers, microfoon | 13 I/O pinnen |
stroomverbruik | 5A@ 5V, 3A @ 12V (50W) | 100uA @ 5V (0.5mW) |
afmetingen | 40 x 20 x 10 cm | 158 x 10 x 5 mm |
gewicht | 10 kg | 1 g |
Let op dat de aanduidingen K en M in de informatica vaak net iets anders betekenen dan in de electronica. De andere standaard aanduidingen hebben wel de zelfde betekenis.
aanduiding | electronica | informatica |
---|---|---|
M | miljoen = 1.000.000 =10^6 | 2^20 = 1024 * 1024 = 1048576 |
K | duizend = 10^3 | 2^10 = 1024 |
m | milli = duizendste = 10^-3 | |
u | micro = miljoenste = 10^-6 | |
n | nano = duizend miljoenste = 10^-9 | |
p | pico = miljoen miljoenste = 10^-12 |
Een 16x84 is een IC met 18 pinnen. 13 daarvan (A0 .. A4 en B0 .. B7) kunnen door het programma in de 16x84 aangestuurd worden, naar keuze als ingang of als uitgang. Deze pinnen zijn digitaal, dus ze kunnen (als uitgang) alleen hoog of laag worden gemaakt door het programma, en ze kunnen (als ingang) alleen hoog en laag onderscheiden. Het programma in de 16x84 beslist of een pin ingang of uitgang is, en dit kan ook tijdens het uitvoeren van het programma veranderd worden.
De overige 5 pinnen zijn een massa (Gnd), een voeding (Vcc = +5 Volt), een reset ingang (MCLR, moet hoog zijn om het IC te laten werken) en twee aansluiting voor een kristal (OSC1 en OSC2).
De pinnen A4 en B0 kunnen als normale ingangen of uitgangen gebruikt worden, maar ze hebben ieder ook nog een speciale functie: A4 als clock ingang voor een teller en B0 als interrupt ingang. Als je de speciale functie niet gebruikt kan je A4 en B0 als gewone ingang of uitgang gebruiken. Let wel op bij gebruik van A4: als uitgang is dit een open-collector uitgang, dus A4 kan geen stroom leveren naar de massa. De pinnen van poort B kunnen als ze als ingang worden gebruikt worden voorzien van een interne pull-up weerstand.
De pinnen B6 en B7 worden tijdens het laden van een programma gebruikt. Dit werk niet als deze pinnen te zwaar belast worden, in dat geval zal het niet lukken om de 16x84 te laden terwijl het IC in je schakeling zit. Een belasting via een weerstand van ten minste 10k zal nooit een probleem opleveren.
Uit zichzelf doet een 16x84 niets: je moet een programma schrijven dat precies aangeeft wat het IC moet doen. Vervolgens moet je dit programma vertalen (compileren) naar codes die het IC begrijpt en die codes in het IC laden. Heb je dit eenmaal gedaan dan blijft het programma in het IC totdat je er een nieuw programma in laadt, ook als je de voeding van het IC uitschakelt.
De code 16x84 staat voor twee verschillende IC's, de oudere en wat goedkopere 16c84 en de nieuwere, iets duurdere 16f84. Tenzij is vermeld dat er perse een 16f84 moet worden gebruikt (die heeft namelijk wat meer reken geheugen) kan je beiden gebruiken.
Een 16x84 werkt alleen als je er een kristal op aansluit, met nog twee kleine condensatoren. Meestal gebruiken we een 4MHz kristal en twee condensatoren van 22pF. Een 16x84-10 (het getal achter de streep geeft de maximale kristal frequentie aan) kan ook met een 10MHz kristal werken en is dan 2.5 keer zo snel als met een 4MHz kristal.
Er zijn dus 4 soorten 16x84's: de 16c84-4, 16c84-10, 16f84-4 en 16f84-10. De f end -10 versies zijn meestal iets duurder, maar als je de keuze hebt koop dan een 16f84-10.
Dit is het basisschema voor het gebruiken van een 16x84. Je ziet het IC zelf, het kristal met de twee condensatoren, een weerstand die de MCLR pin hoog maakt en een condensator om de voedingsspanning te ontkoppelen. Deze ontkoppel condensator moet zo dicht mogelijk bij de massa en voeding pinnen van de 16x84 worden geplaatst.
Op de foto's zie je de losse componenten en het het schema opgebouwd op een experimenteer bord. Om te voorkomen dat de pinnen van het IC beschadigd raken zit het IC altijd in een voetje met stevige (ronde) pennen. Haal het IC nooit uit dit voetje!
In het schema is aangegeven dat de 16x84 een voeding van 5 Volt nodig heeft. Voor schakelingen waardbij de lader steeds is aangesloten en het stroomverbruik minder is dan 100mA kan je de voeding van de lader gebruiken. Als je de lader aansluit op een stekkervoeding dan wordt de 5 Volt geleverd via de aansluiting van de lader op de 16x84.
Voor schakelingen die los van de lader gebruikt gaan worden of meer dan 100mA gebruiken kan je een voeding maken met een 7805 (met een kleine koelplaat en niet te veel verschil tussen de in- en uitgangsspanning kan een 7805 1A leveren). Als de schakeling op batterijen moet gaan werken gebruik dan een 4.5 of 6V batterij (b.v. 3 of 4 penlights) of 4 NiCad accu's.
Als de 16x84 wilt voeden vanuit een batterij gebruiken die meer spanning levert (b.v. voor een motor) dan moet je een 7805 gebruiken. Pas op met het aansluiten van een te hoge spanning op de 16x84, dit is een betrouwbare manier om het IC voor goed onbruikbaar te maken.
We programmeren de 16x84 in een programmeertaal die JAL heet. Op een PC maken we een file met het programma. Gebruik hiervoor een text editor, b.v. notepad (onder windows) of edit (onder DOS). Geef de file de extensie ".jal". Als je het programma hebt geschreven moet je het compileren. Dit doe je door in de directory waar je het programma hebt gemaakt het DOS commando
jal <file>
te geven, waarbij je <file> vervangt door de naam van jouw file
(zonder extensie).
Als er volgens de compiler een fout in je programma zit zal hij dit aangeven, met het nummer van de regel waar de fout zit en een beschrijving van de fout (in het Engels). Je moet dan in de editor de fout opzoeken en verbeteren en opnieuw compileren, totdat het programma volgens de compiler OK is.
Als het programma gecompileerd is moet je het nog in de 16x84 laden. Hiervoor gebruiken we een lader die op een seriele poort van de PC wordt aagesloten. De verbinding tussen de lader en de 16x84 maken we met een testclip. Let er op dat het zwarte streepje op de testclip op pin 1 van de 16x84 wordt aangesloten. De pinnen 9 en 10 van het IC blijven buiten de testclip.
Het DOS commando om het gecompileerde programma in de 16x84 te laden is
wisp go <file>
waarbij je weer <file> moet vervangen door de naam van jouw
file (zonder ".jal").
Als de lader op een andere seriele poort dan COM1 is aangesloten moet je de seriele poort aangeven waar hij op is aangesloten, b.v.:
wisp port com2 go <file>
Als het laden niet lukt (er verschijnt iets anders dan OK) dan kan je het volgende proberen:
Je kunt nu proberen of de schakeling en het programma doen wat je verwacht. De verbinding met de lader (de testclip) kan je gewoon laten zitten.
Programmeren is moelijk, dus verwacht niet dat het programma direct zal doen wat je verwacht. Je moet het programma dan gaan debuggen (Engels voor onluizen). Probeer de schakeling uit, kijk wat de schakeling doet, kijk goed naar je programma en probeert te begrijpen waarom.
De opdrachten zijn zo opgezet dat je begint met een eenvoudige schakeling en
een programma dat je alleen maar hoeft over te typen. In een aantal
stappen moet je dan de schakeling en het programma uitbreiden tot je
het gewenste eindresultaat bereikt hebt.
Iedere stap is aangeven met een 'werk in uitvoering' icoon:
Probeer niet om stappen over te slaan,
de kans is dan groot dat je eindigt met een programma dat niet werk en waarin je
te veel veranderd hebt om de fouten nog te kunnen vinden.
Bewaar je zelf geschreven programma's altijd in je eigen directory op de PC en op een floppy die je zelf bij je houdt. In sommige opdrachten moet je stukken programma van vorige opdrachten opnieuw gebruiken. Naast het icoontje voor de opdracht staat en filenaam die je kunt gebruiken om het bijbehorende programma in op te slaan.