Scanați tabelul cu codurile tastelor de la tastatură. Pe problema evaluării semnalelor digitale pemin. tastaturi. Cum să scanezi coduri QR pe ​​Android

Majoritate tastaturi moderne echipate cu taste multimedia, iar mouse-urile au deja de la trei până la șapte butoane. Șoferi și tot felul de programe utile Doar Windows. Toată lumea știe că Linux este renumit pentru capacitatea sa de a personaliza sistemul pentru tine, dacă, desigur, știi unde și ce să configurezi. Sarcina noastră este să învățăm pinguinul să lucreze cu pâini suplimentare.

Determinarea codului de scanare a cheii

Indiferent de ceea ce apăsați pe tastatură, serverul X și nucleul, în general, nu-ți pasă de ce este scris sau desenat pe el. Ei sunt interesați doar de codul de scanare al butonului, iar mai întâi X-urile citesc tabelul de coduri cheie ale nucleului, iar apoi codul cheii este legat de propriul său tabel de coduri. Dacă în Probleme Windows Nu există nicio setare pentru tastele multimedia în consolă ca atare, așa că în Linux trebuie să configurați separat reacția la apăsarea butoanelor din consolă și în X-Window.

Pentru a afla codul cheii, ar trebui să utilizați utilitarul xev inclus cu serverul X. După lansare, apare fereastra Event Tester, acum apăsați tastele succesiv, amintindu-și codul emis:

$xev
...
Eveniment KeyRelease, seria 31, NU sintetic, fereastra 0x3e00001,
root 0x67, subw 0x0, time 279734676, (311.611), root:(1104.687),
stare 0x2000, cod cheie 236 (keysym 0x1008ff19, XF86Mail), același_ecran DA,

XFilterEvent returnează: False
Eveniment KeyRelease, seria 31, NU sintetic, fereastra 0x2600001,
root 0x67, subw 0x0, time 265877259, (883.334), root:(886.358),
stare 0x0, cod cheie 161 (keysym 0x0, NoSymbol), same_screen YES,
XLookupString oferă 0 octeți:
XFilterEvent returnează: False

Ieșirea poate fi uriașă, deoarece fiecare mișcare a mouse-ului este urmărită pe măsură ce trece peste fereastra Event Tester. Cheia este descrisă de blocul KeyRelease, în special, valoarea keycode este tocmai codul de scanare pe care vrem să-l știm. În exemplul prezentat, două taste sunt apăsate. Codul cheie 236 corespunde codului cheie pentru serverul X specificat în keysym, precum și acțiunii XF86Mail, care în KDE lansează clientul de e-mail implicit. Pentru cheia numărul 161, codul și acțiunea nu sunt definite.

Este posibil ca o tastă să fie apăsată, dar codul ei de scanare nu este emis. Aceasta înseamnă că nucleul nu poate găsi o valoare potrivită. Ieșirea dmesg ar trebui să conțină următoarea linie:

Folosiți „setkeycodes 0xec „să o fac cunoscută.

Adică, vi se oferă să setați singur codul de scanare cheie folosind setkeycodes, iar alegerea valorii codului cheie este foarte simplă. Convertiți cifra rezultată într-un număr zecimal (majoritatea calculatoarelor pot face acest lucru) și adăugați 128. În acest exemplu, 0xec = 236, adică obținem codul de scanare 364. Dacă aveți îndoieli, lista codurilor de scanare utilizate și neutilizate poate fi vizualizat rulând utilitarul getkeycodes în consolă sau dumpkeys. De exemplu, dacă rezultatul este „getkeycodes | grep<код клавиши>„Nu am dat nimic, așa că acest cod poate fi folosit în siguranță.

Utilitarul XKeycaps (www.jwz.org/xkeycaps), care este un front-end grafic pentru Xmodmap, poate ajuta, de asemenea, la determinarea codului de scanare.

Programul xev, desigur, nu funcționează în consolă. Pentru a afla codul de scanare emis de kernel, ar trebui să utilizați utilitarul showkey sau getkeycodes:

$showkey
tastatura era în modul UNICODE
apăsați orice tastă (programul se va încheia la 10 secunde după ultima apăsare)...
0xe0 0x6c 0xe0 0xec

Primele două cifre corespund tastei apăsate, a doua – absenței apăsării.

Configurarea legării codului de scanare în X-Window

Deci, acum avem coduri de scanare, trebuie să indicăm serverului X ce ar trebui să facă de fapt atunci când această tastă este apăsată, adică să îi atribuim un nume simbolic. O listă de nume de simboluri este dată în fișierul antet XF86keysym.h. În mod implicit, fișierele de antet ale serverului X nu sunt instalate pe distribuțiile moderne. Pentru a-l vedea în Ubuntu, trebuie să instalați pachetul x11proto-core-dev, după care acest fișier va fi localizat în directorul /usr/include/X11. Alternativ, puteți contacta serverul X.Org CVS. Hai sa ne uitam:

$ cat /usr/include/X11/XF86keysym.h
/*
* Taste găsite pe unele tastaturi „Internet”.
*/
#define XF86XK_Standby 0x1008FF10
#define XF86XK_AudioLowerVolume 0x1008FF11
#define XF86XK_AudioRaiseVolume 0x1008FF13
#define XF86XK_AudioPlay 0x1008FF14
#define XF86XK_AudioStop 0x1008FF15
#define XF86XK_Mail 0x1008FF19

Dacă comparăm ultima linie cu ieșirea xev, vedem că valorile se potrivesc cu cheia cu codul cheie 236 - keysym 0x1008ff19, XF86Mail (fără sufixul XK_). Puteți găsi o listă cu toate valorile disponibile, așa cum ar trebui să fie utilizate în /usr/share/X11/XKeysymDB.

Există două moduri de a vă crea propriul aspect: creați o descriere a tastaturii sau utilizați Xmodmap. Ultima metodă este cea mai simplă, așa că vom vorbi mai departe despre ea. În directorul principal al utilizatorului, creați un fișier.Xmodmap, în care introducem valorile dorite:

$ mcedit ~/. Xmodmap

cod cheie 161 XF86Calculator
cod cheie 174 XF86AudioLowerVolume
cod cheie 176 XF86AudioRaiseVolume
cod cheie 162 XF86AudioPause

Și așa mai departe, cred că principiul este clar. Mai mult, codul cheii poate fi introdus atât în ​​formă zecimală, cât și în formă hexazecimală. Conform observațiilor mele, codurile pentru majoritatea cheilor sunt standardizate. Prin urmare, dacă configurați răspunsul la apăsarea unei taste o dată și transferați fișierul pe alt computer, există șansa ca pe o altă tastatură reacția la apăsarea unei taste care este de asemenea semnată să fie similară. Utilizatorii desktopului Gnome cu GDM pot scrie toate aceste linii în fișierul la nivel de sistem /etc/X11/Xmodmap.

În alte cazuri, trebuie să spunem serverului X să folosească fișierul generat. Acest lucru este implementat diferit în diferite distribuții, ideea principală este să rulați comanda /usr/bin/xmodmap $HOME/.Xmodmap atunci când utilizatorul se conectează sau când pornește X. Aici fiecare dansează cum vrea. Pe forumuri se sugerează utilizarea fișierului $HOME/.xsession (în unele distribuții poate fi numit .Xsession), .xprofile sau sistemul /etc/X11/Xsession. Și mă tem că asta nu e tot opțiuni posibile. Să vedem cum se face în KUbuntu:

$ sudo grep -iR xmodmap /etc

Ca urmare, găsim un fișier foarte interesant /etc/X11/Xsession.d/80ubuntu-xmodmap cu următorul conținut:

$ cat /etc/X11/Xsession.d/80ubuntu-xmodmap

/usr/bin/xmodmap /usr/share/apps/kxkb/ubuntu.xmodmap || Adevărat

