Styresystem

Fra HTX Arduino
Spring til navigation Spring til søgning

Et rigtigt styresystem som man f.x. ser det i en PC håndterer alt bruger-input, disk-access, skærmhåndtering m.v. og vil typisk kunne sørge for at flere programmer kan fungere samtidigt i PC'en uden at de generer hinanden.

Styresystem i PIC'en

Det grundlæggende program i en PIC skal sørge for de samme ting som et styresystem - her får vi ikke noget forærende, men skal bygge alt fra bunden.

For at programmet skal kunne blive ved med at fungere, så laver man et Forever Loop, hvor man skal sørge for at alt kan ske fra, dette er hovedprogrammet.

I hovedprogrammet vil det normalt være en fordel at komme hurtigt rundt, så man vil typisk sørge for at der ikke er noget der tager tid i loopet, men hvis man ønsker at lave det så man kan har nogle rimeligt faste tider, så kan man lave det så man venter f.x. 10 ms i hvert gennemløb.

Strukturen i et sådan hovedprogram kunne se ud som følger

 -- Main loop
 forever loop
    -- Håndter input fra brugeren
    -- Håndter input fra andre kilder
    -- Lav beregninger
    -- Håndter output fra PIC
    disp_count = disp_count + 1
    if disp_count == 50 then
       disp_count = 0
       -- Håndter display output
    end if
    delay_1ms(10)
 end loop

Det man opnår med den viste kode er, at man kommer forbi alt det der er vigtigt at opdateret hurtigt, som tastetryk fra brugeren og ting der skal reageres på, både af input og output, men samtidig får man lavet en rolig display-visning der ikke står og flimrer, men kun opdateres ca. 2 gange i sekundet.

Initialisering

For at dette styresystem kan fungere skal der initialiseres nogle bestemte ting:

  • Definitioner for PIC'en (registre osv.)
  • Configurationsregistre - oscillator, reset m.v.
  • Import af delay-definitioner
  • Opsætning af Input og Output
  • Definitioner af variabler

Definitioner og configurering af PIC-kredse

Der skal naturligvis laves forskellige definitioner for hver PIC-type, men der er også forskellige måder at opsætte configurationen på de forskellige udviklingsboards, som er afhængig af hvilken PIC-type det er.

PIC12F675

Der skal includes en definitions-fil og opsættes en række konfigurations-opsætninger. Det er tilpasset de udviklingsboard vi har på Holstebro HTX og gøres som følger:

-- Chip def
include 12f675

-- Setup pic
pragma target clock 4_000_000
pragma target WDT DISABLED
pragma target OSC INTOSC_NOCLKOUT
pragma target PWRTE ENABLED
pragma target MCLR INTERNAL
pragma target CP DISABLED
pragma target CPD DISABLED
pragma target BROWNOUT ENABLED

PIC16F684

Der skal includes en definitions-fil og opsættes en række konfigurations-opsætninger. Det er tilpasset de udviklingsboard vi har på Holstebro HTX og gøres som følger:

-- Chip def
include 16f684

-- Setup pic
pragma target clock 4_000_000
pragma target WDT DISABLED
pragma target OSC INTOSC_NOCLKOUT
pragma target PWRTE ENABLED
pragma target MCLR INTERNAL
pragma target CP DISABLED
pragma target CPD DISABLED
pragma target BROWNOUT ENABLED
pragma target IESO DISABLED
pragma target FCMEN DISABLED

PIC16F690

Der skal includes en definitions-fil og opsættes en række konfigurations-opsætninger. Det er tilpasset de udviklingsboard vi har på Holstebro HTX og gøres som følger:

-- Chip def
include 16f690

-- Setup pic
pragma target clock 4_000_000
pragma target WDT DISABLED
pragma target OSC INTOSC_NOCLKOUT
pragma target PWRTE ENABLED
pragma target MCLR INTERNAL
pragma target CP DISABLED
pragma target CPD DISABLED
pragma target BROWNOUT ENABLED
pragma target IESO DISABLED
pragma target FCMEN DISABLED

PIC16F877

Der skal includes en definitions-fil og opsættes en række konfigurations-opsætninger. Det er tilpasset de udviklingsboard vi har på Holstebro HTX og gøres som følger:

-- Chip def
include 16f877

