Assembler
Om de assembler-code te maken en operationeel te brengen voor de PIC16F876A, maken we gebruik van het software pakket mikroBASIC. Deze compiler laat toe om in C of in BASIC, als hogere programmeertaal, commando's te programmeren en nadien in assembler-code te converteren. Hoewel er gebruik wordt gemaakt van een hogere programmeertaal, blijft men dicht staan bij de machinetaal in die zin dat deze compilersoftware toelaat om in de assemblercode in situ te bekijken of te wijzigen.
Figuur 1
Flowchart
In Figuur 1 zie je de flowchart van het gehanteerde
proces. Eerst wordt de controller geïnitialiseerd met de
juiste flags voor het type PIC16F876A (o.a. de juiste
clockinstelling _OSC_HS, naam toewijzing van de gebruikte
registers en poorten, enz...).
Nadien volgt de declaratie van de variabelen en constanten
allen in een zorgvuldig gekozen datatype om het te
gebruiken geheugen van de controller zo laag mogelijk te
houden. Vervolgens initialiseren we de poortregisters en
ADC registers.
De oneindige loop van het programma start eerst met de
toewijzing van de werkingsmodus. Er staan drie functie
druktoetsen op het moederbord voor de gebruiker om een
keuze te maken. Wanneer de modus-boolean gekozen is door de
gebruiker, worden de overeentsemmende procedures opgeroepen
in de oneindige lus. De procedures worden hieronder
besproken voor elke modus.
Normale Modus:
In de normale modus operatie werkt de controller als volgt:
de ADC stockeert de gelezen waarde. Deze waarde wordt
omgezet in het juiste decimale formaat en wordt daarna
gedeeld door het aantal rijen (hier 84). Voor de deling
gebruikt men de wel bekende DIV functie om een geheel getal
te bekomen. Deze waarde wordt de de VUlevel variabele
genoemd.
Daarna volgt de procedure die zorgt voor het vullen van de
virtuele array van 1'en en 0'en. Als de VUlevel variabele
de waarde 56 heeft bijvoorbeeld, zal de array 56 1'en
bevatten en 84-56=28 0'en. Vervolgens zal de procedure
FillShiftRegisters deze array doorsturen naar de
childboards. Op deze boardjes zetten de shiftregisters de
seriële data om naar parallelle data op de LED-Tower.
In de laatste stap van de oneindige lus zal de
output-enable pin steeds geclocked worden op de juiste
frequentie om de verbruikte stroom te beperken (aangezien
de voeding niet het volle vermogen kan leveren van de hele
continu brandende toren LEDs).
Test Modus:
De test modus is een procedure die de LED-Tower test. Er
wordt een array gestuurd waar slechts 1 rij zal op lichten.
Vervolgens schuiven we de 1 op naar een hoger niveau tot
helemaal bovenaan en dan weer van voor af aan.
Op deze manier kan men zien of alle rijen wel degelijk
functioneren en is bovendien een leuk animatietje.
Effect Modus:
De effect modus werkt net zoals de normale modus maar hier
zal het beeld "smoother" gaan. Door een fall-off delay in
te voeren alsook een rise-time delay waardoor de LEDs
zachter vallen en zachter stijgen.
(In versie 2.2 zal een snowfall-effect in zitten maar dit
is nog in testfase)
Hieronder kan je de source downloaden:
Version 2.1 (14-05-2007)
VU.hex
VU.asm
VU.pbas
Version 2.2 Final
(coming soon online, debugging in progress)