USRMODMAP="$HOME/.Xmodmap"

if [ -x /usr/bin/xmodmap ]; apoi
dacă [ -f "$USRMODMAP" ]; apoi
/usr/bin/xmodmap „$USRMODMAP” || Adevărat
fi
fi

Adică se încarcă conținutul fișierului ubuntu.xmodmap și user.Xmodmap dacă există. Când deschideți ubuntu.xmodmap în editor, veți găsi o listă de coduri de cheie și nume simbolice asociate. Din aceasta putem concluziona: dacă un dezvoltator raportează că distribuția sa acceptă tastaturi multimedia, atunci cu un grad ridicat de probabilitate puteți găsi un fișier similar. Alte distribuții au un sistem similar pentru lansarea fișierelor xmodmap personalizate.

Acum că nume simbolice au fost atribuite tastelor, le puteți atribui acțiunile dorite. Unele medii de ferestre precum KDE pot gestiona acțiuni bazate pe nume simbolice. Deci, când apăsați butonul cu XF86AudioPlay (ÎNTREBARE), playerul implicit începe redarea. Pentru a seta combinația dorită, trebuie doar să accesați „KDE Control Center -> Regional and Accessibility Options -> Keyboard Combinations” (în KUbuntu, uitați-vă în „System Setting -> Keyboard & Mouse”). Există un element de meniu similar atât în ​​Gnome (puteți apela pur și simplu gnome-keyboard-bindings) și XFce. În plus, unele programe precum Amarok, Konqueror, MPD pot procesa și apăsările de taste. În alte medii fără
instrumentele de configurare grafică vor necesita cel mai probabil intervenția manuală în fișierele de configurare. De exemplu, astfel încât în ​​IceWM, apăsarea unei taste cu numele simbolic XF86AudioPlay pornește playerul XMMS, iar când este apăsat din nou se întrerupe, ar trebui să adăugați linia în fișierul ~/.icewm care apare după prima lansare:

$ mcedit ~/.icewm

tasta XF86AudioPlay xmms --play-pause

În Fluxbox, linia de lansare a playerului ar arăta astfel:

$ mcedit ~/.fluxbox/keys

Nici unul XF86AudioPlay:ExecCommand xmms --play-pause

De obicei, există exemple în configurații, așa că cred că vă puteți da seama cu ușurință de restul managerilor de ferestre.

Configurarea reacției în consolă

În consolă, procedura este ușor diferită. După cum vă amintiți, ieșirea dmesg a recomandat alocarea de coduri de cheie folosind comanda setkeycodes. Dar există diferențe aici - nu pot exista mai mult de 128 de comenzi cheie în consolă, ar trebui să selectați valori de la 0 la 127:

$setkeycodes 0xec 118

Puteți vizualiza valorile gratuite în fișierul curent cu aspectul tastaturii. Pe Ubuntu și toate distribuțiile bazate pe Debian, acesta este de obicei /etc/console-setup/boottime.kmap.gz. Dacă după pornire nu există probleme cu cheile, adăugați această linie la unul dintre scripturile de pornire, de exemplu în /etc/init.d/rc.local.

Acum tot ce rămâne este să setați corespondența dintre cheie și acțiunea care se execută. Există chiar mai mult loc pentru creativitate aici decât în ​​X. În keymaps(5), procedura de potrivire a unui cod de cheie este următoarea:

( simplu | ) keycode keynumber = keysym

# Comutați consola înapoi când apăsați tasta cu codul 105
cod cheie 105 = Decr_Console
# Comută consola cu una înainte când faceți clic pe și o cheie cu codul 106
cod cheie alt 106 = Incr_Console

Dar vă puteți crea propriile opțiuni specificând comanda în variabile:

cod cheie 120 = F100
șir F100 = "/sbin/shutdown -h acum\n"

Cu alte cuvinte, apăsarea tastei cu codul 120 va efectua acțiunea specificată în variabila F100; în cazul nostru, computerul este setat să se închidă. În loc de F100, desigur, puteți folosi orice alt nume.

Acum, o parte la fel de importantă este unde să notezi toate acestea. Documentația și numeroasele sfaturi sugerează utilizarea fișierului actual de aspect al consolei (în cazul meu, boottime.kmap.gz). Apropo, acesta este singurul fișier care descrie machetele disponibile după instalarea KUbuntu; Pentru a vedea alte opțiuni, ar trebui să instalați pachetul de date console. După aceasta, în /usr/share/keymaps/i386/ puteți găsi mai multe subdirectoare cu fișiere în interior. Dar dacă trebuie să comutați la un alt aspect (în Ubuntu și în alte distribuții, fișierul /etc/default/console-setup sau ~/.console-setup este folosit în acest scop), toate setările vor trebui să fie transferate într-un altul fișier, care este oarecum
incomod. Dacă decideți să faceți acest pas, utilizați intrările existente ca șablon, fără a scrie nimic în prima poziție și nu uitați să lăsați o linie goală la sfârșit.

Un pic despre laptop

Până acum nu am întâlnit un laptop ale cărui coduri de scanare a cheilor să nu poată fi determinate. Prin urmare, setările de aici nu diferă de cele descrise mai sus. Deși există o tehnică despre care aș dori să vorbesc. Mi se pare foarte comod de folosit modul de hibernare, cand, cand pornesti calculatorul, gasesti totul la locul lui. Distribuțiile moderne, de regulă, îl acceptă, deși configurarea este, în general, simplă - trebuie doar să instalați pachetul de hibernare și să suprascrieți parametrii necesari în fișierul de configurare. Singurul lucru este că de fiecare dată pentru a trece la acest mod trebuie să rulați scriptul /usr/sbin/hibernate, ceea ce nu este întotdeauna convenabil. Vreau doar să închid capacul laptopului și să-l pornesc din nou
mâncare, descoperă totul la locul lui.

Acest lucru este foarte ușor de făcut folosind demonul acpid, care este un fel de interfață de utilizator care vă permite să gestionați orice evenimente ACPI disponibile prin /proc/acpi/event. În acest caz, acpid citește un set de fișiere de configurare din directorul /etc/acpi/events/. Dacă pachetul cu demonul nu este inclus în distribuție, instalați-l din depozit; Cea mai recentă versiune poate fi obținută de pe site-ul web phobos.fs.tum.de/acpi. După instalare, trebuie să creați două fișiere în directorul /etc/acpi/events: lid și power. Primul descrie reacția la închiderea capacului, al doilea la apăsarea butonului de pornire.

$ sudo mcedit /etc/acpi/events/lid

eveniment=buton/capac.*
action=/usr/sbin/hibernate

$ sudo mcedit /etc/acpi/events/power

eveniment=buton/putere.*
action=/sbin/shutdown -h acum

Acestea sunt opțiuni oarecum simplificate; în KUbuntu veți găsi scripturi mai complexe. După aceasta, trebuie să reporniți demonul acpid:

$ sudo /etc/init.d/acpid restart

Acum, când închideți capacul laptopului, sistemul va hiberna cu alimentarea oprită, iar când apăsați butonul de pornire, se va opri. Simplu și convenabil.

Configurați programe

