Software

De bedoeling van dit project is om deze werkingsmodi te programmeren en in te lezen in de Microcontroller PIC16F876A zodanig dat men alles via het bedieningspaneel kan besturen. Oorspronkelijk waren we begonnen met programmeren in Assembler, maar na een week hebben we MicroBasic leren kennen.

MicroBasic
MicroBasic is een Basic compiler voor PIC controllers die je toelaat te programmeren in BASIC. MicroBasic beschikt over verschillende ‘built-in’ functies en libraries die het programmeren gemakkelijker en sneller maakt.




Eens geprogrammeerd, druk je op run en je programma wordt gecompileerd. In de message window kan men zien of men fouten heeft gemaakt en eens gecompileerd kan men ook zien hoeveel RAM en ROM geheugen van de Microcontroller wordt gebruikt.




Je krijgt dan een asm-file en een HEX-file en deze laatste kan je dan in je PIC inladen mbv Pickit 2 .

Het programma
De volledige BASIC source code vind je hier
De volledige Assembler source code vind je hier

Eerst worden verschillende variabelen aangegeven en worden de verschillende subprocedures gemaakt. Deze zijn:

ReadValues
In ReadValues gaat men telkens 5 waarden inlezen: 3 drukken, stijfheid, demofrequentie
Aangezien de drukken in de spieren constant kunnen veranderen, moeten de waarden constant worden ingelezen. Daarom gaat waarden van de druksensoren inlezen en deze ineens omzetten naar de correcte waarden die men op de display te zien moet krijgen. Dit alles gebeurt aan de hand van analoog to digital(ADC) optie van de microchip.
Het eerste stap hiervoor is initialisatie van ADCON0 en ADCON1. Vervolgens geeft de ADC_read waarden van 0 tot 1024(10 bit nauwkeurig) tussen 0 en 5 volt ,die omgezet wordt naar de goede waarde.
De stijfheid wordt veranderd mbv een spanningdeler en geeft opnieuw waarden van 0 tot  1024.
Die we omzetten naar 0 tot 100 (%)
De demofrequentie wordt eveneens ingesteld met een spanningdeler.

Display
De procedure Display dient om de ingelezen en omgezette waarden op de display te zetten. De waarden worden dus op de oude waarden herschreven.

Welcome
Een subprocedure die een initializatietekst op de display zet.

Dan begint het eigenlijke programma waar eerst de poorten van de Microcontroller als IN of UITGANG worden gedefinieerd en de Display en PWM geïnitializeerd worden.
Aangezien de druk in de spieren geleidelijk moet verhoogt worden om de beschadiging te vermijden is het gebruik van pulsbreedte modulatie onontbeerlijk. Deze microchip beschikt  over 2 pwm_porten. Deze worden gebruikt om de voorste spier apart en achterste spieren samen te besturen.
Vervolgens komen we in de hoofdlus die altijd doorlopen wordt. Deze begint met de 5 waarden in te lezen en op de display te zetten en gaat vervolgens een switch check uitvoeren om te zien naar welke mode hij moet gaan. Deze zijn de Demo mode , de Manual mode en de standby mode. In de standby mode doet hij niets (de druk in alle spieren worden op 0 gezet)

Demo
Eerst en vooral gaat hij kijken naar de demofrequentie. Naargelang deze waarde krijgt hij 2 waarden die dus de frequentie gaat bepalen. In de demo zelf gaat hij een bepaalde tijd de druk geleidelijk opbouwen in de voorste spier en de 2 achterste op 0 bar relatief. Daarna worden de 2 achterste spieren op druk gezet (geleidelijk met pwm) en de voorste op 0 gedurende een andere periode. Dan herhaalt het eerste zich terug enz.. Dit herhaalt zich zolang geen andere switch gedrukt wordt.

Manual
Eerst worden bepaald zaken op de display geplaatst en vervolgens wordt de druk in de spieren zodanig aangepast (geleidelijk met pwm) dat stijfheid overeenkomt met de waarde van de stijfheiddraaiknop. Dit herhaalt zich zolang geen andere switch gedrukt wordt.

Het verloop van het programma wordt met deze flowchart duidelijk gemaakt.