Het 68HC11F1 ontwikkelbord en de bierkelder.

© E.M. van Rossem.

Deze site is bedoeld voor mensen die het MICB2 practicum hebben afgerond maar nog meer willen doen met hun kennis.

De bedoeling is dat we het bierkelderprogramma zoals beschreven in http://bd.eduweb.hhs.nl/micb2/opdracht1.htm gaan aanpassen, zodanig dat het kan draaien op het 68HC11F1 ontwikkelbord. Omdat bij het practicum altijd de 68HC11A8 is gebruikt, zal hier worden uitgelegd met welke verschillen je rekening moet houden. Verder heeft het 68HC11F1 ontwikkelbord een eigen stukje software om .s19 files te kunnen laden en te dubuggen, de M11 software. Omdat deze software nieuw is en anders in gebruik dan THRSim of de EVM software zal ook deze beschreven worden.

Een overzicht van de verderop beschreven onderdelen:

Verschillen tussen HC11A8 en de HC11F1.

Tijdens het MCB practicum heb je geleerd ASM-code te schrijven voor de Motorola 68HC11A8. Maar de HC11 familie van Motorola is nog veel groter. Alle microcontrollers 'begrijpen' de ASM code, maar er is een groot verschil in o.a. aantal poorten, verschillende interne geheugens en interne adressering. Zo bevind zich het PortC register bij de A8 variant op adres $1003 terwijl deze bij de F1 variant op adres $1006 zit. Je begrijpt dat je code die je geschreven hebt voor de A8 dus niet zomaar draait op de F1 ! Even een overzicht met wat verschillen tussen de HC11A8 en de HC11F1:

Omschrijving 68HC11A8 68HC11F1
Behuizing 52 pins PLCC 68 pins PLCC
Aantal I/O poorten 5 ( A t/m E) 7 ( A t/m G)
Ram geheugen 256 bytes ( van $0000 t/m $00FF) 1024 bytes ( van $0000 t/m $03FF)
Rom geheugen 8 kBytes (van $E000 t/m $FFFF) niet aanwezig
EEprom geheugen 512 bytes (van $B600 t/m $B7FF) 512 bytes (van $FE00 t/m $FFFF)
Registers van $1000 t/m $ 103F van $1000 t/m $ 105F

De THRSim11 ontwikkelomgeving die je op school gebruikt, is speciaal gemaakt voor de A8 variant. Het simuleren van een programma voor de 68HC11F1 zal (voorlopig) niet kunnen. Port F & G zal je in deze omgeving niet terugvinden.

Port F is een 8-bit output-only poort en Port G is een 8-bit general-purpose I/O poort. Voor specificaties en geheugenadressen zie paragraaf 2.11.6 en 2.11.7 van de 68HC11F1 technical datasheets. Verder kan je de F1 registers (bladzijde 4-5 en 4-6 van de datasheets) vergelijken met de registerlijst in het boek van Miller (vanaf blz. 494) om te kijken welke adressen anders zijn.

Maar wat moet er nu veranderen aan het bierkelder programma gemaakt voor de 68HC11A8 om deze geschikt te maken voor de 68HC11F1? Ten eerste moeten we kijken of alle registers overeen komen. Er blijkt dat de registers die gebruikt worden in dit programma in beide HC11 varianten op dezelfde plaats zitten. Deze hoeven we dus niet te veranderen. Vervolgens moet de stackpointer verplaatst worden. Deze staat nu op $00FF voor de HC11A8 (=256 bytes). De HC11F1 heeft maar liefst 1024 bytes ram, dus kan de stackpointer aan het eind hiervan worden gezet op adres $03FF. Verder moeten we de twee waarden (in de initialisatie en in de interupt service routine) die verkeerd staan om goed te kunnen testen, terug zetten naar de echte waarden. Als laatste, en dit is erg belangrijk, moet het programma starten vanaf adres $FE00 in plaats van $C000. De resetvector moet hier ook op worden aangepast. Binnen de 68HC11F1 is maar 512 byte beschikbaar voor je code vanaf adres $FE00. Zorg er dus voor dat je programma niet te groot is, anders kan het niet meer gedraaid worden in het intern geheugen. Het programma is nu aangepast om te kunnen draaien op de 68HC11F1.

Het 68HC11 ontwikkelbord.