Dacă nu vă place să vă jucați cu fișierele de configurare, vă propun câteva programe care vă vor ajuta să configurați funcționarea tastelor multimedia. De exemplu, scopul inițial al programului Sven (sven.linux.kiev.ua) este de a configura taste suplimentare pe o tastatură multimedia, dar începând cu versiunea 0.4, poate corecta erorile de tastare și poate modifica aspectul tastaturii. Mai mult, chiar dacă ai o tastatură obișnuită, cu ajutorul ei poți emula tastele multimedia folosind în schimb comenzile rapide de la tastatură. De asemenea, puteți atribui acțiuni anumitor butoane ale mouse-ului. Ea înțelege aproximativ 10.000 de cuvinte rusești și 9.500 de cuvinte în engleză. Dacă programul nu comută
în sine, atunci aspectul poate fi schimbat manual folosind o tastă special desemnată (În mod implicit, Break). O tastă separată (Scroll Lock) poate schimba majusculele cuvintelor (sus, jos, prima literă este mai mare, restul sunt mai mici). Indicatorul de comutare a aspectului tastaturii își amintește starea pentru fiecare fereastră, așa că dacă comutați frecvent între aplicații, nu va mai fi nevoie să schimbați în plus aspectul. Programul are capacități grozave și te-aș sfătui să-l arunci o privire. Toate setările se fac folosind program de grafică, construit pe biblioteci GTK+. Sven a fost testat pe Linux, dar în principiu ar trebui să funcționeze pe sisteme *BSD. Managerul de ferestre folosit
nu contează.

Capacitățile KeyTouch (keytouch.sf.net) sunt ceva mai modeste; acest utilitar este folosit exclusiv pentru configurarea tastelor multimedia. Deși cu ajutorul acestuia puteți atribui o acțiune diferită oricărei taste care diferă de setările implicite. Pe site-ul programului, pe lângă textele sursă și pachetele pentru unele distribuții, puteți găsi setări gata făcute pentru tastaturi multimedia de la cei mai cunoscuți producători.

O alta solutie interesanta- xbindkeys (hocwp.free.fr/xbindkeys/xbindkeys.html) - vă permite să atribuiți orice comenzi, inclusiv comenzi shell, oricărui buton de la tastatură și mouse. Toate setările sunt făcute într-un fișier de configurare, care are un format simplu și ușor de înțeles.

Cel mai probabil pe telefonul dvs. deja instalat implicit Scaner de coduri QR, îl puteți utiliza cu ușurință pentru a scana primul cod QR. Acest lucru este foarte ușor de făcut. Doar urmați instrucțiunile noastre.

1. Deschideți cititorul de coduri QR de pe telefon.

2. Țineți dispozitivul deasupra codului QR, astfel încât să fie vizibil clar pe ecranul smartphone-ului.

Dacă țineți corect smartphone-ul peste codul QR, atunci se va întâmpla următoarele:

  • Telefonul scanează automat codul.
  • În unele aplicații, trebuie să faceți clic pe o imagine pentru a scana un cod, mai degrabă decât pe un buton, așa cum ați face pentru a face o fotografie pe smartphone.

3. Apăsaţi butonul indicat, dacă este necesar.

Super! Smartphone-ul dvs. citește codul și urmează linkul dat, ceea ce nu se întâmplă întotdeauna instantaneu. Pe majoritatea dispozitivelor, acest lucru poate dura câteva secunde.

Veți începe să vedeți coduri QR peste tot. Sunt folosite pentru a preda, informa, explica și multe alte lucruri. Găsește-le și scanează-le! Codurile QR vă vor economisi mult timp și efort.

Cum să scanezi coduri QR pe ​​Android

Acum vă vom spune cum să utilizați aplicația de scanare a codurilor QR pe ​​Android.

Scurt:
1. Deschide Magazin Play .
2. Căutați Cititor de coduri QR .
3. Selectați Cititor de coduri QR(prin Scanare).
4. Faceți clic pe „ Instalare".
5. Deschideți programul Citirea codului QR.
7. Îndreptați camera către codul QR.
8. Faceți clic pe „ BINE".

Pasul 1. Deschideți Magazinul Play pe Android. Aceasta este o pictogramă într-o aplicație sau pe ecranul de start.

Pasul 2. Introduceți cititorul de coduri QR în motorul de căutare. Va apărea o listă de aplicații pentru citirea codului QR.

  • Acest articol explică cum să utilizați QR Code Reader, dar puteți alege aplicația care vă place. Asigurați-vă că citiți despre aplicație înainte de a descărca.
  • Pașii ar trebui să fie aceiași pentru toate aplicațiile de citire a codurilor QR.

Pasul 3.Faceți clic pe QR Code Reader dezvoltat de Scan. Numele dezvoltatorului este listat sub fiecare aplicație. Poate fi necesar să derulați în jos pentru a găsi aplicația creată de Scan.

Pasul 4.Faceți clic pe Instalare. Va apărea o fereastră pop-up care vă va cere să acordați permisiunea de a accesa informațiile de pe Android.

Pasul 5.Faceți clic pe Accept. QR Code Reader va fi acum instalat pe dispozitivul dvs. Android.

    • Când aplicația este descărcată, butonul „Instalare” se va schimba în „Deschidere” și veți avea o pictogramă nouă în aplicație.

Pasul 6.Deschideți QR Code Reader. Aceasta este o pictogramă care arată ca un cod QR în aplicație. Aceasta va deschide o aplicație care arată ca un ecran de cameră standard.

Pasul 7Aliniați codul QR în cadrul camerei. Cam așa cum faci fotografii, cu excepția faptului că nu trebuie să apeși niciun buton. Când scanerul de coduri de bare citește codul, va apărea o fereastră pop-up cu adresa URL în cod.


Pasul 8Faceți clic pe „OK” pentru a deschide site-ul web. Aceasta lansează browserul dvs. web implicit și navighează la adresa URL din codul QR.

Următorul dispozitiv PC tipic, care pare a fi simplu, dar uneori provoacă probleme cercetătorului, este tastatura.

În general, dispozitivul este simplu. Mai ales nu modelele deja învechite conectate la portul PS/2. După cum arată numeroase date experimentale, cipul de control al tastaturii scanează apăsările de taste și le transmite în cod serial către port. Frecvența de ceas a acestei transmisii este un multiplu (în marea majoritate a cazurilor) de 6,3 sau 10 kHz. Deși autorul a dat peste câteva exemplare în ultimii ani, a căror frecvență de ceas era de aproximativ 20 kHz.

Toate tastaturile, atunci când apăsați și mențineți apăsată orice tastă, încep (după o pauză) să repete transmiterea codului tastei „la infinit”. În modul normal, acest lucru duce, de obicei, la o depășire a tamponului controlerului și o defecțiune în câteva secunde. Apare semnal sonor„dinamica” sistemului – „scârțâit”. Esența modului de testare (cel mai general acceptat) este blocarea comenzii buffer overflow, care permite, la apăsarea unei taste, să se asigure transmiterea nesfârșită a caracterului selectat prin cablul „tastatură”.

Ca întotdeauna, pentru calcularea corectă ulterioară a rezultatului, este necesar să se creeze o alternanță constantă a impulsurilor în pachetul de cod. Pentru codurile de la tastatură, pot exista două astfel de combinații:

10101010 (55) tasta „+; = "

01010101 (AA) în tabele standard - nu se aplică

Tabelul general al codurilor de scanare este prezentat în tabelul 14.1

Tabelul 14.1- Codurile de scanare de la tastatură

Cheie

Scanează codul

Cheie

Scanează codul

Cheie

Scanează codul

Cheie

Scanează codul

Astfel, la implementarea modului de testare și, de exemplu, plasarea unei greutăți pe tasta „+”, o secvență infinită de pachete de impulsuri va fi prezentă în cablul tastaturii. În acest caz, perioada de repetiție a pulsului în pachet (adică frecvența ceasului) va fi egală cu 6,10 sau 20 kHz, iar frecvența de repetiție a pachetului va fi mult mai mică. Formatul datelor este prezentat în Figura 14.1

Pentru a face schimb de date în cablul tastaturii, există două linii - KBData și KBSync. La transmiterea codurilor de scanare, tastatura setează următorul bit de date pe linia KBData și confirmă transmisia prin transferul semnalului de la „1” la „0” pe linia KBSync.

