RC-tast
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).
Indholdsfortegnelse
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.
Herunder, ses et totaldiagram over RC-tastaturet sammen med dioderne.
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. |
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
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:
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.
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