Hiernaast zie je een foto van het 68HC11F1 ontwikkelbord (klik op plaatje voor een grotere versie). Het hart van de schakeling is de 68HC11F1, die ook in het midden van het bord zit. Hier omheen zitten diverse connectoren, die rechtstreeks zijn verbonden met de poorten op de HC11F1. Het grote IC rechtsboven is een geheugen IC, in dit geval 32K RAM. Er kunnen in totaal 8 verschillende geheugens worden gebruikt; EPROM (8, 16, 32 & 64K), EEPROM (8 & 32K) en RAM (8 & 32K). Met behulp van de jumpers op K3 kan je instellen welk type geheugen erin zit. Doe dit altijd voordat je spanning op het bordje zet !! Onderstaande tabel geeft een overzicht van de jumpersetting voor de verschillende geheugen typen. Pin nummer 1 zit aan de linkerkant bij het afgeschuinde kantje.

Type 1-2 2-3 3-4 4-5
EPROM 8K (2764) -- -- -- --
EPROM 16K (27128) -- -- -- --
EPROM 32K (27256) X -- -- --
EPROM 64K (27512) -- X -- X
EEPROM 8K (28C64) X -- -- --
EEPROM 32K (28256) X -- X --
RAM 8K (6264) X -- X --
RAM 32K (62256) X -- X --
X = jumper aanwezig, -- = geen jumper
Tabel 2: Overzicht pinbezetting t.b.v. verschillende geheugens

Verder zit links de aansluiting naar een RS232 apparaat. Dit kan natuurlijk de pc zijn bij het programmeren, maar ook elk ander apparaat met zo'n aansluiting. Het bord kan dan data uitwisselen met dit apparaat, bijvoorbeeld een modem of een extern display. Ook de resetknop zit aan de linkerkant. Op de aansluiting voor de voeding kan een spanning van 9 tot ongeveer 12 volt worden gezet. Als er spanning op het ontwikkelbordje staat, brand het rode ledje. Verander nooit jumpersettings als er nog spanning op je bordje staat. Dit heeft geen zin, omdat de instellingen toch alleen bij opstarten worden overgenomen en het kan alleen maar tot schade leiden!!

Links naast de microcontroller zit JP3. Als deze jumper kortgesloten is, is de mogelijkheid om NOT(XIRQ) te gebruiken. Deze is zeer belangrijk bij op interupt gebaseerde programma's. Deze jumper moet ook altijd worden aangebracht om het ontwikkelbord in de Bootstrap Mode te krijgen.

Single Chip, Expanded, Bootstrap & Test Mode

Er zijn twee modes waarin het bord kan werken, single chip mode en expanded mode. In single chip mode wordt alleen gebruik gemaakt van het interne geheugen. Het extern geheugen kan eventueel van het bord worden gehaald. Poort B, C en F zijn beschikbaar op de connector voor normale I/O taken zoals in de vorige paragraaf beschreven. Een programma mag dus niet groter zijn dan 512 bytes en er mag niet meer dan 1024 bytes aan data opslag zijn. Is dit niet voldoende en heb je meer ruimte nodig voor je programma, dan zal je de microcontroller moeten opstarten in expanded mode. Poort B, C en F worden nu gebruikt om data uit te wisselen met het externe geheugen IC en kunnen dus niet meer voor andere doeleinden worden gebruikt. De maximaal beschikbare hoeveelheid ruimte voor je programma hangt nu af van het gebruikte extern geheugen.

Je kan kiezen welke mode je gebruikt door jumpers te plaatsen op K3 (pin 1 zit helemaal rechts, bij het schuine stukje). Door alleen een jumper te plaatsen over pin 1 & 2 selecteer je de single chip mode, door geen jumpers te plaatsen selecteer je expanded mode.

Als je over pin 1&2 als over pin 3&4 een jumper plaatst, selecteer je de special bootstrap mode. Deze mode is nodig om je programma in de 68HC11F1 te kunnen laden. In deze mode wordt er eerst door een klein programmaatje, een talker genoemd, een verbinding gemaakt tussen het bord en de pc, waarna je je programma kunt uploaden naar het bord. Hoe dit exact moet lees je verderop. Als je programma er dan eenmaal in zit, haal je de spanning van het bord en verzet je de jumpers naar single chip of expanded mode. Als je nu weer spanning op het bordje zet, start je programma vanzelf op (mits je resetvectoren goed staan natuurlijk.)

Het is mogelijk om nog een mode te selecteren, namelijk de Special Test Mode. Dit kan door alleen een jumper te plaatsen over pin 3 & 4, maar dit is niet zinvol. Deze mode is uitsluitend bedoeld om de chip te kunnen testen in de fabriek en heb je dus niets aan. Voor meer informatie over 'mode selection' kan je paragraaf 4.3.1 van de technical datasheets bekijken