Controlerul își poate semnala incapacitatea de a transmite/primi date cu un nivel scăzut pe linia KBSync. În restul timpului, când nu există date de transmis, ambele linii au un nivel ridicat de semnal.



După cum rezultă din cele de mai sus, în spectrul PEMIN al cablului tastaturii ar trebui să vă așteptați la componente de frecvență cu o frecvență de ceas de 1/76,04·10 -6 = 13,15 kHz. Mai mult, datorită prezenței a două semnale defazate cu perioade diferite (dar multiple!), componentele de frecvență pare și impare vor diferi în amplitudine.

După cum ar fi de așteptat, PEMIN-ul unei linii de date sincronizate este, în principiu, neinformativ. Dar să deosebești un PEMIN de altul nu este deloc ușor. Există un singur cablu, semnalele sunt sincrone...

Practic singura cale– selectați un cod de scanare cu numărul minim de „1” logic din pachet. Acestea sunt tastele „F3” și F9 (03 și 01 în cod hex). Codul „00” nu este folosit.

Oscilograma codului de scanare „F3” este prezentată mai jos.


Strict „în termeni de energie”, dacă măsurați toate componentele de frecvență ale PEMIN cu codul „=” și, de exemplu, codul „F9”, atunci diferența dintre citirile receptorului pe FIECARE dintre componentele de frecvență este informația adevărată. parte a energiei PEMIN. Mai mult, acesta este un maximorum maxim. Lucrarea este destul de complexă și plictisitoare dacă nu este posibil să o încredințezi unei „mașini automate”. Însăși componentele PEMIN pentru așa ceva frecvente joase nu sunt ușor de identificat. Deci, de asemenea, pentru a „prinde” diferențele...



În practica SI, în majoritatea covârșitoare a cazurilor, pur și simplu măsoară nivelurile PEMIN (fără a scădea nimic) și calculează parametrul de securitate. Acest lucru este posibil, „cu rezervă”, dar specialistul este obligat să cunoască adevărata stare a lucrurilor.

La sfârșitul revizuirii - „pinout” a conectorilor de la tastatură AT și PS/2.


„Imaginile” de pe receptor par departe de a fi atât de „clasice”, dar sunt încă destul de recunoscute. Iată exemple



Spectrul arată clar o creștere a amplitudinii componentelor cu frecvența descrescătoare.

Există, de asemenea, caracteristici ale măsurătorilor „clave” în această regiune de frecvență (de la zeci de kHz și mai departe). Cert este că tastatura, în poziția sa obișnuită, este situată nu departe de unitate de sistem. Și în vârful SB este blocarea pulsului sursa de alimentare este cea mai puternică sursă de PEMIN atât pentru componentele „E”, cât și pentru componentele „H”. În „lumina” unui astfel de reflector de teatru, a vedea „lumina” slabă a tastaturii este o artă specială! Prin urmare, vă propun următoarea tehnică. Mutați tastatura cât mai departe de SB. Mai bine - pe un extender PS/2. Aproximativ 2-2,5 metri.

Așezați antena astfel încât să fie îndreptată cât mai puțin posibil de satelit (semnalul, cu o lățime de bandă a receptorului mai mare de 10 kHz, este un spectru continuu). Și lângă antena staționară orientată, începeți să răsuciți tastatura și cablul acesteia (nu invers!). Atunci veți avea o șansă mult mai mare de a detecta semnalele PEMIN de la tastatură și de a vedea componentele PEMIN pe ecranul analizorului cu proprii dumneavoastră ochi.

Toate cele de mai sus aplicate unei tastaturi cu interfață PS/2. Dar acum sunt înlocuite masiv de tastaturi cu interfață USB.

În general, această interfață a fost discutată în detaliu împreună cu imprimantele. Cu toate acestea, ar fi util să dați o „desemnare țintă” cu privire la tastatură.

Să ne amintim construcția pachetelor pentru interfața USB, ținând cont de faptul că tastatura este conectată strict cu viteză redusă (adică, de fapt, prin interfața USB 1.0).

Dimensiunea maximă a încărcăturii utile de DATE pentru dispozitivele cu viteză redusă este de 8 octeți. Adică, acesta este exact ceea ce necesită codul de scanare a tastaturii.

Vederea semnalului (și anume date) pe linia USB s-a dovedit a nu fi o sarcină atât de ușoară. Cu toate acestea, acest lucru a fost dezvăluit tocmai în cablul unui model tipic de „tastatură” USB GENIUS KB-06XE, în special în linia „date +” (fir) (Figura 14.10)


Aceste două oscilograme se schimbă reciproc cu o periodicitate nespecificată (haotică), iar „imaginile” semnalelor nu depind de tasta de la tastatură apăsată (sau nicio apăsată). Nu a fost posibil să se identifice alte modificări în partea „variabilă” a pachetului (cadru).

Frecvența acestor pachete este strict stabilizată (Fig. 14.11), iar durata fiecăruia este (vizibilă pe oscilograme) de aproximativ 34 ± 1 μs.


Pachetele urmează la fiecare 4 ms. Cu toate acestea, trebuie remarcat faptul că sfârșitul fiecărui pachet „agită” tot timpul, iar „jitterul” clasic este vizibil. Prin urmare, imaginea spectrală este oarecum neclară și devine clară numai cu o medie suficient de lungă.


În plus, trebuie avut în vedere faptul că, datorită perioadelor diferite de repetare a impulsurilor și duratelor diferite ale acestora, spectrul are caracterul unui amestec de spectru continuu și de linie. Cu toate acestea, caracterul de lob al spectrului, natural pentru o succesiune infinită de pachete și multiplu în „lobii” săi a duratei medii a pachetului, este păstrat foarte clar. Doar „zerourile” funcției sunt netezite de jitter și de o perioadă de repetare nevariabilă a impulsurilor individuale. Cu toate acestea, imaginea în sine este destul de tipică. Cu o rezoluție de frecvență mai fină, spectrul începe să se rezolve în „linii” determinate de rata de repetiție a pachetelor (250 Hz) (Fig. 14.13) Astfel, cu cea mai simplă vizualizare a oscilogramelor și nesincronizate cu transmisia adevărată a codului de scanare, identificarea și vizualizarea secțiunilor cadrului (pachet) , responsabile de transferul de date, a eșuat. Cu toate acestea, se poate argumenta că PEMIN-ul cablului tastaturii va fi în continuare acesta și nu altul. Este clar la ce frecvențe să-l căutați, este clar că va fi de natură continuă (în orice caz, cu o rezoluție a frecvenței receptorului de peste 0,3 kHz). Și este clar ce valoare să înlocuiți ca valoare de ceas în calcule (perioada minimă de impulsuri dintr-un pachet în experiment a fost de 1,322 μs). Măsurarea acestui lucru, la orice SI, cu un osciloscop cu o lățime de bandă de cel puțin 200 MHz este o sarcină banală. Modul de testare, de fapt, este oricare, puteți apăsa orice tastă sau nu puteți apăsa nimic. Pachetele sunt oricum transmise prin interfață. Și, într-o primă aproximare, le considerăm informative (până la proba contrarie).

Oscilogramele și spectrele date au fost obținute folosind un osciloscop AKIP-4108/2 conectat la același computer pe care au fost efectuate măsurătorile (de remarcat că aceasta este o repetare foarte funcțională a dezvoltării companiei PICO Technology de către noi. Nu. mai rau decat chinezii :)).

În mod clar, spectrul depășește cu mult 1 MHz (osciloscopul nu mai permitea și nu avea niciun rost să conectați un analizor). Restul este determinat de cablu, ca antenă aleatorie, și de gradul de ecranare a acestuia.

Pentru alte moduri ale interfeței USB, aveți nevoie de un osciloscop cu o lățime de bandă de mulți GHz.