-- Setup pic
pragma target clock 4_000_000
pragma target WDT DISABLED
pragma target OSC XT
pragma target PWRTE ENABLED
pragma target CP DISABLED
pragma target CPD DISABLED
pragma target BROWNOUT ENABLED

PIC16F628

Der skal includes en definitions-fil og opsættes en række konfigurations-opsætninger. Det er tilpasset de udviklingsboard vi har på Holstebro HTX og gøres som følger:

include 16f628                    -- target PICmicro
--
-- This program assumes a 4 MHz resonator or crystal
-- is connected to pins OSC1 and OSC2.
pragma target clock 4_000_000     -- oscillator frequency
-- configuration memory settings (fuses)
pragma target OSC  HS              -- HS crystal or resonator
pragma target WDT  disabled        -- no watchdog
pragma target LVP  disabled        -- no Low Voltage Programming
pragma target MCLR external        -- reset externally

PIC16F84A

Der skal includes en definitions-fil og opsættes en række konfigurations-opsætninger. Det er tilpasset de udviklingsboard vi har på Holstebro HTX og gøres som følger:

include 16f84a                    -- target PICmicro
--
-- This program assumes a 4 MHz resonator or crystal
-- is connected to pins OSC1 and OSC2.
pragma target clock 4_000_000     -- oscillator frequency
-- configuration memory settings (fuses)
pragma target OSC  HS              -- HS crystal or resonator
pragma target WDT  disabled        -- no watchdog

Delay-definitioner

For at kunne anvende de forskellige delay-rutiner, så skal man include delay-biblioteket

include delay

Opsætning af input og output

For at PIC'ens ben kan fungere som input og output skal der defineres hvilke ben der anvendes til hvad:

enable_digital_io()                -- disable analog I/O (if any)
--
-- IO definitioner
porta_direction = all_output
portc_direction = all_output

alias   kontakt is pin_A3
pin_A3_direction =  input

Variabel-deklaration og initialisering

I de fleste programmer anvender man variabler, og i JAL skal de defineres ved hvilken type de har. Når man definerer sine variabler kan det tit være en god ide at initialisere dem, så man ved hvilken værdi de har når programmet starter.

-- Variabler til programmet
var byte tal = 0
Programmering
Programmeringsbegreber Initialisering - Sekvens - Algoritme - Hexadecimal - Det Binære Talsystem - HEX-fil - ASCII - Interrupt - Events - Styresystem - Autocomplete - Selvstudie Programmering - Hour Of Code - Stepwise Improvement - Syntaks - Prog-links - Microcontroller - ChatGPT
Grundlæggende C C float - C double - C-løkker - Datatyper - Konstanter - Regnearter - Funktioner - Return - Returværdi - Rekursion - Semikolon
Variabel Typer boolean - byte - int - unsigned int - word - long - unsigned long - short - float - double - char - unsigned char - string - char array - String - object - Array - 2-dimensionelt Array - void
Program-klassikere Polling - State-machine - Trykknap - Forkant - Bagkant - Prel
Arduino Arduino til Programmering - C til Arduino - Programmering Shield - Arduino PC-software - Arduino Udviklingsmiljø - Arduino Pin Library - Funktion - Arduino Seriel - Arduino String - Arduino String Split - Arduino StateChangeDetection - setup() - loop() - Compilerdirektiver - Asynkron kommunikation - millis() - micros() - Scratch for Arduino - Send fra Arduino til Excel - [[]] - [[]]
Processing Grafik i Processing‎ - Keyboard i Processing - Mus i Processing‎ - Tid i Processing‎ - Draw() - Setup() - Tal Input til Processing - Syntaksfarvning - Kommunikation fra Arduino til Processing - Kommunikation fra Processing til Arduino
javaScript Javascript input‎ - Javascript output‎ - Javascript strukturer‎ - Javascript syntaks‎ - Tid i javaScript - Objekt‎ - AJAX
Serverprogrammering PHP - MySQL - Task Scheduler - WeMOS
PIC JAL - [[]]
Scratch for Arduino S4A Installation - S4A programmering - S4A undervisningsforløb - S4A begrænsninger
Program Dokumentation Algoritme - Flowchart - Pseudokode - Datastruktur - Dataabstraktion - Pulsplaner - Program-kommentar - Teori - Test - UML