Serial software

Fra Holstebro HTX Wiki
Skift til: navigering, søgning

Det grundlæggende omkring seriel kommunikation er beskrevet under seriel port.

serial_software.jal

Som de fleste generelle moduler, der er med i jalpack, så bygger det på at man sætter nogle ting op inden man includer filen, og så kan man anvende de procedurer der er i modulet

Softwaren ligger i jalpack/lib.

Ting der skal sættes op inden include

Inden man includer filen der definerer hvordan der skal kommunikeres, og som indeholder alle rutiner, så skal man sætte nogle ting op:

alias     serial_sw_rx_pin    is pin_a5      -- Serial Receive pin
alias     serial_sw_tx_pin    is pin_a4      -- Serial Transmit pin

pin_a5_direction = input   -- Define input and output
pin_a4_direction = output

const serial_sw_baudrate = 9600

Pin definitionerne angive hvilken pin der skal modtages på, og hvilken pin der skal sendes på. Dette kan vælges helt frit. Man skal blot huske også at rette direction benene op.

Baud-rate (eller bits pr. sekund) kan vælges rimeligt frit. Hvis det sættes for hurtigt, så kan processoren få svært ved at følge med til tjekke for modtagelsen, og dermed virker modtagelsen ikke (man får startet inde midt i karakterer).

Anvendelse af modulet

Efter at have defineret tingene omkring porten, så skrives blot

-- Opsæning som beskrevet i andet afsnit
include serial_software

Herefter kan der sendes og modtages karakterer.

Modtagelse af karakterer

I main-loopet (forever-loopet) kan mansom følger:

   if ser_sw_read(temp) then
      -- Anvend den modtagne byte temp til noget fornuftigt
   end if

Det er vigtigt at der tjekkes meget ofte i koden og få gang i modtagelsen. Hvis man f.x. kommunikerer med 1200 Baud vil man skulle tjekke mindst to gange i en startbit, altså minimum for hver 0,4 ms, da man ellers vil kunne komme forkert ind på en startbit.

På grund af denne begrænsning er der også en anden procedure der venter på starten af bitten:

   ser_sw_read_wait(temp)
   -- Anvend den modtagne byte temp til noget fornuftigt

Denne anvendelse ser måske enklere ud, men den har den store ulempe, at den låser indtil der kommer en karakter, og det endda med interruptet slået fra, så hvis der ikke kommer en karakter, vil den aldrig komme videre med resten af programmet.

Sending af karakterer

Det at sende en karakter er meget simpelt, da man blot skriver

   serial_sw_write(char)

Sendingen vil ikke returnere inden hele byten er sendt afsted.

Sending og modtagelse som Pseudovariable

Der ligger også rutiner der implementerer sending og modtagelse, så det ligner variabler. Det anvendes på følgende måde:

   serial_sw_data = Temp  -- Sender variablen Temp
   Temp = serial_sw_data  -- Modtager en byte og placerer den i Temp
   -- Gør noget fornuftigt med det modtagne
   Temp = serial_sw_data  -- Modtager en ny byte og placerer den i Temp

Man skal være opmærksom på at det ikke er normale variabler. Hver gang man læser i variablen, så læses der faktisk en ny byte fra den serielle indgang.

De har stadig samme ulemper, at programmet standser afviklingen indtil byten er sendt, og den stiller sig til at vente på der kommer en byte, og den låser hvis der ikke kommer en byte.

Moduler på Holstebro HTX
Tastaturer Displays AD-konvertering I/O-ekspander Serielt Interface Færdige Andre
RC-tast - AD-tast - M_tast ALCD - LCD ADC_holst - ADC
mcp3201 - mcp3208
input - output Seriel_holst - Serial hardware
Serial hw int cts - Serial software
Stepmotor - RFID
RGB - RF-link - Afstand
Humidity - Analog temp - Dig temp
Accelerometer
Rotary Encoder

Oversigt over Hardware Moduler på Holstebro HTX