Serial hardware

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

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

serial_hardware.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

Her definerer man hvordan der skal kommunikeres.

pin_b5_direction = input   -- Define input and output for RX and TX pins
pin_b7_direction = output

const serial_hw_baudrate = 9600

Pin definitionerne angive hvilken pin der skal modtages på, og hvilken pin der skal sendes på. Dette er processor-afhængigt, så man skal lige forbi databladet for at se hvordan man gør det. Dette eksempel er for en PIC16F690.

Baud-rate (eller bits pr. sekund) kan ikke vælges helt frit. Hvis det sættes for hurtigt, så kan baud-rate registrene ikke sættes præcist nok (afhænger også af clock-hastigheden), og dermed virker modulet ikke. Det kan også blive et problem at nå at hente alle karakterer.

Anvendelse af modulet

Når man har sat benene op og defineret baudrate, så skrives blot

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

serial_hw_init()  -- gennemfør opsætningen af UART'en

Dette sætter op, så man kan sende og modtage med den korrekte hastighed.

Herefter kan der sendes og modtages karakterer.

Modtagelse af karakterer

I main-loopet (forever-loopet) kan man modtage karakterer som følger:

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

Det er vigtigt at der tjekkes ofte i koden for ikke at miste noget i modtagelsen, hvis der kommer flere karakterer i træk. Hvis man f.x. kommunikerer med 1200 Baud vil man skulle tjekke med mindre end 8 ms mellemrum, da man ellers vil kunne miste en byte.

Sending af karakterer

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

   serial_hw_write(char)

Sendingen venter, hvis hele den foregående byte er sendt afsted.

Sending af word (to bytes)

Det at sende et word er lige så simpelt, da man blot skriver

   serial_hw_write_word(0xFFFF)

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_hw_data = Temp  -- Sender variablen Temp
   Temp = serial_hw_data  -- Modtager en byte og placerer den i Temp
   -- Gør noget fornuftigt med det modtagne
   Temp = serial_hw_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.

ADVARSEL - programmet standser afviklingen indtil der er modtaget en byte, fordi programmet 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