Page 1 of 1

Lettura tastiera qwerty con bascom

PostPosted: 15 Sep 2012, 20:21
by quark30
salve,
avrei necessità di inserire dati (numeri e parole) in un programma utilizzando una piccola tastiera qwerty, tipo quella dei pc.
la scheda prevede la presenza di un lcd 20x2 + una tastiera qwerty italiana.
c'è un modo per interfacciarsi ai microcontrollori avr usando il bascom?
..........spero di si.. :oops:

ciao e grazie

Re: Lettura tastiera qwerty con bascom

PostPosted: 16 Sep 2012, 10:00
by flz47655
Ciao,
Da http://en.wikipedia.org/wiki/PS/2_connector il connettore PS/2 sembra interfacciabile senza problemi:

Data signal Serial data at 10 to 16 kHz with 1 stop bit, 1 start bit, 1 parity bit (odd)

Quindi non dovresti avere problemi di performance a ricevere dati dalla tastiera, devi cercare informazioni sul protocollo (che sembra comunque molto semplice) per concretizzare il tutto

Ciao

Re: Lettura tastiera qwerty con bascom

PostPosted: 16 Sep 2012, 10:13
by quark30
flz grazie dell'aiuto cmq
ma non è questa l'informazione che cerco...
so benissimo quali sono i segnali della tastiera ma quello che voglio sapere è se è possibile leggere ed interpretare i dati dei keycode da essa trasmessi con il bascom per poterli inserire in un programma come se scrivessi in un monitor. ok?

Re: Lettura tastiera qwerty con bascom

PostPosted: 16 Sep 2012, 10:41
by flz47655
Ciao,

alla domanda "c'è un modo per interfacciarsi ai microcontrollori avr usando il bascom?" la risposta è si

alla domanda "è possibile leggere ed interpretare i dati dei keycode da essa trasmessi con il bascom per poterli inserire in un programma come se scrivessi in un monitor" la risposta è si

Tutto è possibile (fermo restando i limiti prestazionali e di memoria), con il bascom hai un insieme funzionalmente completo di istruzioni e puoi realizzare qualunque funzione logica via sw.

Il problema è come fare, per questo ti consigliavo di studiare il protocollo (non è complicato) per poter capire come leggere i dati dei keycode.

Ciao

Re: Lettura tastiera qwerty con bascom

PostPosted: 16 Sep 2012, 11:17
by quark30
flz scusa ma perchè questi toni forti e sottolineati?
io sono qui per chiedere se e come si fa ad usare la tastiera utilizzando il bascom.
vorrei sapere se ci sono istruzioni già pronte all'uso per poterle utilizzare nel codice che sto scrivendo.

la mia domanda è :"c'è un modo per interfacciarsi ai microcontrollori avr usando il bascom?"
è chiaro che nella mia domanda è sottinteso "come si fa".

tu mi puoi aiutare?

Re: Lettura tastiera qwerty con bascom

PostPosted: 16 Sep 2012, 11:28
by Fagos
ciao
so che si può fare
se ho capito bene, bisogna innanzitutto configurare la porta dove è attaccata la tastiera, tipo:

Config Keyboard = Pind.2 , Data = Pind.4 , Keydata = Keydata

poi altro non saprei....

Re: Lettura tastiera qwerty con bascom

PostPosted: 16 Sep 2012, 12:52
by flz47655
Ciao,
Scusami non volevo "urlare" ma rendere più leggibile la risposta, forse ho esagerato però con le formattazioni (ho rimediato)
Istruzioni (librerie) già pronte non saprei.. innanzitutto se è una tastiera USB un adattatore USB->PS/2 potrebbe semplificarti la vita.

Ho letto che il protocollo è molto semplice da implementare e più che cercare qualcosa di già pronto volevo spingerti nella direzione un pò più impegnativa di capire come funziona il protocollo e e scrivere quindi del codice per interagire con la tastiera.

Provo a darti qualche informazione sul protocollo PS/2 (molto simile al protocollo seriale):
Quando si preme un tasto viene "movimentata" la linea del clock. Sui fronti di discesa del clock la linea dati rappresenta i bit del tasto che in tutto sono 11, il primo è uno zero, poi 8 bit del codice (LSB) poi il bit di parità (dispari) e infine il bit di stop (sempre 1).

Se hai già usato gli interrupt del micro potresti utilizzarli per rispondere alla pressione dei tasti lasciando libera la MCU di fare altri compiti quando nulla è stato premuto.

Hai ora un idea di come implementare il codice?
Per iniziare potresti implementare il codice senza interrupt per poi migliorarlo con gli interrupt, se proprio non hai ancora idee prova a vedere una possibile implementazione http://nocommercialpotential.posterous. ... 2-keyboard che anche se non è bascom puoi considerare come pseudo-codice

Trovi maggiori informazioni sul protocollo al link http://www.computer-engineering.org/ps2keyboard/

Se hai molta fretta purtroppo devi aspettare che qualcuno posti del codice già pronto

Ciao

Re: Lettura tastiera qwerty con bascom

PostPosted: 18 Sep 2012, 10:49
by quark30
ciao ragazzi,
sono ancora alle prese di questa applicazione e sto tentando varie strade per arrivare alla meta.
ho studiato il protocollo ma la cosa mi sembra complessa....
purtroppo non resco a capire come leggere i dati dalla tastiera dopo aver configurato la connessione.
devo abilitare interrupt o cosa?
come faccio a realizzare la corrispondenza tra i codici prelevati dalla seriale PS2 e i caratteri ascii?