Cum să calculăm exact spectrul continuu și, în același timp, să rămânem în cadrul actualului NMD este o conversație separată și nu pentru discuție deschisă, din păcate... Totuși, în publicațiile ulterioare va trebui să revenim la el, acolo nu este încotro. Voi încerca să „rămân în limite”...

Ceea ce m-a determinat să lucrez la un dispozitiv de acest gen a fost faptul că majoritatea dispozitivelor Gamemort ușor de replicat nu permiteau implementarea unui număr suficient de butoane de control. Un port de jocuri pentru PC a fost proiectat inițial pentru maximum patru butoane. De asemenea, toate tipurile de extensii nu au flexibilitatea dorită. De exemplu, extensia CH Flightstick Pro, populară printre amatorii de bricolaj, vă permite să implementați până la 14 butoane, dar nu puteți utiliza nici două butoane în același timp - despre zborul pe astfel de dispozitive în jocuri în care trebuie să vă „întoarceți constant cap” - la aceleași păsări, puteți uita. Unele extensii folosesc o interfață pur digitală - datele despre butoanele apăsate și deflexia butoanelor sunt transmise de-a lungul liniilor de gameport digitale, care au fost inițial destinate să transmită date despre cele patru butoane „standard”. Chiar consider astfel de extensii oarecum redundante. Iar conversia datelor analogice în digitale complică designul joystick-ului. În plus, nu orice joc vrea să înțeleagă ce fel de monstru i s-a „atașat”. Și tastatura - iată-o, în toată gloria ei de 102 de taste! În plus, abonații RU.GAME.FLIGHT au adăugat combustibil focului, întrebând din când în când „cum pot să îmblânzesc tastatura și să o traversez cu bucurie?” și plecând fără nimic.

Pe scurt, treaba dispozitivului este să „stea” pe autobuzul dintre tastatură și PC și să simuleze apăsările de taste de pe tastatură în conformitate cu butoanele apăsate pe dispozitiv.

Așa că m-am așezat să-l dezvolt. Înainte de asta, am avut experiență de lucru cu diverse microprocesoare și microcontrolere. În general - degetele de la ureche la ureche. Și am crezut naiv că acum voi lua docuri, voi face RTFM și într-o săptămână voi fi pe un cal alb. Întreaga problemă a fost că nu am putut găsi documentație despre protocolul de transfer de date între tastatură și controler nici pe Internet, nici în conferințele Fido relevante. A trebuit să iau un osciloscop și să petrec câteva săptămâni demontând improvizațiile și încercând să le repet. Prin urmare, majoritatea informațiilor prezentate mai jos sunt rezultatul concluziilor mele și nu sunt documentate. Dacă greșesc în legătură cu ceva, voi fi bucuros să vă aud comentariile la rashpil la ukr punct net.

Principii de bază ale transferului de date

Toate următoarele sunt valabile pentru tastaturile PS/2 și AT, care diferă doar prin designul conectorului (pot fi conectate printr-un adaptor).

Schimbul de date bidirecțional are loc între tastatură și controlerul situat pe placa de bază a computerului (denumit în continuare „controller”). Controlerul transmite diverse comenzi (de exemplu, schimbarea stării LED-urilor sau viteza de auto-repetare). Tastatura transmite codurile de scanare ale tastelor apăsate (cod de scanare - simbol cheile, nu trebuie confundate cu codurile ASCII).

Scanați coduri

Cheie Scanează codul Cheie Scanează codul Cheie Scanează codul Cheie Scanează codul
1 16 2 1E 3 26 4 25
5 2E 6 36 7 3D 8 3E
9 46 0 45 - 4E + 55
Backspace 66 Tab 0D Q 15 W 1D
E 24 R 2D T 2C Y 35
U 3C eu 43 O 44 P 4d
[ 54 ] 5B introduce 5A Ctrl(L) 14
A 1C S 1B D 23 F 2B
G 34 H 33 J 3B K 42
L 4B ; 4C " 52 ` 0E
Shift(L) 12 \ 61 Z 1A X 22
C 21 V 2A B 32 N 31
M 3A , 41 . 49 / 4A
Shift(R) 59 Alt(L) 11 Spaţiu 29 Majuscule 58
Esc 76 F1 05 F2 06 F3 04
F4 0C F5 03 F6 0B F7 83
F8 0A F9 01 F10 09 F11 78
F12 07 Blocare derulare 7E * 7C Blocarea numerelor 77
7 6C 8 75 9 7D - 7B
4 6B 5 73 6 74 + 5A
1 69 2 72 3 7A 0 70
. 71 Alr(R) E0-11 Ctrl(R) E0-14 Captură de ecran E0-12-E0-7C
Introduce E0-70 Șterge E0-71 Stânga E0-6B Acasă E0-6C
Sfârşit E0-69 Sus E0-75 Jos E0-72 Pagină sus E0-7D
In josul paginii E0-7A Dreapta E0-74 introduce E0-5A / E0-4A

Notă: tastatura AT are de fapt trei seturi diferite de coduri de scanare. Am dat doar valorile pentru setul nr. 2 - cea implicită.

Când apăsați o tastă, tastatura transmite codul de scanare al acestei taste către controler. Când este eliberat, mai întâi prefixul 0F0h și apoi codul de scanare al cheii eliberate.

Combinațiile de taste cu Shift, Alt și Ctrl sunt transmise ca o secvență de două coduri de scanare. Din perspectiva controlerului, aceste chei nu sunt diferite de oricare altele. În același mod, modurile Num Lock și Caps Lock nu diferă la nivel hardware - diferă la nivel de software prin programul care deservește întreruperile tastaturii.

Aș dori să discut pe scurt despre implementarea modului de repetare automată. De regulă, funcțiile de repetare automată sunt atribuite tastaturii în sine - după un anumit timp, dacă tasta nu este eliberată, tastatura trimite un alt cod de scanare exact același. Dacă apăsați o altă tastă în acest moment, un alt cod de scanare va „zbura” către controler și se va considera că doar o tastă a fost apăsată. În jocuri, această problemă este rezolvată simplu - tasta este considerată apăsată până când sosește codul de scanare corespunzător cu prefixul 0F0h. Prin urmare, nu am implementat funcțiile de auto-repetare în principiu.

Pe lângă codurile de scanare de mai sus, tastatura poate returna unele comenzi de service. Dar aceste comenzi, precum și comenzile emise de controlor, nu au nicio valoare practică în acest caz. Prin urmare, nu mă voi opri asupra lor.

Descrierea protocolului de schimb

Schimbul de date între tastatură și controler se realizează asincron folosind un protocol serial. Esența transmisiei asincrone este că datele sunt transmise numai atunci când există ceva de transmis - o tastă de pe tastatură este apăsată/eliberată și trebuie emis codul de scanare corespunzător sau controlerul trebuie să emită o comandă la tastatură.

Există două linii pentru schimbul de date - KBData și KBSync. La transmiterea codurilor de scanare, tastatura setează următorul bit de date pe linia KBData și confirmă transmisia prin transferul semnalului de la „1” la „0” pe linia KBSync. La primirea datelor de la controler, tastatura citește bitul de date de pe linia KBData și confirmă recepția prin transferarea semnalului pe linia KBSync de la „1” la „0”. Controlerul își poate semnala incapacitatea de a transmite/primi date cu un nivel scăzut pe linia KBSync. În restul timpului, când nu există date de transmis, ambele linii au un nivel ridicat de semnal. Rata de repetare a pulsului a liniei KBSync este de aproximativ 10-25 KHz.

