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.

flowchart
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)

docicon VU.hex
docicon VU.asm
docicon VU.pbas




Version 2.2 Final
(coming soon online, debugging in progress)