keyboard

Hogyan programozzak AVR chipet? Programozók beállításai...
Bascom nyelvű programok...
Avatar
evildodo
Pákabűvész
Hozzászólások: 213
Csatlakozott: 2009. február 4. szerda, 7:00

keyboard

Hozzászólás Szerző: evildodo »

Sziasztok!
Kicsit késő van, és most nem is jut eszembe semmi :) De, biztos megint én vagyok láma :oops: :oops:
Billentyűn(semmi mátrix, 12pin,12 key, normál bemenetek) bekérek 5 számot pl: egyes, négyes, hármas, ötös, kettes. Ebből hogyan lehetne tizennégyezer-hármoszázötvenkettőt csinálni? :)
egy ilyent már csináltam,

'E=egyes, d=tizes, c =szazas, B= ezres, A= tizezres
j= (1*e)+(10*d)+(100*c)+(1000*b)+(10000*a)

De ez bascomnak nem tetszik, és egy kicsit macerás is a karakterek törlése, mert ilyen gomb is lesz a keyboardon... Vagy esetleg másfelől kellene megközelíteni az ügyet? Kerestem bascom sample-t erre, de mindenhol csak a mártix...
Üdv
Geht nicht, Gibt's nicht!
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Hozzászólás Szerző: kapu48 »

A bascom egyszerre csak 1 műveletet tud elvégezni! (Kicsikét butácska szegény!)
De így működne:

Kód: Egész kijelölése

 'E=egyes, d=tizes, c =szazas, B= ezres, A= tizezres

Dim J As Long , E As Long , D As Long , C As Long , B As Long , A As Long , T As Long,
 J = E
 T = 10 * D
 J = J + T
 T = 100*c
 J = J + T
 T = 1000*b
 J = J + T
 T = 10000*a
 J = J + T
:)
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Hozzászólás Szerző: kapu48 »

De lehet kapni PS2-es numerikus padot. Én inkább azt használnák!
Könnyebb illeszteni, és nem hajítják ki az ablakon 1 év múlva, mint a fólia bilt mert már nem fog rendesen érintkezni!
Gugli keresés: -> numerikus pad ps2
:idea:
Avatar
kefeur
Tranzisztorgyógyász
Hozzászólások: 187
Csatlakozott: 2008. február 17. vasárnap, 7:00

Hozzászólás Szerző: kefeur »

Sziasztok .

Ps-2 billentyűvel próbálkoztam a minap , de sajna az összes változó megbolondult a lekérdezéskor.

Sőt mi több m, még a fix pwm kimenetem is változott a gombokat nyomkodva.
Timer1 léptetésével növelt változó is megbolondult .

A mintaprogramok sem müködnek .

Van már valakinek tapasztalata ezzel kapcsolatban ?
Kefeur
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Hozzászólás Szerző: kapu48 »

Ha nem látjuk a kódot semmi esélyünk a hiba megtalálására!
Esetleg kicsi a verem?
Itt 1 működő kód:

Kód: Egész kijelölése

$regfile = "M644def.dat"                                    'Chip

$crystal = 14745600                                         'Sebesseg
$baud = 19200
$swstack = 64
$hwstack = 64
$framesize = 40


'PS2Keyb
Config Keyboard = Pina.4 , Data = Pina.5 , Keydata = Keydata
Dim B As Byte

Do
  B = Getatkbd()
   If B > 0 Then
      Print "Code:" ; B ; " Character:" ; Chr(b)
  End If
   B = Getatkbdraw()
   Print "KBDRAW: " ; B
 Wait 2
Loop

End                                                         'end program

Keydata:
'normal keys lower case
'NO shifted keys UPPER 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
Avatar
kefeur
Tranzisztorgyógyász
Hozzászólások: 187
Csatlakozott: 2008. február 17. vasárnap, 7:00

Hozzászólás Szerző: kefeur »

Mintaprogiról van szó.

A led villogása is megfagy ha gombot nyomok a billentyűn.

Kód: Egész kijelölése

'----------------------------------------------------------------------------
'                PC AT-KEYBOARD Sample
'              (c) 2001-2003 MCS Electronics
'----------------------------------------------------------------------------
'For this example :
'connect PC AT keyboard clock to PIND.2 on the 8535
'connect PC AT keyboard data to PIND.4 on the 8535

$regfile = "m16def.dat"
$crystal = 8000000
Waitms 100
$baud = 19200
'The GetATKBD() function does not use an interrupt.
'But we use INT0 to handle it with interrupts
Config Portc = Output
Config Portd = Input
Set Portd
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0 , E = Portc.4 , Rs = Portc.5