Omdat het gebruik van extern geheugen in expanded mode vrij lastig is en er nog wat andere problemen om de hoek kijken, zullen we het bierkelder programma gaan draaien in single chip mode. Expanded mode wordt verder niet behandeld.

De M11 software.

De M11 software is een DOS programma om je programma's in het ontwikkelbord te laden en real time te debuggen. Helaas is dit programma uit 1997 nogal gevoelig voor het besturingssysteem wat gebruikt wordt. Op een Windows Me, 2000 of XP machine krijg ik geen communicatie tot stand tusen de pc en het ontwikkelbord. Op een Windows 3.11, 95 of 98 machine werkt het (meestal) wel. Het beste is om de pc na installatie van M11 op te starten in DOS-mode. Let op: Er moet wel een muisdriver zijn geinstalleerd, anders start het programma niet op. Soms lukt het zelfs om de M11 software te laten draaien in een Dos-box onder windows, maar dit is niet altijd stabiel zodat er fouten kunnen optreden.Voordat we er mee kunnen werken moeten we eerst een paar stappen volgen:

Er zal nu (waarschijnlijk) een scherm verschijnen waarin gevraagd wordt om M11.txt opnieuw aan te maken. Kies voor Y(es).

Hierna kom je in het hoofdscherm van de M11 software terecht. Je ziet dat er 8 verschillende menu's zijn waar je instellingen kunt maken

en data kunt veranderen. Om te beginnen zullen we eerst even een opsomming geven van de menu's en wat je er ongeveer kan verwachten:

Nu we de menu's een beetje bekeken hebben gaan we proberen om verbinding te maken met het ontwikkelbord en het aangepaste bierkelder programma in het interne geheugen te laden. Dit doen we als volgt:

Vervolgens kan er een programma worden ingeladen, dit gaat op onderstaande manier:

Het is ook mogelijk om je programma te downloaden en te runnen in de Bootstrap mode. Je moet dan eerst de StackPointer zetten op $FE00. Vervolgens kan je o.a. met next_STeP, GO en STOP door het programma heenlopen. Houd er wel rekening mee dat je de RS232 poort niet kan testen. Deze wordt gebruikt om de debugger te laten praten met het ontwikkelbord. Je kan dus pas testen of je programma goed samenwerkt met de RS232 poort, als het ontwikkelbord in Single Chip Mode draait.

Als alles goed is gegaan staat je programma in het intern geheugen van de 68HC11F1. Het bord heb je in single chip mode gezet en vervolgens heb je spanning op het bord gezet. Het programma draait, maar daar zie je nog niets van....

Het bierkelder programma op het 68HC11 ontwikkelbord.

Op het ontwikkelbord zit geen paneel met ledjes en schakelaars. Alle in- en uitgangen zijn alleen beschikbaar via de connectoren. Om nu te bekijken of het bierkelder programma echt draait, gaan we ledjes via een weerstand aansluiten op PB0, PB1 en PB2 (zie tekening). Op PE0 sluiten we een variabele voeding (0 tot 5 V) aan om de temperatuursensor te simuleren. Verbindt de aarde van de voeding met die van het ontwikkelbord. Als laatste sluiten we een pc op de RS232 poort aan. Op deze pc starten we Hyperterminal en stellen deze goed in (vb: com1, 9600,n,8,1). (Aansluitgegevens van de poorten zijn terug te vinden in de Elektuur sheets)

Als alles goed is aangesloten zou het groene ledje moeten knipperen in een tempo van ongeveer 1 seconde. Afhankelijk van de spanning op PE0 brand het bovenste rode ledje, het onderste rode ledje of geen ledje. Door in hyperterminal een '?' in te typen, krijg je de status terug. Deze status moet kloppen met de ledjes, bijvoorbeeld: Als PB0 brand krijg je de melding "Het verwarmingselement staat aan". Ook kan je natuurlijk altijd met een oscilloscoop controleren wat er gebeurd op een bepaalde pen. Hieronder een plaatje van een meting aan pin PB2, het knipperende ledje. Je kan goed zien dat het knippertempo ongeveer 1 seconde is.

Het bierkelderprogramma draait nu in "echte hardware" en functioneert goed. Als laatste stap zou je de ledjes kunnen vervangen door een stukje aansturings-electronica voor een echte koel- en verwarmingselement. Ook de schakeling met de NTC mag dan niet ontbreken. Bouw het geheel in een oude ijskast en je weet zeker dat je bier altijd de perfecte temperatuur heeft..........

Download files.