Input-modul

Fra Kommunikation-IT Holstebro HTX
(Omdirigeret fra Output-modul)
Skift til: navigering, søgning

Modulet input og output er lavet til at ekspandere antallet af input og output på en PIC ved hjælpe af skifteregistre.

Modulet består kun af Software til modulet.

Diagrammer til Input og Output Expand

Den generelle måde at koble tingene op på er gennegået under skifteregistre, mens dette tager udgangspunkt i den software der er skrevet som moduler til input og output, hvor softwaren er tilpasset de TTL-kredse vi har på lager.

Diagram til at ekspandere input

Input ekspanderes ved at bruge et eller flere skifteregistre af typen 74LS166, der har parallelt ind og serielt ud.

Skifte-input.png

Diagrammet som er vist her er koblet op til at lave 16 input, ved at bruge 3 ben på PIC-porten, men det vil være ganske uproblematisk at koble flere kredse op, så man i første omgang kan komme op på 32 input på de samme 3 ben på PIC-porten, uden at rette i andet end pin-filen.

Hvis man ønsker at udvide til flere input, så skal der tilføjes noget mere kode inde i input.jal, så de ekstra input kan håndteres.

Diagram til at ekspandere output

Output ekspanderes ved det modsatte, nemlig med et eller flere skifteregistre af typen 74LS164, der har serielt ind og parallelt ud.

Skifte-output.png

Diagrammet som er vist her er koblet op til at lave 16 output, ved at bruge 2 ben på PIC-porten, men det vil være ganske uproblematisk at koble flere kredse op, så man i første omgang kan komme op på 32 output på de samme 2 ben på PIC-porten, uden at rette i andet end pin-filen.

Hvis man ønsker at udvide til flere output, så skal der tilføjes noget mere kode inde i output.jal, så de ekstra output kan håndteres.

Diagram til at ekspandere output med hukommelse

Hvis man vil undgå den "flimren" der kommer på udgangene mens der skiftes ud, så skal man også have en hukommelse (latch eller register) på udgangen, enten som en separat kreds eller indbygget i skifteregisteret. Her er det igen realiseret med TTL-kredse som vi har på lager, hvor 74LS164 har serielt ind og parallelt ud, efterfulgt af 74LS273 der er en 8 bit kanttrigget latch, der kan huske signalet.

Skifte-memory.png


Diagrammet som er vist her er koblet op til at lave 16 output, ved at bruge 3 ben på PIC-porten, men det vil være ganske uproblematisk at koble flere kredse op, så man i første omgang kan komme op på 32 output på de samme 3 ben på PIC-porten, uden at rette i andet end pin-filen.

Hvis man ønsker at udvide til flere output, så skal der tilføjes noget mere kode inde i output.jal, så de ekstra output kan håndteres.

Software modulet input.jal og output.jal

De to moduler placeres som normalt i c:\jalpack\lib så de kan nåes fra alle biblioteker man laver, og som man plejer skal der placeres interface filer (pin-filer) til modulerne i den mappe man har placeret sin software i.

Softwaren med et eksempel ligger i en zipfil IO-modul

For at bruge input-delen kaldes get_input, hvorefter de læste input ligger i variablerne input_reg1, input_reg2 osv. alt efter hvor mange input man har. De 8 input fra hver kreds ligger i hver sin variabel.

På tilsvarende vis lægger man det man ønsker at får ud i nogle variable med navnene output_reg1, output_reg2 osv. alt efter antallet af output man har. Herefter kalder man set_output

Interface fil til input

Det vigtige i input_def.jal (pin-filen) er angivelsen af antallet af kredse og hvilke ben der forbindes til. Det ligger i følgende kode:

const Antal_Input_kredse = 1
var bit input_CLK  is pin_c0    -- Ben 7 på 74LS166
var bit input_LOAD is pin_c1    -- Ben 15 på 74LS166
var bit input_DATA is pin_c2    -- Ben 13 på 74LS166

Interface fil til output

Det vigtige i output_def.jal (pin-filen) er angivelsen af antallet af kredse og hvilke ben der forbindes til.
Desuden er der angivet om man bruger LOAD, altså om man har hukommelse på sit kredsløb. Hvis man ikke har det, så vil det ben kunne bruges frit til et andet formål, man skal bare huske at sætte output_med_LOAD til false, ellers vil det kunne forstyrre anden anvendelse af benet.
Det ligger i følgende kode:

const Antal_Output_kredse = 4
const bit output_med_LOAD = true
var bit output_CLK  is pin_c3    -- Ben 8 på 74LS164
var bit output_LOAD is pin_c4    -- Ben 11 på 74LS273
var bit output_DATA is pin_c5    -- Ben 1 og 2 på 74LS164

Anvendelsen af input og output modulerne

Anvendelsen af input og output ekspandering er ret simpel, når hardwaren er sat op. Man skal have input_def.jal og output_def.jal i den mappe hvor man skriver koden, og i den kodefil man laver skal man blot henvende sig til modulerne som følger:

enable_digital_io()                -- disable analog I/O (if any)
include input
include output

Nå man vil læse input fra skifteregistrene kaldes get_input, så det læste kommer til at ligge i input_reg1 og op til det antal skifteregistre man har koblet op (og angivet i input_def.jal)

Når man vil skrive til sine output, så lægger man det output man vil have ind i output_reg1 og op til det antal skifteregistre man har koblet op (og angivet i output_def.jal), og når alle registre er sat op, så kalder man set_output.

En simpel anvendelse af det kan være som følger:

 get_input
 output_reg1 = input_reg1 ^ 0xFF  -- 8 bit inverteret
 set_output

Sammenskrivning af de to moduler

De to moduler er skrevet så de kan anvendes hver for sig, og de skal derfor have hver deres ben til at drive de respektive clock og load signaler. Hvis man skrev de to moduler sammen ville man kunne genbruge clock og load signalet, så man kunne komme ned på at anvende 4 ben til både input og output ekspandering.

Dette modul er ikke implementeret.

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