Datele sunt transmise în următoarea ordine: un bit de pornire - „0”, opt biți de date, un bit de paritate (suma tuturor biților +1), un bit de oprire - „1”. După primirea fiecărui octet de date, controlerul setează linia KBSync la un nivel scăzut, semnalând astfel că este ocupat cu procesarea datelor primite și nu este pregătit să le primească pe următoarea. Aceasta poate fi considerată o confirmare a acceptării. Tastatura confirmă fiecare octet al comenzii primite prin emiterea codului 0FAh. Dacă apare o eroare în timpul transmisiei, controlerul poate solicita ca transmisia ultimului octet să fie repetată prin lansarea comenzii 0FEh. Tastatura se comportă diferit - pur și simplu ignoră erorile. Nu văd nimic fatal în asta - dacă sistemul tău se blochează frecvent, atunci nu are loc pe desktop.

Cel mai probabil, explicațiile mele au fost prea confuze, așa că voi încerca să le ilustrez cu mai multe diagrame temporale.

Vedere generală a transferului de date de la tastatură (S1 - bit de pornire; S2 - bit de oprire; D0-D7 - date; P - bit de paritate; W - procesarea datelor primite)

Un exemplu de transmisie de octeți de 74 de ore - tasta „6” de pe tastatura numerică. În acest exemplu, atunci când un transfer este inițiat de tastatură, controlerul semnalează că nu este pregătit să primească date și tastatura așteaptă ca linia KBSync să devină liberă

Implementarea hardware

Acum voi trece direct la descrierea implementării dispozitivului în hardware.

Dispozitivul este conectat la întreruperea semnalelor KBSync și KBData și transmite semnale de la/la tastatură prin el însuși, verifică starea celor patru butoane și emite codurile de scanare corespunzătoare, simulând astfel funcționarea tastaturii.

Dispozitivul se bazează pe un microcontroler AT89C2051 cu un singur cip. Microcontrolerul Atmel AT89C2051 aparține familiei MCS-51 ( analog domestic- MK-51). Principala diferență dintre AT89C2051 și i8051 este consumul de energie mai mic, numărul de linii I/O redus la 15 și incapacitatea de a utiliza memoria externă. Mai mult informatii detaliate AT89C2051 și i8051 pot fi găsite la www.atmel.com și www.intel.com. În loc de AT89C2051, puteți utiliza AT89C51, i8051 (KR1816BE51) sau i8031 (KR1816BE31) cu ROM extern. Dar ultimele două opțiuni, datorită consumului lor crescut de energie, pot duce la arderea siguranței controlerului tastaturii.

La microcontrolerele Atmel, după denumirea principală, frecvența maximă a generatorului de ceas este indicată în megaherți. Vă sfătuiesc să instalați un microcontroler conceput pentru o frecvență de 24 MHz și cuarț cu o frecvență mai mare - 16-20 MHz.

Diagramă schematică. (R1-R4 - 47K; R5 - 10K; C1, C2 - 18pF; C3 - 1uF; D1 - AT89C2051; BQ1 - cuarț 12-24MHz)

Linia P1.4 este folosită ca ieșire de activare a interogării butoanelor. Aceasta este o bază pentru extinderile viitoare - liniile P1.4-P1.7 vor fi folosite pentru a emite adresa liniei pentru sondarea butoanelor apăsate (până la 16 linii a câte 4 butoane fiecare). „0” pe linia P1.0-P1.3 înseamnă că butonul corespunzător este apăsat.

Elementele C3 și R5 implementează un circuit care generează un semnal de resetare atunci când este aplicată alimentarea.

Liniile KBData de la tastatură și controler sunt furnizate la intrările P3.2 (INT0) și P3.3 (INT1). Astfel, o încercare de a iniția transferul de date de la tastatură sau controler provoacă o întrerupere corespunzătoare. Rutinele pentru deservirea acestor întreruperi pur și simplu difuzează semnale corespunzătoare transferului unui octet prin microcontroler. Când microcontrolerul nu este ocupat cu transmiterea datelor, liniile P1.0-P1.4 sunt interogate, datele primite sunt procesate și codurile de scanare corespunzătoare sunt emise controlerului. Această versiune dă prioritate datelor transmise de dispozitivul însuși. Prin urmare, datele de la tastatură se pot pierde uneori.

Pentru a încheia această secțiune, voi oferi pinout-ul conectorilor de la tastatură AT și PS/2.

Semnalul -KBReset este un semnal opțional. Unele controlere pot folosi acest lucru pentru a reseta tastatura.

Textul firmware-ului

Ofer textul sursă al firmware-ului pentru microcontrolerul AT89C2051 în speranța că un cititor curios va putea să mă corecteze sau să adapteze programul pentru a funcționa cu un alt tip de microcontroler.

Org 0 sjmp start org 3 jmp from_keyboard ; INT0 org 13h jmp to_keyboard ; INT1 start mov a,#5 ; setarea tipului de întrerupere mov tcon,a ; INT0 si INT1 pe fata - mov a,#0 ; trecerea de la „1” la „0” mov ip,a mov a,#85h mov ie,a mov a,#0ffh ; ultimul mișcare 6,a este stocat la adresa 06h; cod procesat clr p1.4; activați bucla de interogare mov a,p1; se citește starea butoanelor anl a,#15; - cei mai puțin semnificativi patru biți ai portului P1; D0 - sus; D1 - dreapta; D2 - jos; D3 - stânga mov dptr,#hat_table ; citiți date despre patru butoane movc a,@a+dptr ; extins la opt direcții; D0 - sus; D1 - dreapta; D2 - jos; D3 - stânga; D4 - dreapta sus; D5 - dreapta-jos; D6 - stânga-jos; D7 - mișcare stânga sus r2,a ; salvarea datelor mov r0,a xrl a,6 ; dacă noile date nu diferă de jz loop; primit în ciclul anterior - repetați sondajul mov r1,#8 ; buclă pentru opt biți loop3 jnb acc.7,loop2; "1" - a existat o schimbare push acc mov a,r1 mov dptr,#key_table-1 ; extrage codul de scanare corespunzător movc a,@a+dptr push acc mov a,r0 ; registru R0 - semn de apasare/eliberare rlc a ; cheie emulată mov r0,a ; „1” - „cheia” a fost eliberată pop acc mov acc.7,c ; dacă D7=1 - codul de scanare va fi precedat de 0f0h acall send_key ; emiterea unui cod de scanare pop acc sjmp loop2a loop2 push acc mov a,r0 rlc a mov r0,a pop acc loop2a rl a djnz 1,loop3 mov 6,r2 sjmp loop send_key mov ie,#80h ; întrerupe dezactivat acall send2comp ; trimiterea codului de scanare, de exemplu, #85h; întreruperi activate ret send2comp jnb acc.7,send ; la nevoie, 0f0h push acc mov a,#0f0h acall trimite pop acc clr acc.7 mov b,#200 l9 nop djnz b,l9 trimite push 1 push 0 clr p3.3 ; P3.3 - KBData mov b,#6 ; emiterea bitului de pornire l10 nop djnz b,l10 clr p3.5 mov b,#15 l2 nop djnz b,l2 setb p3.5 mov b,#6 l3 nop djnz b,l3 mov r0,#8 ; ieșire opt biți de date și numărare a parității mov r1,#1 byte_loop xrl 1h,a rrc a mov p3.3,c mov b,#6 l6 nop djnz b,l6 clr p3.5 mov b,#15 l4 nop djnz b, l4 setb p3.5 mov b,#6 l5 nop djnz b,l5 djnz r0,byte_loop mov a,r1 mov c,acc.0 mov p3.3,c ; bit de paritate de ieșire mov b,#6 l8 nop djnz b,l8 clr p3.5 mov b,#15 l12 nop djnz b,l12 setb p3.5 mov b,#6 l13 nop djnz b,l13 setb p3.3 ; bit oprire ieșire mov b,#6 l7 nop djnz b,l7 clr p3.5 mov b,#15 l11 nop djnz b,l11 setb p3.5 mov b,#200 l14 nop djnz b,l14 setb p3.5 pop 0 pop 1 ret from_keyboard ; transferul unui octet către controler mov, adică #80h push psw push acc push b mov b,#2 in6 jnb p3. 4,in8 djnz b,in6 sjmp in7 in8 mov b,#10 in1 mov a,p3 rl a orl a,#11010111b mov p3,a jnb p3.4,in1 in2 mov a,p3 rl a orl a,#11010111b mov p3,a jb p3.4,in2 djnz b,in1 in3 mov a,p3 rl a orl a,#11010111b mov p3,a jnb p3.4,in3 mov p3,#0ffh in4 jb p3.5,in4 in5 jnb p3 .3,in7 clr p3.4 jnb p3.5,in5 in7 mov p3,#0ffh pop b pop acc pop psw mov tcon,#5 mov ie,#85h reti to_keyboard ; transferul unui octet la tastatură, adică #80h push psw push acc push b mov b,#5 out61 jb p3.5,out7 djnz b,out61 setb p3.4 setb p3.2 out62 jnb p3.5,out62 out6 mov c ,p3.4 mov p3.5,c mov c,p3.3 mov p3.2,c jb p3.4,out6 out8 mov b,#10 out1 mov c,p3.4 mov p3.5,c mov c , p3.3 mov p3.2,c jnb p3.4,out1 out2 mov c,p3.4 mov p3.5,c mov c,p3.3 mov p3.2,c jb p3.4,out2 djnz b, out1 out3 mov c,p3.4 mov p3.5,c mov c,p3.2 mov p3.3,c jnb p3.2,out3 out7 mov p3,#0ffh pop b pop acc pop psw mov tcon,#5 mov adică ,#85h reti hat_table ; tabel pentru extinderea datelor citite de la portul P1; indexul din tabel este un cod binar pe patru biți; date - starea celor opt chei emulate; "0" - tasta apăsată db 0ffh ; stânga+dreapta+sus+jos=combinație interzisă db 0ffh ; stânga+dreapta+jos=combinație interzisă db 0ffh ; stânga+sus+jos=combinație interzisă db 0bfh ; stânga+jos=stânga-jos db 0ffh ; stânga+dreapta+sus=combinație interzisă db 0ffh ; stânga+dreapta=combinație interzisă db 07fh ; stânga+sus=stânga sus db 0f7h ; stânga db 0ffh ; dreapta+sus+jos=combinație interzisă db 0dfh ; jos+dreapta=jos-dreapta db 0ffh ; sus+jos=combinație interzisă db 0fbh ; jos db 0efh ; dreapta+sus=dreapta sus db 0fdh ; dreapta db 0feh ; sus db 0ffh ; nu a fost apăsat niciun buton key_table ; scan cod tabel db 75h; tastatura numerica 8 db 74h; tastatura numerica 6 db 72h ; numpad 2 db 6bh ; numpad 4 db 7dh ; numpad 9 db 7ah ; tastatura numerica 3 db 69h ; numpad 1 db 6ch ; tastatura numerica 7