qualcuno potrebbe darmi una mano?
grazie tante

Re: Lettura tastiera qwerty con bascom

PostPosted: 20 Sep 2012, 08:23
by deluca
@quark30, ciao
non so se allegandoti il codice ti aiuto,
cmq prendilo come spunto per le tue prossime applicazioni
esso è configurato per un atmega328p, quello di arduino uno per interderci....
In questo esempio i dati dalla tastiera qwert vengono convertiti in caratteri ascii e reindirizzati sulla la seriale.

NB. Una porzione di codice è scritta in assembly per ottimizzare il codice di intercettazione dei tasti premuti.
Al pind.2 del micro va il clock della tastiere, mentre al pind.3 va il data.

Code: Select all
'*******************************************************************************
'  programma per interfacciare una tastiera PS2 e reindirizzarla sulla seriale
'  ------------------------
'  autore: Giovanni De Luca - INFN-LNS
'*******************************************************************************
$regfile = "m328pdef.dat"
$crystal = 16000000
$hwstack = 32
$swstack = 32
$framesize = 32
$baud = 115200

Config Keyboard = Pind.2 , Data = Pind.3 , Keydata = Keydata

Dim S As String * 50
Dim B As Byte

'in questo esempio la tastiera viene reindirizzata sulla seriale
$serialinput = Kbdinput

Print "PS2 Keyboard test"
'----------------------------[ main ]-------------------------------------------
Do

  Input "Name: " , S
  Print S
  'aspetta F1 per uscire dal loop
  Do
    B = Getatkbd()
  Loop Until B <> 0

Loop
End
'-------------------------------------------------------------------------------
Kbdinput:
$asm
 push r16            ; save used register
 push r25
 push r26
 push r27

Kbdinput1:
 rCall _getatkbd     ; Call the Function
 tst r24             ; check For zero
 breq Kbdinput1      ; yes so try again
 pop r27             ; we got a valid key so Restore registers
 pop r26
 pop r25
 pop r16
 $end Asm
Return

B = Getatkbd()
'-------------------------------------------------------------------------------
Keydata:
'codici Tasti normali lower case
Data 0 , 0 , 0 , 0 , 0 , 200 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , &H5E , 0
Data 0 , 0 , 0 , 0 , 0 , 113 , 49 , 0 , 0 , 0 , 122 , 115 , 97 , 119 , 50 , 0
Data 0 , 99 , 120 , 100 , 101 , 52 , 51 , 0 , 0 , 32 , 118 , 102 , 116 , 114 , 53 , 0
Data 0 , 110 , 98 , 104 , 103 , 121 , 54 , 7 , 8 , 44 , 109 , 106 , 117 , 55 , 56 , 0
Data 0 , 44 , 107 , 105 , 111 , 48 , 57 , 0 , 0 , 46 , 45 , 108 , 48 , 112 , 43 , 0
Data 0 , 0 , 0 , 0 , 0 , 92 , 0 , 0 , 0 , 0 , 13 , 0 , 0 , 92 , 0 , 0
Data 0 , 60 , 0 , 0 , 0 , 0 , 8 , 0 , 0 , 49 , 0 , 52 , 55 , 0 , 0 , 0
Data 48 , 44 , 50 , 53 , 54 , 56 , 0 , 0 , 0 , 43 , 51 , 45 , 42 , 57 , 0 , 0

'codici Tasti shiftati UPPER case
Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0
Data 0 , 0 , 0 , 0 , 0 , 81 , 33 , 0 , 0 , 0 , 90 , 83 , 65 , 87 , 34 , 0
Data 0 , 67 , 88 , 68 , 69 , 0 , 35 , 0 , 0 , 32 , 86 , 70 , 84 , 82 , 37 , 0
Data 0 , 78 , 66 , 72 , 71 , 89 , 38 , 0 , 0 , 76 , 77 , 74 , 85 , 47 , 40 , 0
Data 0 , 59 , 75 , 73 , 79 , 61 , 41 , 0 , 0 , 58 , 95 , 76 , 48 , 80 , 63 , 0
Data 0 , 0 , 0 , 0 , 0 , 96 , 0 , 0 , 0 , 0 , 13 , 94 , 0 , 42 , 0 , 0
Data 0 , 62 , 0 , 0 , 0 , 8 , 0 , 0 , 49 , 0 , 52 , 55 , 0 , 0 , 0 , 0
Data 48 , 44 , 50 , 53 , 54 , 56 , 0 , 0 , 0 , 43 , 51 , 45 , 42 , 57 , 0 , 0
'-------------------------------------------------------------------------------

fammi sapere.

Re: Lettura tastiera qwerty con bascom

PostPosted: 21 Sep 2012, 18:12
by quark30
cioè deluca sei proprio grande !!!!
grazie per il codice non so come ringraziarti, spero un giorno potrò ricambiare.
era proprio quello che mi interessava trasformare la tastiera qwerty in un codificatore ascii via uart.
penso dovrò fare qualche piccola modifica ma per il resto mi sembra troppo perfetto.
adesso provo a montare il tutto, compilo programmo e ti faccio sapere quanto prima.

grazieeee veramente tanto
ciao