'configure the pins to use for the clock and data
'can be any pin that can serve as an input
'Keydata is the label of the key translation table
Config Keyboard = Pind.2 , Data = Pind.6 , Keydata = Keydata
 Config Portd.7 = Output
'variables needed for the buffer
Const Bufsize = 10
Dim Buf As String * Bufsize , _rkbd As Byte , _wkbd As Byte , _ckbd As Byte

'we need int0 that gets triggered when there is a key pressed
On Int0 Isr0 Nosave
Enable Int0
Enable Interrupts

'Dim some used variables
Dim S As String * 12
Dim B As Byte

'In this example we use SERIAL(COM) INPUT redirection
$serialinput = Mykbd
 Cls
'Show the program is running
Lcd "hello"
Set Portd.7
Do
  'The following code is remarked but show how to use the GetATKBD() function
 '****** ettől lefagy**
   'B = Getatkbd()
  ' **************
                                         'get a byte and store it into byte variable
  'When no real key is pressed the result is 0
  'So test if the result was > 0
   If B > 0 Then
   Cls
      Lcd B ; Chr(b)
   End If
    Toggle Portd.7
  'The purpose of this sample was how to use a PC AT keyboard
  'The input that normally comes from the serial port is redirected to the
  'external keyboard so you use it to type

  ' the wait will demonstrate that it works on the background
  Wait 1
  'Input "Name " , S
  'and show the result
  'Print S
Loop
End


' this routine gets called when INPUT is used
'it expects the data in R24
Mykbd:
  lds r24,{_ckbd}                  ; get counter
  tst r24
  breq mykbd                      ;0 so test again

  dec r24                         ;adjust counter byte
  sts {_ckbd},r24                  ;store

  push r25                        ;save
  lds r25,{_rkbd}                  ;get read pointer
  Loadadr Buf , X
  add r26,r25
  clr r24
  adc r27,r24
  ld r24,x
  inc r25
  cpi r25,bufsize
  brne mykbd1
  clr r25
Mykbd1:
  sts {_rkbd},r25
  pop r25
Return

'Since we do a redirection we call the routine from the redirection routine
'
Isr0:
 'we come here when input is required from the COM port
 'So we pass the key into R24 with the GetATkbd function
' We need some ASM code to save the registers used by the function
$asm
 push r16           ; save used register
 push r25
 push r26
 push r27
 push r24
 in r24,sreg
 push r24

 rCall _getatkbd    ; call the function
 tst r24            ; check for zero
 breq Kbdinput1a    ; yes
 push r24
 lds r25,{_ckbd}    ; get byte counter
 inc r25
 sts {_ckbd},r25    ; save number of bytes in buffer
 lds r25,{_wkbd}    ; get write pointer
 Loadadr Buf , X
 add r26,r25        ; add pointer to it
 clr r24
 adc r27,r24
 pop r24
 st x,r24           ; save data in buffer

 inc r25            ; increase write buffer pointer
 cpi r25,bufsize    ; is it at the end?
 Brne kbdinput1
 clr r25
Kbdinput1:
 sts {_wkbd},r25    ; save write pointer
Kbdinput1a:
 pop r24
 !out sreg,r24
 pop r24
 pop r27            ; we got a valid key so restore registers
 pop r26
 pop r25
 pop r16
 $end Asm
 'just return
Return

B = Getatkbd()

'This is the key translation table

Keydata:
'normal keys lower case
Data 0 , 0 , 0 , 0 , 0 , 0 , 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

'shifted keys 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
Ez lenne az
Köszi a kódot kipróbálom
Kefeur
Avatar
kefeur
Tranzisztorgyógyász
Hozzászólások: 187
Csatlakozott: 2008. február 17. vasárnap, 7:00

Hozzászólás Szerző: kefeur »

Kipróbáltam a kódot , de sajna az sem jó valamiért. :oops:
Fura baromságokat kapok vissza .
Kétszer ugyanazon gomb lenyomása után , más-más értékeket kapok vissza .
Ráadásul semmi köze a lenyomott gombhoz.
Próbáltam num paddal is , sima ps-2 102 gombossal is .
Az eredmény lehangoló.
Gombnyomás után rengeteg idő eltelik mire valamit kiír , az is baromság .
Mit csináltam rosszul :?:

Kicsit átírtam Kapu48 kódját , de sajna nem jó.
a led (portd.7) villogása is leáll.

Itt a módosított kód.

Hátha valamit elnéztem (remélem) .

Tisztelettel kérem , nézzétek át .
Szeretném használni a Ps-2 billentyűt.

Kód: Egész kijelölése

 $regfile = "M16def.dat"                                    'Chip

$crystal = 8000000                                          'Sebesseg
$baud = 19200
$swstack = 64
$hwstack = 64
$framesize = 40
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0 , E = Portc.4 , Rs = Portc.5
 Cls