În arhiva tools.zip veți găsi două programe: a51.exe - un asamblator, hex2bin - un convertor de fișiere hex, care sunt obținute la ieșirea asamblatorului, într-un format binar potrivit pentru flash-ul ROM-ului microcontrolerului cu un programator .

Asamblare și depanare

Puteți asambla dispozitivul conform diagramei de mai sus pe o placă, o placă gravată acasă sau fabricată industrial. O priză trebuie plasată sub microcontroler. Cel mai bine este să lăsați spațiu pe placă pentru 2-3 pachete DIP cu 16 pini - acestea vor fi adăugate în versiunile ulterioare.

În continuare, după efectuarea modificărilor dorite, textul sursă al microprogramului este asamblat folosind programul a51.exe. Pentru a flashi firmware-ul cu programatorul, fișierul hex rezultat este convertit într-o imagine binară de către programul hex2bin.exe.

După ce a asamblat complet dispozitivul, îl conectăm la tastatură și computer. Trei... Doi... Unu... Să mergem!... Un dispozitiv asamblat corect din componente cunoscute bune ar trebui să funcționeze imediat. Dacă nu, verificați instalarea corectă și prezența alimentării pe microcontroler. Folosind un osciloscop, verificați dacă generatorul de ceas a pornit și dacă un impuls de nivel înalt ajunge la intrarea RST atunci când alimentarea este pornită. La apăsarea tastelor de pe tastatură, impulsurile pe liniile P3.3 și P3.5 ar trebui să repete, cu o oarecare întârziere, impulsurile pe liniile P3.2 și, respectiv, P3.4. Când apăsați/eliberați butoanele dispozitivului, impulsurile ar trebui să apară și pe liniile P3.3 și P3.5. Dacă acest lucru nu ajută, scrie-mi ( rashpil la aport punct ru) raport de eroare, indicând modelul și tipul (AT, PS/2) tastaturii, plăcii de bază/multicardului, microcontrolerului utilizat și frecvenței rezonator cu cuarț. Am încercat să testez dispozitivul cu numărul maxim disponibil pentru mine plăci de bazăși tastaturi - nu au fost identificate probleme. În cazul meu, a fost folosit cuarț de 14,2 MHz.

bug-uri cunoscute

Versiunea actuală a firmware-ului conține următoarele defecte:

  • Codurile de scanare pe doi octeți nu sunt urmărite. Acest lucru duce la faptul că uneori, atunci când se utilizează coliba și tastatura în același timp, tastele de la tastatură „îngheață” atunci când sunt apăsate sau sunt percepute incorect;
  • Uneori, datele sunt transferate incorect de la controler la tastatură. Acest lucru poate fi exprimat, de exemplu, prin faptul că LED-urile nu își schimbă starea atunci când sunt apăsate tastele Num Lock, Caps Lock, Scroll Lock;
  • Târâitul contactelor butoanelor cabanei. Până acum acest lucru nu a fost fatal pentru mine în gaming.

Planuri de viitor

Iată o scurtă listă cu ceea ce aș dori să implementez în versiunile viitoare:

  • Remedieri minore de erori - procesare mai corectă a semnalului; urmărirea codurilor de scanare pe doi octeți;
  • Conectarea unei matrice 16x4 - suport pentru până la 64 de butoane sau două cabane și până la 56 de butoane;
  • Suportă până la 16 configurații diferite de cod de scanare stocate în ROM-ul microcontrolerului;
  • Conectarea unui cip NVRAM cu capacitatea de a salva și reprograma „din mers” până la 32 de aspecte de cod de scanare.

Concluzie

Am încercat să prezint toate datele necesare pentru a înțelege principiul de funcționare a dispozitivului meu. Această descriere nu pretinde a fi 100% exactă din punct de vedere tehnic. Dacă greșesc cu ceva, vă rog să-mi spuneți versiunea dvs. despre evenimente. Dacă puteți aduce îmbunătățiri și completări la circuitul și/sau firmware-ul meu, dacă aveți idei pentru dezvoltarea ulterioară a circuitului, vă rog să-mi spuneți și mie. În plus, aștept informații de la meșteri care au reușit să reproducă sau să adapteze acest dispozitiv pentru alte tipuri de microcontrolere.

Vladimir „Rasp” Klimus (rashpil la ukr punct net)

  1. În partea de sus a ferestrei Google Play există șir de căutare. Acesta este exact ceea ce vom folosi. Activăm și scriem numele aplicației noastre. Nu este necesar să o introduceți până la capăt. De îndată ce obiectul indicat în captură de ecran apare în rezultatele căutării, pur și simplu atingeți-l.
  1. Vom fi redirecționați către pagina de start a programului. Există un buton mare verde care spune „INSTALARE”. Apasă-l.
  1. Așteptăm ca aplicația să termine descărcarea. Deoarece cântărește puțin sub 5 MB, procesul nu va dura mult timp.
  1. Gata. După finalizarea instalării automate, putem lansa programul direct de aici.
  1. De asemenea, pe Ecranul de start(dacă este activat în setări) va apărea o comandă rapidă de lansare.

