Scansiona la tabella dei codici dei tasti della tastiera. Sulla questione della valutazione dei segnali digitali Pemin. tastiere. Come scansionare i codici QR su Android

Maggioranza tastiere moderne dotati di tasti multimediali, mentre i mouse hanno già da tre a sette pulsanti. Autisti e ogni sorta di programmi utili Solo Windows. Tutti sanno che Linux è famoso per la sua capacità di personalizzare il sistema per te stesso, se, ovviamente, sai dove e cosa configurare. Il nostro compito è insegnare al pinguino a lavorare con pani aggiuntivi.

Determinazione del codice di scansione della chiave

Non importa cosa premi sulla tastiera, al server X e al kernel, in generale, non importa cosa c'è scritto o disegnato su di essa. Sono interessati solo al codice di scansione del pulsante e prima gli X leggono la tabella dei codici chiave del kernel, quindi il codice chiave viene collegato alla propria tabella dei codici. Se dentro Problemi di Windows Non esiste alcuna impostazione per i tasti multimediali nella console in quanto tale, quindi in Linux devi configurare separatamente la reazione alla pressione dei pulsanti nella console e in X-Window.

Per scoprire il codice chiave, dovresti usare l'utility xev inclusa con il server X. Dopo averlo avviato, appare la finestra Event Tester, ora premi i tasti in sequenza, ricordando il codice emesso:

$xev
...
Evento KeyRelease, seriale 31, NO sintetico, finestra 0x3e00001,
root 0x67, subw 0x0, ora 279734676, (311,611), root:(1104,687),
stato 0x2000, codice chiave 236 (keysym 0x1008ff19, XF86Mail), same_screen SÌ,

XFilterEvent restituisce: False
Evento KeyRelease, seriale 31, NO sintetico, finestra 0x2600001,
root 0x67, subw 0x0, ora 265877259, (883,334), root:(886,358),
stato 0x0, codice chiave 161 (keysym 0x0, NoSymbol), same_screen SÌ,
XLookupString fornisce 0 byte:
XFilterEvent restituisce: False

L'output può essere enorme poiché ogni movimento del mouse viene tracciato mentre passa sulla finestra Event Tester. La chiave è descritta dal blocco KeyRelease, in particolare il valore del keycode è proprio lo scan code che vogliamo conoscere. Nell'esempio mostrato vengono premuti due tasti. Il codice chiave 236 corrisponde al codice chiave per il server X specificato in keysym, così come all'azione XF86Mail, che in KDE avvia il client di posta predefinito. Per la chiave numero 161, il codice e l'azione non sono definiti.

È possibile che venga premuto un tasto ma il relativo codice di scansione non venga emesso. Ciò significa che il kernel non riesce a trovare un valore corrispondente. L'output di dmesg dovrebbe contenere la seguente riga:

Utilizzare "setkeycodes 0xec "per farlo conoscere.

Cioè, ti viene offerto di impostare tu stesso il codice di scansione della chiave utilizzando setkeycodes e scegliere il valore del codice chiave è molto semplice. Converti la cifra risultante in un numero decimale (la maggior parte dei calcolatori può farlo) e aggiungi 128. In questo esempio, 0xec = 236, ovvero otteniamo il codice di scansione 364. In caso di dubbio, l'elenco dei codici di scansione utilizzati e non utilizzati può essere visualizzato eseguendo l'utilità getkeycodes nella console o dumpkeys. Ad esempio, se l'output è "getkeycodes | grep<код клавиши>"non ha dato nulla, quindi questo codice può essere utilizzato in sicurezza.

Anche l'utilità XKeycaps (www.jwz.org/xkeycaps), che è un front-end grafico per Xmodmap, può aiutare a determinare il codice di scansione.

Il programma xev, ovviamente, non funziona nella console. Per scoprire il codice di scansione emesso dal kernel, dovresti usare l'utility showkey o getkeycodes:

$ spettacolo
la tastiera era in modalità UNICODE
premere un tasto qualsiasi (il programma terminerà 10 secondi dopo l'ultima pressione)...
0xe0 0x6c 0xe0 0xec

Le prime due cifre corrispondono al tasto premuto, la seconda all'assenza di pressione.

Configurazione dell'associazione del codice di scansione in X-Window

Quindi, ora che abbiamo i codici di scansione, dobbiamo indicare al server X cosa dovrebbe effettivamente fare quando viene premuto questo tasto, cioè assegnargli un nome simbolico. Un elenco di nomi di simboli è fornito nel file header XF86keysym.h. Per impostazione predefinita, i file di intestazione del server X non sono installati sulle distribuzioni moderne. Per vederlo in Ubuntu, è necessario installare il pacchetto x11proto-core-dev, dopodiché questo file si troverà nella directory /usr/include/X11. In alternativa, puoi contattare il server CVS di X.Org. Guardiamo:

$ cat /usr/include/X11/XF86keysym.h
/*
* Tasti presenti su alcune tastiere "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

Se confrontiamo l'ultima riga con l'output di xev, vediamo che i valori corrispondono alla chiave con keycode 236 - keysym 0x1008ff19, XF86Mail (senza il suffisso XK_). Puoi trovare un elenco di tutti i valori disponibili come dovrebbero essere utilizzati in /usr/share/X11/XKeysymDB.

Esistono due modi per creare il tuo layout: creare una descrizione della tua tastiera o utilizzare Xmodmap. L'ultimo metodo è il più semplice, quindi ne parleremo ulteriormente. Nella directory home dell'utente, creiamo un file.Xmodmap, nel quale inseriamo i valori desiderati:

$ mcedit ~/. Xmodmap

codice chiave 161 XF86Calcolatrice
codice chiave 174 XF86AudioLowerVolume
codice tasto 176 XF86AudioAlzaVolume
codice chiave 162 XF86AudioPausa

E così via, il principio, credo, è chiaro. Inoltre il codice chiave può essere inserito sia in forma decimale che esadecimale. Secondo le mie osservazioni, i codici per la maggior parte delle chiavi sono standardizzati. Pertanto, se si imposta la risposta alla pressione di un tasto una volta e si trasferisce il file su un altro computer, è possibile che su un'altra tastiera la reazione alla pressione di un tasto anch'esso firmato sia simile. Gli utenti del desktop Gnome con GDM possono scrivere tutte queste righe nel file di sistema /etc/X11/Xmodmap.

In altri casi, dobbiamo ancora dire al server X di utilizzare il file generato. Questo è implementato in modo diverso nelle diverse distribuzioni, l'idea principale è di eseguire il comando /usr/bin/xmodmap $HOME/.Xmodmap quando l'utente accede o quando si avvia X. Qui tutti ballano come vogliono. Sui forum suggeriscono di utilizzare il file $HOME/.xsession (in alcune distribuzioni potrebbe essere chiamato .Xsession), .xprofile o il sistema /etc/X11/Xsession. E temo che non sia tutto possibili opzioni. Vediamo come si fa in KUbuntu:

$ sudo grep -iR xmodmap /etc

Di conseguenza, troviamo un file molto interessante /etc/X11/Xsession.d/80ubuntu-xmodmap con il seguente contenuto:

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

/usr/bin/xmodmap /usr/share/apps/kxkb/ubuntu.xmodmap || VERO

USRMODMAP="$HOME/.Xmodmap"

if [ -x /usr/bin/xmodmap ]; Poi
if [ -f "$USRMODMAP" ]; Poi
/usr/bin/xmodmap "$USRMODMAP" || VERO
fi
fi

Cioè, vengono caricati i contenuti del file ubuntu.xmodmap e user.Xmodmap se esiste. Quando apri ubuntu.xmodmap nell'editor, troverai un elenco di codici chiave e nomi simbolici associati. Da ciò possiamo concludere: se uno sviluppatore segnala che la sua distribuzione supporta tastiere multimediali, con un alto grado di probabilità puoi trovare un file simile. Altre distribuzioni hanno un sistema simile per avviare file xmodmap personalizzati.

Ora che ai tasti sono stati assegnati nomi simbolici, è possibile assegnare loro le azioni desiderate. Alcuni ambienti a finestre come KDE possono gestire azioni basate su nomi simbolici. Quindi, quando premi il pulsante con XF86AudioPlay (QUESTION), il lettore predefinito inizia a riprodurre. Per impostare la combinazione desiderata, basta andare su “Centro di controllo KDE -> Opzioni internazionali e di accessibilità -> Combinazioni di tastiera” (in KUbuntu, guarda in “Impostazioni di sistema -> Tastiera e mouse”). C'è una voce di menu simile sia in Gnome (puoi semplicemente chiamare gnome-keyboard-bindings) che in XFce. Inoltre, alcuni programmi come Amarok, Konqueror e MPD possono anche elaborare le sequenze di tasti. In altri ambienti senza
gli strumenti di configurazione grafica molto probabilmente richiederanno un intervento manuale nei file di configurazione. Ad esempio, affinché in IceWM, premendo un tasto con il nome simbolico XF86AudioPlay si avvii il lettore XMMS e quando si preme nuovamente si metta in pausa, è necessario aggiungere la riga al file ~/.icewm che appare dopo il primo avvio:

$ mcedit ~/.icewm

tasto XF86AudioPlay xmms --play-pause

In Fluxbox la linea per avviare il player sarebbe simile a questa:

$ mcedit ~/.fluxbox/keys

Nessuno XF86AudioPlay:ExecCommand xmms --play-pause

Di solito ci sono esempi nelle configurazioni, quindi penso che tu possa facilmente capire da solo il resto dei gestori di finestre.

Impostazione della reazione nella console

Nella console la procedura è leggermente diversa. Come ricorderete, l'output di dmesg consigliava di assegnare i codici chiave utilizzando il comando setkeycodes. Ma qui ci sono delle differenze: non possono esserci più di 128 comandi da tastiera nella console, dovresti selezionare valori da 0 a 127:

$setkeycodes 0xec 118

È possibile visualizzare i valori liberi nel file di layout della tastiera corrente. Su Ubuntu e tutte le distribuzioni basate su Debian, solitamente è /etc/console-setup/boottime.kmap.gz. Se dopo l'avvio non ci sono problemi con le chiavi, aggiungi questa riga a uno degli script di avvio, ad esempio in /etc/init.d/rc.local.

Ora non resta che impostare la corrispondenza tra il tasto e l'azione che si sta effettuando. C'è ancora più spazio per la creatività qui che negli X. In keymaps(5), la procedura per abbinare un codice chiave è la seguente:

(semplice | ) codice chiave numero chiave = simchiave

# Riporta la console indietro quando si preme il tasto con il codice 105
codice chiave 105 = Decr_Console
# Cambia la console in avanti quando si fa clic su e una chiave con il codice 106
codice tasto alt 106 = Incr_Console

Ma puoi creare le tue opzioni specificando il comando nelle variabili:

codice chiave 120 = F100
stringa F100 = "/sbin/shutdown -h adesso\n"

In altre parole, premendo il tasto con codice 120 si eseguirà l'azione specificata nella variabile F100; nel nostro caso, il computer è impostato per spegnersi. Invece di F100, ovviamente, puoi usare qualsiasi altro nome.

Ora una parte altrettanto importante è dove scrivere tutto questo. La documentazione e numerosi suggerimenti suggeriscono di utilizzare il file di layout della console corrente (nel mio caso, boottime.kmap.gz). A proposito, questo è l'unico file che descrive i layout disponibili dopo l'installazione di KUbuntu; Per vedere altre opzioni, dovresti installare il pacchetto console-data. Successivamente, in /usr/share/keymaps/i386/ puoi trovare diverse sottodirectory con file all'interno. Ma se è necessario passare a un altro layout (in Ubuntu e in alcune altre distribuzioni viene utilizzato il file /etc/default/console-setup o ~/.console-setup), tutte le impostazioni dovranno essere trasferite su un altro file, che è in qualche modo
scomodo. Se decidi di fare questo passo, usa le voci esistenti come modello, senza scrivere nulla nella prima posizione, e non dimenticare di lasciare una riga vuota alla fine.

Un po 'del laptop

Finora non mi sono imbattuto in un laptop di cui non è stato possibile determinare i codici di scansione dei tasti. Pertanto, le impostazioni qui non sono diverse da quelle descritte sopra. Sebbene ci sia una tecnica di cui vorrei parlare. Trovo molto comoda da utilizzare la modalità di ibernazione, quando, quando accendi il computer, trovi tutto al suo posto. Le distribuzioni moderne, di regola, lo supportano, sebbene l'installazione sia, in generale, semplice: basta installare il pacchetto hibernate e sovrascrivere i parametri necessari nel file di configurazione. L'unica cosa è che ogni volta per passare a questa modalità è necessario eseguire lo script /usr/sbin/hibernate, il che non è sempre conveniente. Voglio solo chiudere il coperchio del portatile e riaccenderlo
cibo, scopri ogni cosa al suo posto.

Questo è molto semplice da fare utilizzando il demone acpid, che è una sorta di interfaccia utente che consente di gestire qualsiasi evento ACPI disponibile tramite /proc/acpi/event. In questo caso, acpid legge una serie di file di configurazione dalla directory /etc/acpi/events/. Se il pacchetto con il demone non è incluso nella distribuzione, installatelo dal repository; L'ultima versione può essere ottenuta dal sito web phobos.fs.tum.de/acpi. Dopo l'installazione è necessario creare due file nella directory /etc/acpi/events: lid e power. Il primo descrive la reazione alla chiusura del coperchio, il secondo alla pressione del pulsante di accensione.

$ sudo mcedit /etc/acpi/events/lid

evento=pulsante/coperchio.*
action=/usr/sbin/hibernate

$ sudo mcedit /etc/acpi/events/power

evento=pulsante/accensione.*
action=/sbin/shutdown -h adesso

Queste sono opzioni un po' semplificate; in KUbuntu troverai script più complessi. Successivamente è necessario riavviare il demone acpid:

$ sudo /etc/init.d/acpid riavvio

Ora, quando chiudi il coperchio del laptop, il sistema andrà in ibernazione con l'alimentazione spenta e quando premi il pulsante di accensione, si spegnerà. Semplice e conveniente.

Programmi di installazione

Se non ti piace armeggiare con i file di configurazione, ti suggerisco diversi programmi che ti aiuteranno a configurare il funzionamento dei tasti multimediali. Ad esempio, lo scopo iniziale del programma Sven (sven.linux.kiev.ua) è quello di configurare tasti aggiuntivi su una tastiera multimediale, ma a partire dalla versione 0.4 può correggere errori di battitura e modificare il layout della tastiera. Inoltre, anche se disponi di una tastiera normale, con il suo aiuto puoi emulare i tasti multimediali utilizzando invece le scorciatoie da tastiera. Puoi anche assegnare azioni a pulsanti specifici del mouse. Capisce circa 10.000 parole russe e 9.500 parole inglesi. Se il programma non cambia
stesso, il layout può essere modificato manualmente utilizzando un tasto appositamente designato (Interrompi per impostazione predefinita). Un tasto separato (Blocco Scorr) può cambiare il caso delle parole (maiuscolo, minuscolo, la prima lettera è superiore, il resto è inferiore). L'indicatore di cambio del layout della tastiera ricorda il suo stato per ciascuna finestra, quindi se passi spesso da un'applicazione all'altra, non avrai più bisogno di modificare ulteriormente il layout. Il programma ha grandi capacità e ti consiglierei di dargli un'occhiata. Tutte le impostazioni vengono effettuate utilizzando programma di grafica, basato sulle librerie GTK+. Sven è stato testato su Linux, ma in linea di principio dovrebbe funzionare su sistemi *BSD. Gestore finestre utilizzato
non importa.

Le capacità di KeyTouch (keytouch.sf.net) sono un po' più modeste; questa utility viene utilizzata esclusivamente per impostare i tasti multimediali. Sebbene con il suo aiuto puoi assegnare un'azione diversa a qualsiasi tasto che differisce dalle impostazioni predefinite. Sul sito web del programma, oltre ai testi sorgente e ai pacchetti per alcune distribuzioni, puoi trovare impostazioni già pronte per le tastiere multimediali dei produttori più noti.

Un altro soluzione interessante- xbindkeys (hocwp.free.fr/xbindkeys/xbindkeys.html) - consente di assegnare qualsiasi comando, inclusi i comandi della shell, a qualsiasi pulsante della tastiera e del mouse. Tutte le impostazioni vengono effettuate in un file di configurazione, che ha un formato semplice e comprensibile.

Molto probabilmente già sul tuo telefono installato per impostazione predefinita Scanner di codici QR, puoi usarlo facilmente per scansionare il tuo primo codice QR. Questo è molto facile da fare. Basta seguire le nostre istruzioni.

1. Apri il lettore di codici QR sul tuo telefono.

2. Tieni il tuo dispositivo sopra il codice QR in modo che sia chiaramente visibile sullo schermo del tuo smartphone.

Se tieni lo smartphone correttamente sopra il codice QR, accadrà quanto segue:

  • Il telefono esegue automaticamente la scansione del codice.
  • In alcune app, per scansionare un codice devi cliccare su un'immagine, anziché su un pulsante come faresti per scattare una foto sul tuo smartphone.

3. Se necessario, premere il pulsante indicato.

Super! Il tuo smartphone legge il codice e segue il collegamento indicato, cosa che non sempre avviene istantaneamente. Sulla maggior parte dei dispositivi l'operazione potrebbe richiedere alcuni secondi.

Inizierai a vedere i codici QR ovunque. Servono per insegnare, informare, spiegare e tante altre cose. Trovali e scansionali! I codici QR ti faranno risparmiare molto tempo e fatica.

Come scansionare i codici QR su Android

Ora ti diremo come utilizzare l'app per la scansione del codice QR su Android.

Brevemente:
1. Apri Play Store .
2. Cerca Lettore di codici QR .
3. Seleziona Lettore di codici QR(tramite Scansione).
4. Fare clic su " Installare".
5. Apri il programma Lettura del codice QR.
7. Punta la fotocamera sul codice QR.
8. Fare clic su " OK".

Passo 1. Apri Play Store su Android. Si tratta di un'icona in un'applicazione o nella schermata principale.

Passo 2. Inserisci il lettore di codici QR nel motore di ricerca. Apparirà un elenco di applicazioni per la lettura del codice QR.

  • Questo articolo spiega come utilizzare il lettore di codici QR, ma puoi scegliere l'app che preferisci. Assicurati solo di leggere informazioni sull'app prima di scaricarla.
  • I passaggi dovrebbero essere gli stessi per tutte le app di lettura dei codici QR.

Passaggio 3.Fare clic su Lettore di codici QR sviluppato da Scan. Il nome dello sviluppatore è elencato sotto ciascuna applicazione. Potrebbe essere necessario scorrere verso il basso per trovare l'app creata da Scan.

Passaggio 4.Fare clic su Installa. Apparirà una finestra pop-up che ti chiederà di concedere l'autorizzazione per accedere alle informazioni sul tuo Android.

Passaggio 5.Fare clic su Accetta. Il lettore di codici QR sarà ora installato sul tuo dispositivo Android.

    • Una volta scaricata l'applicazione, il pulsante "Installa" cambierà in "Apri" e avrai una nuova icona nell'applicazione.

Passaggio 6.Apri il lettore di codici QR. Questa è un'icona che assomiglia a un codice QR nell'app. Si aprirà un'applicazione che assomiglia allo schermo di una fotocamera standard.

Passaggio 7Allinea il codice QR nell'inquadratura della fotocamera. Un po' come si scattano le foto, solo che non è necessario premere alcun pulsante. Quando lo scanner del codice a barre legge il codice, verrà visualizzata una finestra pop-up con l'URL nel codice.


Passaggio 8Fare clic su "OK" per aprire il sito Web. Questo avvia il browser Web predefinito e passa all'URL nel codice QR.

Un altro tipico dispositivo per PC, che sembra semplice, ma che a volte causa problemi al ricercatore, è la tastiera.

In generale, il dispositivo è semplice. Soprattutto non i modelli già obsoleti collegati alla porta PS/2. Come mostrano numerosi dati sperimentali, il chip di controllo della tastiera scansiona i tasti premuti e li trasmette in codice seriale alla porta. La frequenza di clock di questa trasmissione è un multiplo (nella stragrande maggioranza dei casi) di 6,3 o 10 kHz. Sebbene negli ultimi anni l'autore si sia imbattuto in un paio di copie, la cui frequenza dell'orologio era di circa 20 kHz.

Tutte le tastiere, quando si tiene premuto un tasto qualsiasi, iniziano (dopo una pausa) a ripetere la trasmissione del codice tasto “ad infinitum”. In modalità normale, ciò porta solitamente a un overflow del buffer del controller e a un malfunzionamento entro pochi secondi. Appare segnale sonoro sistema "dinamica" - "cigolio". L'essenza della modalità test (la più generalmente accettata) è bloccare il comando di buffer overflow, che consente, quando si preme un tasto, di garantire la trasmissione infinita del carattere selezionato attraverso il cavo “tastiera”.

Come sempre, per il corretto successivo calcolo del risultato, è necessario creare una costante alternanza di impulsi nel pacchetto di codici. Per i codici tastiera, possono esserci due combinazioni di questo tipo:

10101010 (55) tasto “+; = "

01010101 (AA) nelle tabelle standard - non applicabile

La tabella generale dei codici di scansione è riportata nella tabella 14.1

Tabella 14.1- Codici di scansione della tastiera

Chiave

Scansiona il codice

Chiave

Scansiona il codice

Chiave

Scansiona il codice

Chiave

Scansiona il codice

Pertanto, quando si implementa la modalità test e, ad esempio, si posiziona un peso sul tasto “+”, nel cavo della tastiera sarà presente una sequenza infinita di pacchetti di impulsi. In questo caso, il periodo di ripetizione dell'impulso nel pacchetto (ovvero la frequenza dell'orologio) sarà pari a 6,10 o 20 kHz e la frequenza di ripetizione del pacchetto sarà molto inferiore. Il formato dei dati è mostrato nella Figura 14.1

Per lo scambio di dati nel cavo della tastiera sono presenti due linee: KBData e KBSync. Durante la trasmissione dei codici di scansione, la tastiera imposta il bit di dati successivo sulla linea KBData e conferma la trasmissione trasferendo il segnale da “1” a “0” sulla linea KBSync.

Il controller può segnalare la sua non disponibilità a trasmettere/ricevere dati con un livello basso sulla linea KBSync. Nel resto del tempo, quando non ci sono dati da trasmettere, entrambe le linee hanno un livello di segnale elevato.



Come segue da quanto sopra, nello spettro PEMIN del cavo della tastiera ci si dovrebbero aspettare componenti di frequenza con una frequenza di clock di 1/76,04·10 -6 = 13,15 kHz. Inoltre, a causa della presenza di due segnali sfasati con periodi diversi (ma multipli!), le componenti di frequenza pari e dispari differiranno in ampiezza.

Come ci si aspetterebbe, il PEMIN di una linea dati sincronizzata è, in linea di principio, non informativo. Ma distinguere un PEMIN da un altro non è affatto semplice. C'è un solo cavo, i segnali sono sincroni...

In pratica l'unico modo– selezionare un codice di scansione con il numero minimo di “1” logici nel pacchetto. Questi sono i tasti “F3” e F9” (03 e 01 in codice esadecimale). Il codice "00" non viene utilizzato.

Di seguito è mostrato l'oscillogramma del codice di scansione “F3”.


Rigorosamente "in termini di energia", se si misurano tutte le componenti di frequenza di PEMIN con il codice "=" e, ad esempio, il codice "F9", la differenza nelle letture del ricevitore su CIASCUNA delle componenti di frequenza è la vera informazione parte dell'energia PEMIN. Inoltre, questo è un massimo massimo. Il lavoro risulta piuttosto complesso e noioso se non è possibile affidarlo ad una “macchina automatica”. Gli stessi componenti di PEMIN per questo basse frequenze non sono facilmente identificabili. Quindi anche per “cogliere” le differenze...



Nella pratica SI, nella stragrande maggioranza dei casi, si misurano semplicemente i livelli PEMIN (senza sottrarre nulla) e si calcola il parametro di sicurezza. Ciò è possibile “con riserva”, ma lo specialista è obbligato a conoscere la reale situazione.

Alla fine della recensione: la "disposizione dei piedini" dei connettori delle tastiere AT e PS/2.


Le “immagini” sul ricevitore non sembrano così “classiche”, tuttavia sono abbastanza riconoscibili. Ecco alcuni esempi



Lo spettro mostra chiaramente un aumento dell'ampiezza delle componenti al diminuire della frequenza.

Esistono anche caratteristiche di misurazioni “clave” in questa regione di frequenza (da decine di kHz e oltre). Il fatto è che la tastiera, nella sua posizione abituale, si trova non lontano da unità di sistema. E in cima all'SB c'è blocco degli impulsi l'alimentatore è la fonte più potente di PEMIN sia per i componenti “E” che per quelli “H”. Alla “luce” di un riflettore così teatrale, vedere la fioca “luce” della tastiera è un'arte speciale! Pertanto, propongo la seguente tecnica. Allontanare il più possibile la tastiera dall'SB. Meglio: su un extender PS/2. Circa 2-2,5 metri.

Posizionare l'antenna in modo che sia puntata il meno possibile dal satellite (il segnale, con una larghezza di banda del ricevitore superiore a 10 kHz, è uno spettro continuo). E vicino all'antenna orientata e fissa, inizia a torcere la tastiera e il suo cavo (non viceversa!). Allora avrai maggiori possibilità di rilevare i segnali PEMIN dalla tastiera e di vedere con i tuoi occhi i componenti PEMIN sullo schermo dell'analizzatore.

Tutto quanto sopra applicato ad una tastiera con interfaccia PS/2. Ma ora vengono sostituite in massa dalle tastiere con interfaccia USB.

In generale, questa interfaccia è stata discussa in dettaglio insieme alle stampanti. Tuttavia, sarebbe utile dare qualche “designazione target” per quanto riguarda la tastiera.

Ricordiamo la costruzione dei pacchetti per l'interfaccia USB, tenendo conto che la tastiera è collegata rigorosamente a bassa velocità (cioè effettivamente tramite l'interfaccia USB 1.0).

La dimensione massima del payload DATI per i dispositivi a bassa velocità è 8 byte. Cioè, questo è esattamente ciò che richiede il codice di scansione della tastiera.

Vedere il segnale (cioè i dati) sulla linea USB si è rivelato un compito non così facile. Tuttavia, questo è ciò che è stato rivelato proprio nel cavo di una tipica “tastiera” USB modello GENIUS KB-06XE, precisamente nella linea “dati +” (filo) (Figura 14.10)


Questi due oscillogrammi si modificano a vicenda con una periodicità non specificata (caotica), e le “immagini” dei segnali non dipendono dal tasto premuto (o da nessuno) della tastiera. Non è stato possibile identificare altre modifiche nella parte “variabile” del pacchetto (frame).

La frequenza di questi pacchetti è rigorosamente stabilizzata (Fig. 14.11) e la durata di ciascuno è (visibile sugli oscillogrammi) di circa 34 ± 1 μs.


I pacchetti si susseguono ogni 4 ms. Tuttavia, va notato che la fine di ogni pacchetto “agita” continuamente e il classico “jitter” è evidente. Pertanto l'immagine spettrale è un po' sfocata e diventa chiara solo con una media sufficientemente lunga.


Inoltre, si dovrebbe tenere presente che, a causa dei diversi periodi di ripetizione degli impulsi e della loro diversa durata, lo spettro ha il carattere di una sorta di miscela di spettro continuo e lineare. Tuttavia, il carattere lobato dello spettro, naturale per una sequenza infinita di pacchetti e multiplo nei suoi “lobi” della durata media del pacchetto, è preservato molto chiaramente. Solo gli “zeri” della funzione vengono attenuati dal jitter e da un periodo di ripetizione non variabile dei singoli impulsi. Tuttavia, l'immagine in sé è abbastanza tipica. Con una risoluzione di frequenza più fine, lo spettro comincia a risolversi in “linee” determinate dalla frequenza di ripetizione del pacchetto (250 Hz) (Fig. 14.13). Pertanto, con la visualizzazione più semplice degli oscillogrammi e non sincronizzata con la trasmissione effettiva del codice di scansione, identificare e visualizzare le sezioni del frame (pacchetto), responsabile del trasferimento dei dati, non è riuscito. Tuttavia si può sostenere che il PEMIN del cavo della tastiera sarà ancora questo e nessun altro. È chiaro a quali frequenze cercarlo, è chiaro che sarà di natura continua (in ogni caso con una risoluzione di frequenza del ricevitore superiore a 0,3 kHz). Ed è chiaro quale valore sostituire come valore di clock nei calcoli (la durata minima degli impulsi in un pacchetto nell'esperimento era 1.322 μs). Misurarlo, a qualsiasi SI, con un oscilloscopio con una larghezza di banda di almeno 200 MHz è un compito banale. La modalità test, infatti, è qualsiasi, puoi premere qualsiasi tasto oppure non premere nulla. I pacchetti vengono comunque trasmessi tramite l'interfaccia. E, in prima approssimazione, li consideriamo informativi (fino a prova contraria).

Gli oscillogrammi e gli spettri indicati sono stati ottenuti utilizzando un oscilloscopio AKIP-4108/2 collegato allo stesso computer su cui sono state eseguite le misurazioni (va notato che questa è una ripetizione molto funzionale dello sviluppo della società PICO Technology da parte nostra. No peggio dei cinesi :)).

Lo spettro va chiaramente ben oltre 1 MHz (l'oscilloscopio non lo permetteva più e non aveva molto senso collegare un analizzatore). Il resto è determinato dal cavo, come antenna casuale, e dal grado della sua schermatura.

Per le altre modalità dell'interfaccia USB è necessario un oscilloscopio con una larghezza di banda di molti GHz.

Come calcolare esattamente lo spettro continuo e, allo stesso tempo, rimanere nell'ambito dell'attuale NMD è una conversazione separata e non una discussione aperta, ahimè... Tuttavia, nelle pubblicazioni successive dovremo tornare su questo argomento non c'è nessun posto dove andare. Cercherò di “rimanere entro i limiti”...

Ciò che mi ha spinto a lavorare su un dispositivo di questo genere è stato il fatto che la maggior parte dei dispositivi Gamemort facilmente replicabili non consentivano l'implementazione di un numero sufficiente di pulsanti di controllo. Una porta per giochi per PC è stata originariamente progettata per un massimo di quattro pulsanti. Anche tutti i tipi di estensioni non hanno la flessibilità desiderata. Ad esempio, l'estensione CH Flightstick Pro, popolare tra gli amanti del fai da te, ti consente di implementare fino a 14 pulsanti, ma non puoi utilizzare due pulsanti contemporaneamente - riguardo al volo su tali dispositivi nei giochi in cui devi costantemente "accendere il tuo testa" - negli stessi uccelli, puoi dimenticare. Alcune estensioni utilizzano un'interfaccia puramente digitale: i dati sui pulsanti premuti e sulla deflessione della manopola vengono trasmessi lungo le linee della porta di gioco digitale, originariamente destinate a trasmettere dati sui quattro pulsanti "standard". Considero addirittura tali estensioni alquanto ridondanti. E la conversione dei dati analogici in digitali complica la progettazione del joystick. Inoltre, non tutti i giochi vogliono capire che tipo di mostro è “attaccato” ad esso. E la tastiera: eccola qui, in tutto il suo splendore da 102 tasti! Inoltre, gli abbonati di RU.GAME.FLIGHT hanno aggiunto benzina sul fuoco, chiedendosi di volta in volta “come posso domare la tastiera e attraversarla con gioia?” e partire senza niente.

In breve, il compito del dispositivo è quello di "sedersi" sul bus tra la tastiera e il PC e simulare la pressione dei tasti sulla tastiera in base ai pulsanti premuti sul dispositivo.

Quindi mi sono seduto per svilupparlo. Prima di ciò, avevo esperienza di lavoro con vari microprocessori e microcontrollori. In generale: dita da un orecchio all'altro. E ho creduto ingenuamente che ora prenderò il molo, farò RTFM e tra una settimana sarò su un cavallo bianco. Il problema è che non sono riuscito a trovare documentazione sul protocollo di trasferimento dati tra tastiera e controller né su Internet né nelle relative conferenze Fido. Ho dovuto prendere un oscilloscopio e passare diverse settimane a smontare gli improvvisati e provare a ripeterli. Pertanto, la maggior parte delle informazioni presentate di seguito sono il risultato delle mie conclusioni e non sono documentate. Se sbaglio qualcosa, sarò felice di sentire i tuoi commenti su rashpil A Regno Unito punto netto.

Principi di base del trasferimento dei dati

Tutto quanto segue vale per le tastiere PS/2 e AT, che differiscono solo per il design del connettore (può essere collegato tramite un adattatore).

Lo scambio dati bidirezionale avviene tra la tastiera e il controller situato sulla scheda madre del computer (di seguito denominato semplicemente “controller”). Il controller trasmette vari comandi (ad esempio, modifica dello stato dei LED o velocità di ripetizione automatica). La tastiera trasmette i codici di scansione dei tasti premuti (scan code - simbolo tasti, non devono essere confusi con i codici ASCII).

Codici di scansione

Chiave Scansiona il codice Chiave Scansiona il codice Chiave Scansiona il codice Chiave Scansiona il codice
1 16 2 1E 3 26 4 25
5 2E 6 36 7 3D 8 3E
9 46 0 45 - 4E + 55
Indietro 66 Tab 0D Q 15 W 1D
E 24 R 2D T 2C Y 35
U 3C IO 43 O 44 P 4d
[ 54 ] 5B accedere 5A Ctrl(L) 14
UN 1C S 1B D 23 F 2B
G 34 H 33 J 3B K 42
l 4B ; 4C " 52 ` 0E
Maiusc(L) 12 \ 61 Z 1A X 22
C 21 V 2A B 32 N 31
M 3A , 41 . 49 / 4A
Maiusc(R) 59 Alt(L) 11 Spazio 29 Blocco maiuscole 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 Blocco scorrimento 7E * 7C Blocco numerico 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 Stampa schermata E0-12-E0-7C
Inserire E0-70 Eliminare E0-71 Sinistra E0-6B Casa E0-6C
FINE E0-69 Su E0-75 Giù E0-72 Pagina su E0-7D
Pagina giù E0-7A Giusto E0-74 accedere E0-5A / E0-4A

Nota: la tastiera AT ha in realtà tre diversi set di codici di scansione. Ho fornito solo i valori per il set n. 2, quello predefinito.

Quando si preme un tasto, la tastiera trasmette il codice di scansione di questo tasto al controller. Al rilascio, prima il prefisso 0F0h, quindi il codice di scansione della chiave rilasciata.

Le combinazioni di tasti con Maiusc, Alt e Ctrl vengono trasmesse come sequenza di due codici di scansione. Dal punto di vista del controller, questi tasti non sono diversi dagli altri. Allo stesso modo, le modalità Num Lock e Caps Lock non differiscono a livello hardware, ma differiscono a livello software dal programma che gestisce gli interrupt della tastiera.

Vorrei discutere brevemente l'implementazione della modalità di ripetizione automatica. Di norma, le funzioni di ripetizione automatica sono assegnate alla tastiera stessa: dopo un certo tempo, se il tasto non viene rilasciato, la tastiera ne invia un altro esattamente con lo stesso codice di scansione. Se si preme un altro tasto in questo momento, un altro codice di scansione “volerà” al controller e verrà considerato che è stato premuto un solo tasto. Nei giochi, questo problema viene risolto semplicemente: il tasto viene considerato premuto finché non arriva il codice di scansione corrispondente con il prefisso 0F0h. Pertanto in linea di principio non ho implementato le funzioni di ripetizione automatica.

Oltre ai codici di scansione sopra indicati, la tastiera può restituire alcuni comandi di servizio. Ma questi comandi, così come quelli emessi dal controller, in questo caso non hanno alcun valore pratico. Pertanto, non mi soffermerò su di loro.

Descrizione del protocollo di scambio

Lo scambio di dati tra la tastiera e il controller avviene in modo asincrono utilizzando un protocollo seriale. L'essenza della trasmissione asincrona è che i dati vengono trasmessi solo quando c'è qualcosa da trasmettere: viene premuto/rilasciato un tasto sulla tastiera ed è necessario emettere il codice di scansione corrispondente oppure il controller deve inviare un comando alla tastiera.

Esistono due linee per lo scambio di dati: KBData e KBSync. Durante la trasmissione dei codici di scansione, la tastiera imposta il bit di dati successivo sulla linea KBData e conferma la trasmissione trasferendo il segnale da “1” a “0” sulla linea KBSync. Quando si ricevono dati dal controller, la tastiera legge il bit di dati dalla linea KBData e conferma la ricezione trasferendo il segnale sulla linea KBSync da “1” a “0”. Il controller può segnalare la sua non disponibilità a trasmettere/ricevere dati con un livello basso sulla linea KBSync. Nel resto del tempo, quando non ci sono dati da trasmettere, entrambe le linee hanno un livello di segnale elevato. La frequenza di ripetizione degli impulsi della linea KBSync è di circa 10-25 KHz.

I dati vengono trasmessi nel seguente ordine: un bit di inizio - "0", otto bit di dati, un bit di parità (la somma di tutti i bit +1), un bit di stop - "1". Dopo aver ricevuto ciascun byte di dati, il controller imposta la linea KBSync su basso, segnalando così che è occupato nell'elaborazione dei dati ricevuti e non è pronto a ricevere quello successivo. Questa può essere considerata una conferma di accettazione. La tastiera conferma ogni byte del comando ricevuto emettendo il codice 0FAh. Se si verifica un errore durante la trasmissione, il controller può richiedere la ripetizione della trasmissione dell'ultimo byte emettendo il comando 0FEh. La tastiera si comporta diversamente: ignora semplicemente gli errori. Non vedo nulla di fatale in questo: se il tuo sistema si blocca frequentemente, non ha posto sul desktop.

Molto probabilmente le mie spiegazioni erano troppo confuse, quindi cercherò di illustrarle con diversi diagrammi temporali.

Vista generale del trasferimento dati dalla tastiera (S1 - bit di start; S2 - bit di stop; D0-D7 - dati; P - bit di parità; W - elaborazione dei dati ricevuti)

Un esempio di trasmissione di byte 74h: il tasto “6” sul tastierino numerico. In questo esempio, quando un trasferimento viene avviato dalla tastiera, il controller segnala che non è pronto a ricevere dati e la tastiera attende che la linea KBSync si liberi

Implementazione dell'hardware

Ora passerò direttamente alla descrizione dell'implementazione del dispositivo nell'hardware.

Il dispositivo è collegato all'interruzione dei segnali KBSync e KBData e trasmette segnali da/verso la tastiera attraverso se stesso, interroga lo stato dei quattro pulsanti ed emette i codici di scansione corrispondenti, simulando così il funzionamento della tastiera.

Il dispositivo si basa su un microcontrollore a chip singolo AT89C2051. Il microcontrollore Atmel AT89C2051 appartiene alla famiglia MCS-51 ( analogo domestico-MK-51). La differenza principale tra l'AT89C2051 e l'i8051 è il minor consumo energetico, il numero di linee I/O ridotto a 15 e l'impossibilità di utilizzare memoria esterna. Di più informazioni dettagliate AT89C2051 e i8051 sono reperibili su www.atmel.com e www.intel.com. Invece di AT89C2051, puoi utilizzare AT89C51, i8051 (KR1816BE51) o i8031 (KR1816BE31) con ROM esterna. Ma le ultime due opzioni, a causa del loro maggiore consumo energetico, possono far bruciare il fusibile del controller della tastiera.

Sui microcontrollori Atmel, dopo la designazione principale, la frequenza massima del generatore di clock è indicata in megahertz. Ti consiglio di installare un microcontrollore progettato per una frequenza di 24 MHz e un quarzo con una frequenza più alta - 16-20 MHz.

Diagramma schematico. (R1-R4 - 47K; R5 - 10K; C1, C2 - 18pF; C3 - 1uF; D1 - AT89C2051; BQ1 - quarzo 12-24MHz)

La linea P1.4 viene utilizzata come uscita di abilitazione polling del pulsante. Questa è la base per future espansioni: le linee P1.4-P1.7 verranno utilizzate per emettere l'indirizzo della linea per il polling dei pulsanti premuti (fino a 16 linee di 4 pulsanti ciascuna). “0” sulla riga P1.0-P1.3 significa che è premuto il pulsante corrispondente.

Gli elementi C3 e R5 implementano un circuito che genera un segnale di ripristino quando viene applicata l'alimentazione.

Le linee KBData dalla tastiera e dal controller vengono fornite agli ingressi P3.2 (INT0) e P3.3 (INT1). Pertanto, un tentativo di avviare il trasferimento di dati dalla tastiera o dal controller provoca un'interruzione corrispondente. Le routine per la gestione di questi interrupt trasmettono semplicemente segnali corrispondenti al trasferimento di un byte attraverso il microcontrollore. Quando il microcontrollore non è impegnato a trasmettere dati, le linee P1.0-P1.4 vengono interrogate, i dati ricevuti vengono elaborati e i codici di scansione corrispondenti vengono emessi al controller. Questa versione dà priorità ai dati trasmessi dal dispositivo stesso. Pertanto, a volte i dati della tastiera possono andare persi.

Per concludere questa sezione, fornirò la piedinatura dei connettori delle tastiere AT e PS/2.

Il segnale -KBReset è un segnale opzionale. Alcuni controller potrebbero utilizzarlo per ripristinare la tastiera.

Testo del firmware

Fornisco il testo sorgente del firmware per il microcontrollore AT89C2051 nella speranza che un lettore curioso possa correggermi o adattare il programma per funzionare con un altro tipo di microcontrollore.

Org 0 sjmp start org 3 jmp from_keyboard ; INT0 org 13h jmp su_tastiera; INT1 inizia mov a,#5 ; impostazione del tipo di interruzione mov tcon,a ; INT0 e INT1 sul davanti - mov a,#0 ; transizione da "1" a "0" mov ip,a mov a,#85h mov ie,a mov a,#0ffh ; l'ultimo mov 6,a viene memorizzato all'indirizzo 06h; codice elaborato clr p1.4; abilita il ciclo di polling mov a,p1 ; viene letto lo stato dei pulsanti anl a,#15; - i quattro bit meno significativi della porta P1; D0 - su; D1 - destra; D2 - giù; D3 - mov dptr sinistro,#hat_table; legge i dati sui quattro pulsanti movc a,@a+dptr ; espanso in otto direzioni; D0 - su; D1 - destra; D2 - giù; D3 - sinistra; D4 - verso destra; D5 - a destra in basso; D6 - a sinistra in basso; D7 - movimento verso sinistra r2,a ; salvataggio dei dati mov r0,a xrl a,6 ; se i nuovi dati non differiscono dal loop jz; ricevuto nel ciclo precedente - ripetere il sondaggio mov r1,#8 ; ciclo per otto bit loop3 jnb acc.7,loop2 ; "1" - c'è stata una modifica push acc mov a,r1 mov dptr,#key_table-1 ; estrai il codice di scansione corrispondente movc a,@a+dptr premi acc mov a,r0 ; registro R0 - segno di pressione/rilascio di rlc a ; tasto emulato mov r0,a ; "1" - la "chiave" è stata rilasciata pop acc mov acc.7,c ; se D7=1 - il codice di scansione sarà preceduto da 0f0h acall send_key ; emissione di un codice di scansione 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 ; interruzioni disabilitate acall send2comp ; invio del filmato con codice di scansione, ad esempio,#85h; interrupt abilitati ret send2comp jnb acc.7,send ; se necessario, 0f0h push acc mov a,#0f0h acall invia pop acc clr acc.7 mov b,#200 l9 nop djnz b,l9 invia push 1 push 0 clr p3.3 ; P3.3 - KBData movimento b,#6; emissione del bit di avvio 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 ; emissione di otto bit di dati e conteggio della parità 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 ; parità di uscita bit 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 di stop uscita 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 da_tastiera; trasferimento di un byte al controller mov ie,#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 ; trasferimento di un byte alla tastiera mov ie,#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 cioè,#85h reti hat_table; tabella per l'espansione dei dati letti dalla porta P1; l'indice nella tabella è un codice binario a quattro bit; dati: lo stato delle otto chiavi emulate; "0" - tasto premuto db 0ffh ; sinistra+destra+su+giù=combinazione vietata db 0ffh ; sinistra+destra+giù=combinazione vietata db 0ffh ; sinistra+su+giù=combinazione vietata db 0bfh ; sinistra+giù=sinistra-giù db 0ffh ; sinistra+destra+su=combinazione vietata db 0ffh ; sinistra+destra=combinazione vietata db 07fh ; sinistra+su=sinistra su db 0f7h ; sinistra db 0ffh ; destra+su+giù=combinazione vietata db 0dfh ; giù+destra=giù-destra db 0ffh ; su+giù=combinazione vietata db 0fbh ; giù db 0efh ; destra+su=destra su db 0fdh ; giusto db 0feh ; su db 0ffh ; nessun pulsante premuto key_table ; tabella dei codici di scansione db 75h; tastierino numerico 8 db 74h ; tastierino numerico 6 db 72h ; tastierino numerico 2 db 6bh ; tastierino numerico 4 db 7dh ; tastierino numerico 9 db 7ah; tastierino numerico 3 db 69h ; tastierino numerico 1 db 6 canali; tastierino numerico 7

Nell'archivio tools.zip troverai due programmi: a51.exe - un assembler, hex2bin - un convertitore di file esadecimali, che si ottengono all'uscita dell'assembler, in un formato binario adatto per eseguire il flashing della ROM del microcontrollore con un programmatore .

Assemblaggio e risoluzione dei problemi

È possibile assemblare il dispositivo secondo lo schema sopra riportato su una breadboard, una tavola incisa in casa o prodotta industrialmente. Una presa dovrebbe essere posizionata sotto il microcontrollore. È meglio lasciare spazio sulla scheda per 2-3 pacchetti DIP a 16 pin: verranno aggiunti nelle versioni successive.

Successivamente, dopo aver apportato le modifiche desiderate, il testo sorgente del microprogramma viene assemblato utilizzando il programma a51.exe. Per eseguire il flashing del firmware con il programmatore, il file esadecimale risultante viene convertito in un'immagine binaria dal programma hex2bin.exe.

Dopo aver assemblato completamente il dispositivo, lo colleghiamo alla tastiera e al computer. Tre... Due... Uno... Andiamo!.. Un dispositivo assemblato correttamente con componenti noti e buoni dovrebbe funzionare immediatamente. In caso contrario verificare la corretta installazione e la presenza di alimentazione sul microcontrollore. Utilizzando un oscilloscopio, verificare se il generatore di clock è stato avviato e se un impulso di alto livello arriva all'ingresso RST all'accensione. Quando si premono i tasti sulla tastiera, gli impulsi sulle linee P3.3 e P3.5 dovrebbero ripetere, con un certo ritardo, gli impulsi sulle linee P3.2 e P3.4, rispettivamente. Quando si premono/rilasciano i pulsanti del dispositivo, dovrebbero apparire degli impulsi anche sulle linee P3.3 e P3.5. Se questo non aiuta, scrivimi ( rashpil A aporto punto ru) segnalazione di bug, indicando modello e tipologia (AT, PS/2) della vostra tastiera, scheda madre/multischeda, microcontrollore utilizzato e frequenza di utilizzo risuonatore al quarzo. Ho provato a testare il dispositivo con il numero massimo a mia disposizione schede madri e tastiere: non sono stati identificati problemi. Nel mio caso è stato utilizzato il quarzo da 14,2 MHz.

Bug conosciuti

La versione attuale del firmware presenta i seguenti difetti:

  • I codici di scansione a doppio byte non vengono tracciati. Ciò porta al fatto che a volte, quando si utilizzano contemporaneamente la capanna e la tastiera, i tasti della tastiera “si bloccano” se premuti o vengono percepiti in modo errato;
  • A volte i dati vengono trasferiti in modo errato dal controller alla tastiera. Ciò si può esprimere, ad esempio, nel fatto che i LED non cambiano stato quando vengono premuti i tasti Num Lock, Caps Lock, Scroll Lock;
  • Sbattimento dei contatti dei pulsanti della capanna. Finora questo non è stato fatale per me nei giochi.

Progetti futuri

Ecco un breve elenco di ciò che vorrei implementare nelle versioni future:

  • Correzioni di bug minori: elaborazione del segnale più corretta; tracciamento dei codici di scansione a doppio byte;
  • Collegamento di una matrice 16x4 - supporto per un massimo di 64 pulsanti o due capanne e fino a 56 pulsanti;
  • Supporta fino a 16 diversi layout di codici di scansione memorizzati nella ROM del microcontrollore;
  • Collegamento di un chip NVRAM con possibilità di salvare e riprogrammare “al volo” fino a 32 layout di codice di scansione.

Conclusione

Ho cercato di presentare tutti i dati necessari per comprendere il principio di funzionamento del mio dispositivo. Questa descrizione non pretende di essere tecnicamente accurata al 100%. Se sbaglio qualcosa, per favore dimmi la tua versione dei fatti. Se potete apportare miglioramenti e aggiunte al mio circuito e/o firmware, se avete idee per un ulteriore sviluppo del circuito, fatemelo sapere. Inoltre sto aspettando informazioni da artigiani che siano riusciti a replicare o adattare questo dispositivo per altri tipi di microcontrollori.

Vladimir "Rasp" Klimus (rashpil A Regno Unito punto netto)

  1. Nella parte superiore della finestra di Google Play c'è stringa di ricerca. Questo è esattamente ciò che useremo. Attiviamo e scriviamo il nome della nostra applicazione. Non è necessario inserirlo fino in fondo. Non appena l'oggetto indicato nello screenshot appare nei risultati della ricerca, è sufficiente toccarlo.
  1. Verremo reindirizzati alla home page del programma. C'è un grande pulsante verde che dice "INSTALLA". Cliccalo.
  1. Stiamo aspettando che l'applicazione finisca di scaricare. Dato che pesa poco meno di 5 MB, il processo non richiederà molto tempo.
  1. Pronto. Una volta completata l'installazione automatica, possiamo avviare il programma direttamente da qui.
  1. Anche acceso schermo di casa(se attivato nelle impostazioni) apparirà un collegamento di avvio.

A questo punto l'installazione del programma è completa e possiamo passare a una panoramica su come lavorarci.

Nello screenshot qui sotto vedi interfaccia software. Qui è diviso in 3 schede principali. C'è anche un'icona delle impostazioni realizzata sotto forma di un ingranaggio. Nella scheda principale "SCANSIONE" sono presenti 4 strumenti principali:

  • Scansiona il codice a barre. Questo è uno scanner QR che funziona tramite una fotocamera;
  • Inserimento manuale. Funzione di inserimento manuale dei dati del codice;
  • Decodifica da file. Decodifica da un file. Da qui potrete aprire il codice QR precedentemente scaricato e leggerlo;
  • Decodifica dall'URL. Scansione tramite collegamento.

Nella parte inferiore sono presenti diversi pulsanti che non forniscono funzionalità utili. Non dovresti prestare loro attenzione.

Diamo un'occhiata alle impostazioni del programma. Ce ne sono parecchi qui. Sugli schermi verranno visualizzati screenshot di diverse aree di configurazione, ma espliciteremo semplicemente alcuni dei punti più interessanti.

Ad esempio, nella prima schermata puoi abilitare o disabilitare il suono del programma. Lo stesso può essere fatto con la risposta alle vibrazioni. È possibile impostare la modalità operativa quando il programma viene eseguito immediatamente dallo scanner, ignorando il menu principale. Un'altra caratteristica importante è la copia automatica dei dati negli appunti.

Non appena vogliamo avviare la scansione e avviare lo scanner stesso, il programma richiederà l'accesso alle risorse di sistema necessarie. Naturalmente è necessario risolverlo. Fare clic sul pulsante contrassegnato nello screenshot.

Successivamente, posizioniamo la cornice dello scanner in modo che la striscia orizzontale cada direttamente sul QR. Cerca di non stringerti la mano e allo stesso tempo osserva la tua concentrazione. Senza una nitidezza normale, la scansione non avrà successo.

Per consentire al QR BARCODE SCANNER di funzionare in condizioni di scarsa illuminazione, è presente una retroilluminazione.

Una volta riconosciuto il codice, vedrai le informazioni mostrate nello screenshot qui sotto.

Oltre a scansionare i QR, puoi anche crearli qui. Per fare ciò, vai alla terza scheda. L'abbiamo contrassegnato nello screenshot. L'elenco mostra tutti i tipi di dati che possono essere crittografati. È supportato quanto segue:

  • contatto della rubrica;
  • numero di telefono;
  • URL;
  • E-mail;
  • applicazione;
  • posizione;
  • qualsiasi testo;
  • segnalibro;
  • evento del calendario.

Sembra tutto così:

Una volta selezionato e specificato il tipo di dati, tutto ciò che dobbiamo fare è fare clic sul pulsante "Codifica". In questo caso, abbiamo crittografato il collegamento.

Proviamo a crittografare anche il testo arbitrario. Per fare ciò, seleziona l'elemento desiderato.

Inserisci la frase nel campo designato e premi il pulsante “Codifica”.

Il risultato sembra fantastico. Cambiamo anche il suo colore. Fare clic sul pulsante previsto a questo scopo.

Seleziona la tonalità desiderata dalla tavolozza.

E ammiriamo il QR ricevuto.

Passiamo al programma successivo, anch'esso dotato di funzionalità impressionanti.

Scanner di codici QR Droid

Un'altra applicazione che può essere trovata su Google Play. Puoi anche scaricarlo da un collegamento diretto sul sito Web di Google. Per ora esamineremo il programma stesso.

Ecco come appare il collegamento di avvio dello scanner QR Droid Code: fai clic su di esso.

Questa applicazione, a differenza della precedente, è realizzata in russo e, appena avviata, dovremo cliccare sul pulsante con scritto: “INIZIA”.

Lo scanner è immediatamente visibile, ma prima diamo un'occhiata alle sue impostazioni. Tocca il pulsante situato nell'angolo in alto a destra.

Nel menu principale sono visibili 6 riquadri di pulsanti che reindirizzano l'utente alla sezione desiderata. Eccoli:

Quindi, per poter utilizzare lo scanner, è necessario attivarlo nel menu principale e, puntando sul codice QR, premere il pulsante “Leggi”.

Qui selezioni la schermata iniziale, imposti l'indirizzo per Prenota copia e la lingua dell'interfaccia del software è configurata.

Successivamente possiamo installare il meccanismo di scansione. Viene utilizzato uno degli algoritmi proprietari: Zapper o ZXing. Di seguito puoi abilitare o disabilitare il mirino, configurare azione automatica dopo la scansione e abilitare la visualizzazione dei suggerimenti o la copia del collegamento negli appunti.

Questa sezione configura accompagnamento sonoro, la vibrazione si attiva e disattiva. Il processo di registrazione delle azioni nel registro e di interazione con orologio intelligente Android Usura.

Quindi saremo in grado di esportare o importare copia di backup o fissare una data.

Consenti l'invio di dati anonimi (è meglio disabilitare), attiva la verifica del collegamento di sicurezza ricevuto durante la scansione o configura la scansione batch. Funzionalità come lo zoom o l'evidenziazione sono disponibili di seguito.

Ma le nostre impostazioni non finiscono qui. Oltre alle funzioni di cui sopra, abbiamo quanto segue:

  • impostazione dell'orientamento dello schermo;
  • lavorare con la fotocamera frontale;
  • analisi dei collegamenti;
  • esposizione dei negozi.
  • funzione di scorrimento estesa;
  • divieto di alcuni caratteri speciali;
  • attivazione anteprima WEB;
  • cercare le immagini salvate.

L'ultima schermata delle impostazioni contiene funzionalità interessanti come l'impostazione del numero massimo di posizioni, la configurazione di CSV personalizzati, lo scuotimento dello smartwatch e il salvataggio di posizioni duplicate.

Oltre alle impostazioni, nel menu QR Droid Code Scanner è presente una voce chiamata “Altro”. Consideriamo la sua funzionalità.

Ecco le seguenti possibilità:

Diamo un'occhiata all'ultima, ma non per questo meno funzionale, applicazione della nostra lista.

Scanner QR e codici a barre NeoReader

Questo programma, come altri, puoi scaricarlo e installarlo tramite Google Play o tramite collegamento diretto. Al termine, puoi procedere direttamente a lavorarci.

Al primo avvio dovremo soddisfare la richiesta di accesso. Fare clic su "CONSENTI".

Quindi apparirà una finestra delle impostazioni. Qui puoi scegliere una lingua, indicare il tuo paese, il sesso e l'età. Le due caselle di controllo seguenti consentono di abilitare o disabilitare l'accesso del programma ai geodati.

Puoi effettivamente iniziare la scansione. Punta la fotocamera sul codice QR e NeoReader QR & Barcode Scanner ne riconoscerà automaticamente il contenuto.

Pensiamo che questi tre programmi siano completamente sufficienti per chiunque. Scegli quello più conveniente per te e utilizzalo a tua discrezione. Parleremo di alcune caratteristiche dei dispositivi cinesi.

Funzionalità standard

Alcuni smartphone e tablet (a seconda della marca) dispongono di serie della funzionalità di scansione dei codici QR e tutto può essere fatto senza un'applicazione. Non li elencheremo tutti, toccheremo solo il modello di Xiaomi.

Riassumiamo

Di conseguenza, abbiamo imparato come scansionare un codice QR su Android diversi modi. Speriamo che l'articolo ti sia stato utile. Se hai ancora domande, chiedile nei commenti. Cercheremo di aiutare tutti.

Anche se ciò non accade, uno degli utenti del sito ti dirà sicuramente come uscire dalla situazione e ti darà consigli pratici. Tutto quello che devi fare è dargli vita.

Istruzioni video




Superiore