Config Portd.7 = Output
'PS2Keyb
Config Keyboard = Pind.2 , Data = Pind.6 , Keydata = Keydata
Dim B As Word

Do
Toggle Portd.7
  B = Getatkbd()
   If B > 0 Then
   Cls
      Lcd "Code:" ; B ; " :" ; Chr(b)
  End If
   B = Getatkbdraw()
   Lowerline
   Lcd "KBDRAW: " ; B
 Waitms 500
Loop

End                                                         'end program

Keydata:
'normal keys lower case
'NO shifted keys UPPER 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
Kefeur
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Hozzászólás Szerző: kapu48 »

Persze, hogy leáll a villogás!
A Getkbd() gombnyomásra vár, addig nem megy tovább!
Ha nem nyomsz bilt. Csak vár. :D
A hiba oka lehet rossz bekötés is. LCD-t, Billentyűt jól kötöttedbe?
Getkbd() Helyet B = 64 ’=A
Sorral mit írki? :?:
Avatar
herc1234
Bitfaragó
Hozzászólások: 459
Csatlakozott: 2007. február 9. péntek, 7:00

Hozzászólás Szerző: herc1234 »

Ez mondjuk elég vacak hogy Getatkbd()-re nem megy tovább...
Főleg akkor mi a fenének van a sample-ben do-loop until
közé téve?Különben meg van egy sample getatkbd_int néven
amiben konfigurálja az int0 isr0-nak és ott asm meghívja a
getatkbd()-t.Szerintem ennek kéne lennie a járandó útnak.
A sample csak kicsit meg van kavarva (egyre szarabb a help is
a sok asm-től)mer mahinál ott a COM-al.De én biztos kipróbálnám mit csinál akkor ha az int0 labelbe írnám:

Kód: Egész kijelölése

$regfile = "M16def.dat"                                     'Chip
$crystal = 8000000                                          'Sebesseg
$baud = 19200
$swstack = 64
$hwstack = 64
$framesize = 40
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0 , E = Portc.4 , Rs = Portc.5
Cls
Config Portd.7 = Output
Dim B As Byte

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

On Int0 Isr0
Enable Int0
Enable Interrupts

Do
Toggle Portd.7
If B > 0 Then
 Cls
 Lcd B
End If
Loop
End


Isr0:
B = Getatkbd()
Return

Keydata:
Data 0 , 0 , 0 , 0 , 0 , 0 , 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

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
valahogy igy pl...
Avatar
kefeur
Tranzisztorgyógyász
Hozzászólások: 187
Csatlakozott: 2008. február 17. vasárnap, 7:00

Hozzászólás Szerző: kefeur »

A bekötések jók , többször ellenőriztem.
Ha az isr0 ba írom a getatkbd()-t , akkor gombnyomásra odafagy a dolog.

Itt valami árulás van, nem kellene baromságokat kiírnia.
Ugyanarra a bill.re mindig más értéket vesz fel B.

Szerencsére rég futottam bele hasonló etetős dologba.
Talán írjam meg a lekezelését a bill. nek ?
8O
Kefeur
Avatar
herc1234
Bitfaragó
Hozzászólások: 459
Csatlakozott: 2007. február 9. péntek, 7:00

Hozzászólás Szerző: herc1234 »

Ja ezt néztem én is megáll a getatkbd()-re.
Mekkora egy vacak :-)
Avatar
kefeur
Tranzisztorgyógyász
Hozzászólások: 187
Csatlakozott: 2008. február 17. vasárnap, 7:00

Hozzászólás Szerző: kefeur »

Azt hiszem szét kapom a ps-2 num padot , és lessz belőle sima mátrix billentyű.
17 gomb van rajta . :lol:
Kefeur
Avatar
Theophrast
SzínkódFestő
Hozzászólások: 78
Csatlakozott: 2011. július 17. vasárnap, 6:00

Hozzászólás Szerző: Theophrast »

Nekem egy oyan kérdésem lenne a témához hogy a bascom a szabvány ps2-es billenytűzetet alapból képes kezelni?
vagy kell még hozzá valami könyvtár kiegészítésképp?
mert ahogy a mintaprogramokat nézegettem nem láttam semmi erre utaló említést, valamint a bascom bibliában sem találok róla semit.
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Hozzászólás Szerző: kapu48 »

Help > "CONFIG ATEMU" > "CONFIG KEYBOARD"

:arrow:
Avatar
Theophrast
SzínkódFestő
Hozzászólások: 78
Csatlakozott: 2011. július 17. vasárnap, 6:00

Hozzászólás Szerző: Theophrast »

Hohhó :)
s lőn világosság

köszönöm :P
Válasz küldése