În acest moment, instalarea programului este completă și putem trece la o prezentare generală a lucrului cu acesta.

În captura de ecran de mai jos vedeți interfata software. Aici este împărțit în 3 file principale. Există, de asemenea, o pictogramă de setări realizată sub formă de roată. Pe fila principală „SCANARE” există 4 instrumente principale:

  • Scanați codul de bare. Acesta este un scaner QR care funcționează printr-o cameră;
  • Introducere manuală. Funcția de introducere manuală a datelor codului;
  • Decodați din fișier. Decodare dintr-un fișier. De aici puteți deschide codul QR descărcat anterior și îl puteți citi;
  • Decodați din URL. Scanați prin link.

În partea de jos există mai multe butoane care nu oferă funcționalitate utilă. Nu ar trebui să le acorzi atenție.

Să ne uităm la setările programului. Sunt destul de mulți aici. Pe ecranele dvs. vor exista capturi de ecran ale diferitelor zone de configurare, dar vom exprima pur și simplu unele dintre cele mai interesante puncte.

De exemplu, pe primul ecran puteți activa sau dezactiva sunetul programului. Același lucru se poate face cu răspunsul la vibrații. Puteți seta modul de funcționare când programul începe să ruleze imediat de la scaner, ocolind meniul principal. O altă caracteristică importantă este copierea automată a datelor în clipboard.

De îndată ce dorim să începem scanarea și să lansăm scanerul în sine, programul va solicita accesul la resursele necesare de sistem. Desigur, trebuie rezolvat. Faceți clic pe butonul marcat în captură de ecran.

Apoi poziționăm cadrul scanerului astfel încât banda orizontală să cadă direct pe QR. Încercați să nu vă strângeți mâinile și, în același timp, urmăriți-vă concentrarea. Fără claritate normală, scanarea nu va reuși.

Pentru a permite QR BARCODE SCANNER să funcționeze în condiții de lumină scăzută, există o lumină de fundal.

Odată ce codul este recunoscut, veți vedea informațiile afișate în captura de ecran de mai jos.

Pe lângă scanarea QR-urilor, le puteți crea și aici. Pentru a face acest lucru, accesați a treia filă. L-am marcat în captură de ecran. Lista arată toate tipurile de date care pot fi criptate. Sunt acceptate următoarele:

  • contact din agenda telefonică;
  • număr de telefon;
  • URL;
  • E-mail;
  • aplicare;
  • Locație;
  • orice text;
  • marcaj;
  • eveniment din calendar.

Totul arată așa:

Odată ce tipul de date este selectat și specificat, tot ce trebuie să facem este să facem clic pe butonul „Codificare”. În acest caz, am criptat legătura.

Să încercăm să criptăm și textul arbitrar. Pentru a face acest lucru, selectați elementul dorit.

Introduceți expresia în câmpul desemnat și apăsați butonul „Codificare”.

Rezultatul arată grozav. Să-i schimbăm și culoarea. Faceți clic pe butonul destinat pentru aceasta.

Selectați nuanța dorită din paletă.

Și admirăm QR-ul primit.

Să trecem la următorul program, care are și o funcționalitate impresionantă.

Scaner de coduri QR Droid

O altă aplicație care poate fi găsită pe Google Play. De asemenea, îl puteți descărca dintr-un link direct de pe site-ul web Google. Deocamdată, ne vom uita la programul în sine.

Iată cum arată scurtătura de lansare a scanerului de coduri QR Droid - faceți clic pe ea.

Această aplicație, spre deosebire de cea anterioară, este realizată în limba rusă și, de îndată ce pornește, va trebui să facem clic pe butonul care scrie: „ÎNCEPEȚI”.

Scannerul este vizibil imediat, dar mai întâi să ne uităm la setările sale. Atingeți butonul situat în colțul din dreapta sus.

În meniul principal sunt vizibile 6 piese de butoane care redirecționează utilizatorul către secțiunea dorită. Aici sunt ei:

Deci, pentru a utiliza scanerul, trebuie să îl activați în meniul principal și, arătând spre codul QR, apăsați butonul „Citește”.

Aici selectați ecranul de pornire, setați adresa pentru Rezervă copie iar limba interfeței software este configurată.

Apoi putem instala mecanismul de scanare. Se folosește unul dintre algoritmii proprietari: Zapper sau ZXing. Mai jos puteți activa sau dezactiva crosshair-ul, configurați acțiune automată după scanare și activați afișarea indicațiilor de instrumente sau copierea linkului în clipboard.

Această secțiune configurează acompaniament sonor, vibrația se activează și se oprește. Procesul de înregistrare a acțiunilor în jurnal și interacțiunea cu ceas inteligent Android Wear.

Apoi vom putea exporta sau importa copie de rezervă sau stabiliți o dată.

Permiteți trimiterea de date anonime (este mai bine să dezactivați), activați verificarea legăturii de securitate primite în timpul scanării sau configurați scanarea în lot. Funcții precum mărirea sau evidențierea sunt disponibile mai jos.

Dar setările noastre nu se termină aici. Pe lângă funcțiile de mai sus, avem următoarele:

  • setarea orientării ecranului;
  • lucrul cu camera frontală;
  • analiza link-ului;
  • afișarea magazinelor.
  • funcție de alunecare extinsă;
  • interzicerea unor caractere speciale;
  • activarea previzualizării WEB;
  • caută imaginile salvate.

Ultimul ecran de setări conține funcții interesante, cum ar fi setarea numărului maxim de poziții, configurarea CSV-urilor personalizate, agitarea ceasului inteligent și salvarea pozițiilor duplicate.

Pe lângă setări, în meniul QR Droid Code Scanner există un element numit „Mai multe”. Să luăm în considerare funcționalitatea acestuia.

Iată următoarele posibilități:

Să ne uităm la ultima, dar nu mai puțin funcțională, aplicație de pe lista noastră.

NeoReader QR și scaner de coduri de bare

Acest program, ca și alții, îl puteți descărca și instala prin Google play sau prin link direct. După ce se face acest lucru, puteți trece direct la lucrul cu acesta.

Prima dată când lansăm, va trebui să satisfacem cererea de acces. Faceți clic pe „PERMITERE”.

Apoi va apărea o fereastră de setări. Aici puteți alege o limbă, indicați țara, sexul și vârsta. Cele două casete de selectare de mai jos vă permit să activați sau să dezactivați accesul programului la geodate.

De fapt, puteți începe scanarea. Îndreptați camera către codul QR și NeoReader QR & Barcode Scanner va recunoaște automat conținutul acestuia.

Credem că aceste trei programe sunt complet suficiente pentru orice persoană. Alege-l pe cel mai convenabil pentru tine și folosește-l la discreția ta. Vom vorbi despre unele dintre caracteristicile dispozitivelor chinezești.

Funcționalitate standard

Unele smartphone-uri și tablete (în funcție de marcă) au funcționalitate de scanare a codurilor QR ca standard și totul se poate face fără o aplicație. Nu le vom enumera pe toate; vom atinge doar modelul de la Xiaomi.

Să rezumam

Drept urmare, am învățat cum să scanăm un cod QR pe ​​Android căi diferite. Sperăm că articolul ți-a fost de folos. Dacă mai aveți întrebări, adresați-le în comentarii. Vom încerca să ajutăm pe toată lumea.

Chiar dacă acest lucru nu se întâmplă, unul dintre utilizatorii de pe site vă va spune cu siguranță cum să ieșiți din situație și să vă ofere sfaturi practice. Tot ce trebuie să faci este să-i dai viață.

Instrucțiuni video




Top