RC-tast

Fra Holstebro HTX Wiki
Skift til: navigering, søgning
RC print.jpg

Modulet RC-tast er lavet til at fungere i en software, hvor der konstant loopes i en menu, hvor man venter på en tasteværdi.

Modulet består af Hardware til modulet og Software til modulet.

Tastaturet kan laves med et frit antal taster, så længe man kan skille tiderne ad, men i praksis ligger der nok en begrænsning på 20-25 taster.

Her på siden er gennemgået et tastatur med 12 taster (10 cifre og et par funktioner).

Princip-diagram for RC-tastaturet

Princippet i et RC-tastetur, er som det vises på nedenstående figur (figur 1.1). Det består altså af et input fra rc-tastetur, hvilket vil sige, at man trykker på en knap og det registreres som beskrevet længere nede. Dette bliver så videreført til vores PIC, der indeholder selve koden. Denne kode ”tolker” derefter det signal den får ind fra trykket og gør, det den tilsvarende knap er programmeret til. I dette tilfælde, har hver knap en binær kode (0-11) og det kan vises på 4 dioder. Det er ikke muligt med dette tastatur at lave det som en normal computer, hvor hver knap betyder for eksempel et bogstav, som vi kender fra dagligdagen.

Figur 1.1.jpg

Herunder, ses et totaldiagram over RC-tastaturet sammen med dioderne.

Total.jpg

Hvis vi prøver at gå lidt mere i detaljer med RC-tasteturet, i stedet for, at det bare er et blokdiagram, så vil det komme til at se ud, som vist på figur 1.2.

Her har hver knap, fået forskellige modstande koblet på, således at hver enkelt knap forbinder et forskelligt antal modstande i serie op til +5V og med forbindelse til kondensatoren. Grunden til, at der skal forbindes forskellige antal modstande for hver knap, er, at den samlede modsand knappen forbinder til kondensatoren giver en speciel opladningstid for kondensatoren.

Måden softwaren kan se hvilken tast der er trykket på er ved at man sætter det ben man aflæser på op til output, og trækker udgangen lav, så kondensatoren aflades.

Så sætter man benet man aflæser på til at være en indgang, hvorefter kondensatoren begynder at lade op gennem det antal modstande der er forbundet op til +5V. Opladetiden afhænger af den samlede modstand, og hver gang modstandsværdien fordobles, så fordobles også opladetiden.

Ved at indgangen skifter ved samme spændings-niveau, og at hver knap tilføjer samme modstandsværdi (her 2,2 k ohm), så vil der blive lagt en bestemt tid ekstra på for hver modstand der kobles ind.

På den måde kan man aflæse forskellen på tasterne blot ved at anvende en simpel digital indgang.

Diagram og Board til RC-tastaturet kan findes i denne ZIP-fil.

Figur12.jpg

Som det er illustreret på de 3 grafer herunder, så er opladetiden afhængig af modstanden.

  • med 2200 ohm tager opladningen til 2,5 V ca. 0,150 ms
  • med 4400 ohm tager opladningen til 2,5 V ca. 0,300 ms
  • med 6600 ohm tager opladningen til 2,5 V ca. 0,450 ms

Opladetiden vil på tilsvarende vis forøges med modstanden

RC-tast-graf.PNG

Kode til RC-tastaturet

En meget simpel test-anvendelse af RC-tast er vist herunder, hvor pricippet fra blokdiagrammet er kodet, så man læser taste-værdien og lægger den ud på port C som et binært tal 0b0000 til 0b1011 (svarer til 0 - 11).

-- Test af Tastatur Interface til RC tastatur

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

include delay
--
enable_digital_io()                -- disable analog I/O (if any)
--
include rc_tast		-- Include af kondensator tastatur biblioteket

var	byte	temp

-- Sæt startbetingelserne
portc_direction = all_output
portc = 63

-- Kør i hovedloopet med de ønskede rutiner
forever loop
   temp = rc_tast()
   if temp != no_tast then
      portc = temp
   end if
   delay_1ms(1)
end loop

Pseudokode til RC-tastaturet

Demokoden har følgende Pseudokode:

Pskode.jpg

Koden til RC-tastaturet kan hentes sammen med demoprogrammet i denne ZIP-fil

Anvendelsen af RC-tast modulet

Som vi nævnte under "Princip-diagram for RC-Tastatur", er RC-tastatur, et tastatur med nogle knapper som har fået tildelt hver sin modstand. Hver knap udsender så hver sin spænding til kondensatoren, da grunden til dette er, at hver knap løber igennem forskellige antal resistorer. Resistorerne bringer spændingen ned, og jo flere resistorer spændingen kører igennem, jo lavere bliver den. Når kondensatoren så opfanger den givne spænding i input, sender den et signal til PIC’en, som så fortæller hvilken knap der er blevet trykket på.

RC-tast kan anvendes til alt indenfor tastaturer, som for eksempel pinkode-tastatur, lommeregner-tastatur og selv computertastaturer. Det skal dog siges, at der nok vil være høj belastning for computertastaturerne, når man bruger RC-tast der, og gør reaktionstiden mellem tryk af knap og PIC'ens opfattelse af tryk længere.

RC-tastaturet har også et andet problem ved større tastaturer og hurtig indtastning, nemlig at det ikke kan håndtere samtidige indtastninger.

Pseudokode til RC_tast aflæsnings-rutinen

RC-tast rutinen er lavet således at den skal kaldes mange gange i træk, og kun én gang i løbet af hvert tastetryk kommer der den nedtrykkede tast retur - de resterende gange kommer der bare no_tast, altså at der ikke er registreret nogen indtastning. På denne måde kan man opfange præcis de indtastninger der kommer, og desuden opfange hvis samme tast bliver trykket to gange efter hinanden.

Tastaturet har ikke nogen repeat-funktion

Pseudokoden for selve RC-tast funktionen ser ud som følger:

Sæt aflæsningsbenet op som udgang, og læs 0 ud
Vent 200 us på at kondensatoren aflades
Sæt aflæsningsbenet op som input
Loop indtil aflæsningsbenet er højt eller der er talt over no_tast
   tæl op
Hvis der er talt over no_tast så
   returner no_tast
Begregn tasten ud fra hvor langt der er talt op
Hvis det er samme tast som ved sidste kald til funktionen så
   Tæl hvor mange gange det er den samme tast
   Hvis det er den samme tast de sidste 5 gange så
      returner tasteværdien
ellers så 
   registrer den nye tast
   nulstil antal ens taster
Returner no_tast

Kode til indstilling af tasteberegning

Som en del af modulet ligger der en funktion RC_count, der returnerer det antal tællinger der er gennemløbet.

Denne funktion kan anvendes til at justere de konstanter som beregningen af tasten bliver foretaget ud fra.

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