Aktualności: C64 Power - online od stycznia 2000 !

Autor Wątek: Konwerter klawiatury AT PS/2 dla C64  (Przeczytany 1955 razy)

0 użytkowników i 1 Gość przegląda ten wątek.

Offline Term

  • Level 1
  • *
  • Wiadomości: 49
Konwerter klawiatury AT PS/2 dla C64
« dnia: 21 Maja 2017, 00:12 »
Witam Ponownie.

Jak wspomniałem w tym temacie próbuje "dorobić" przejściówkę: klawiatura AT PS/2 podłączana do złącza klawiatury w C64 na Attiny2313.
No cóż... Lipa wyszła. Dlatego proszę o pomoc. :)

Do autora tematu poleconego przez kolegę @StaryMarabut http://c64power.com/forumng/index.php?topic=7027.0 napisałem PM, lecz zdaję sobie sprawę, że "rzecz" raczej już nieaktualna od ponad roku.

Mój niechlujny i lamerski kod (BASCOM) wygląda tak:
'opis patrz nizej...


' przejsciowka PS/2 AT do C64 keyboard interface

'1. prawdopodobnie 6526 trzyma normalnie na pa7 low (chyba ze przalacza pot z gniazd joy lub stan niski na ktoryms z"rzedow")
'wiec jezeli na zadnej pa0 do pa6 nie ma low to znaczy ze "skanowana" jest pa7
'
'!!! W finalnej wersji zmienic Fuse BIta od RESET !!!
'
'Problemy do rozwiazania:
'1. wiadomo jaki :/
'2. Klawisze z shiftem
'3. wcisniecie kilku klawiszy na raz (pp. GetAtKbdRaw pomoze)



$regfile = "attiny2313a.dat"
$crystal = 8000000
$baud = 9600


'$prog &HFF , &HE4 , &HDF , &HFF                             ' generated. Take care that the chip supports all fuse bytes.




  Config Portb = Output                                     'rzędy  od 0 do 7  np. rząd0 pinb.0 czyli rzad1 pinb.1 (pb0-pb7) | pin12(złącze klawiatury) row0 > pin5 row7
                                                             'rzedy w tabeli keydata wpisywane sa +1 czyli rzad 2 wpisany jest jako 3
  Config Porta.0 = Input                                    'kolumna h7 pin(zlacze klawiatury) 13
  Config Porta.1 = Input                                    'kolumna g6 pin(zlacze klawiatury) 14
  Config Porta.2 = Input                                    'kolumna f5.pin(zlacze klawiatury) 15
                                                              '.
  Config Portd.0 = Input                                    'kolumn e4 pin(zlacze klawiatury) 16

  Config Portd.1 = Output                                   'Odkomentowac W Finalnej Wersji Bedzie To Restore

  Config Portd.2 = Input                                    'kolumna d3 pin(zlacze klawiatury) 17
  Config Portd.5 = Input                                    'kolumna c2 pin(zlacze klawiatury) 18
  Config Portd.6 = Input                                    'kolumna b1 pin(zlacze klawiatury) 19
                                                               'kolumny podobnie jak rzedy + 1 czyli kolumna c2 to kolumna 3 pind.5
                                                               'kolumna a0 pin(zlacze klawiatury) 20 jezeli na ktorymkolwiek z powyzszych stan 1 to kolumna H aktywna

Rzedy Alias Portb

'Kol.0 Alias 0 'to kolumna zadna z powyzszych
K1 Alias Portd.6
K2 Alias Portd.5
K3 Alias Portd.2
K4 Alias Portd.0
K5 Alias Porta.2
K6 Alias Porta.1
K7 Alias Porta.0

Rest Alias Portd.1


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







Rzedy = 255

'Portb.0 = 1                                                 'ustaw 1 na wyjściach rzędów
'Portb.1 = 1
'Portb.2 = 1
'Portb.3 = 1
'Portb.4 = 1
'Portb.5 = 1
'Portb.6 = 1
'Portb.7 = 1

'Porta.0 = 1                                                 'ustaw 1 na kolumnach A, B, C
'Porta.1 = 1
'Porta.2 = 1
'Portd.0 = 1                                                 ' ustaw 1 na kolumnach D-H
'Portd.1 = 1                                                 '  odkomentowac w finalnej wersji bedzie to RESTORE
'Portd.2 = 1
'Portd.5 = 1
'Portd.6 = 1





Dim A As Word , B As Byte                                   'pomocnicze



Dim Klawisz As Byte , Nr As Byte , Nk As Byte , Rzad As Byte       '"Nr" - numer rzedu, "Nk" - numer kolumny, "Rzad" - bajt ustawiany na porcie rzedow
Dim Cps As Bit                                              'Cps - stan caps lock (shift lock)

Cps = 0


Do

   Do                                                       'odczyt klawiatury + czeka na zwrocenie wartosci z taklicy keydata <>0

      Klawisz = Getatkbd()
'     If Klawisz = 0 Then
'     Rzedy = 255
'     End If
   Loop Until Klawisz <> 0

' Klawisz = 56                                               ' zakomentowac w pelnej wersji - linia do testowania

If Klawisz = 42 Then Toggle Cps

Nr = Klawisz / 10                                           'rozbicie na rzedy
Nr = Nr - 1                                                 '-1 patrz dlacego w opisie
Nk = Klawisz Mod 10                                         'rozbicie na kolumny
Nk = Nk - 1                                                 '-1 patrz opis ponizej


Rzad = Lookup(nr , Dr)                                      ' odczytaj wartosc z pozycji "rzad" tabeli "dr"


'Print Bin(klawisz) ; " wartosc " ; Rzad ; " " ; Nr ; " " ; Nk ; ""       ' zakomentowac w pelnej wersji - linia do testowania zmiennych



     If Cps = 0 Then
      Gosub Lowerkeys                                       'problem caps locka do rozwiazania moze nie trza 2 subów robic...
     Else
      Gosub Upperkeys
     End If

    Waitms 5                                                ' czas przytrzymania stanu na rzedach
    Rzedy = 255                                             ' ustaw 1 na wszystkich rzedach



Loop



Lowerkeys:

Select Case Nk

  Case 0
  'Do : Loop Until K1 = 1 And K2 = 1 And K3 = 1 And K4 = 1 And K5 = 1 And K6 = 1 And K7 = 1
  Rzedy = Rzad
  Case 1
  Do : Loop Until K1 = 0
'Waitus 10
  Rzedy = Rzad
  Case 2
  Do : Loop Until K2 = 0
'Waitus 10
  Rzedy = Rzad
  Case 3
  Do : Loop Until K3 = 0
'Waitus 10
  Rzedy = Rzad
  Case 4
  Do : Loop Until K4 = 0
'Waitus 10
  Rzedy = Rzad
  Case 5
  Do : Loop Until K5 = 0
'Waitus 10
  Rzedy = Rzad
  Case 6
  Do : Loop Until K6 = 0
'Waitus 10
  Rzedy = Rzad
  Case 7
  Do : Loop Until K7 = 0
'Waitus 10
  Rzedy = Rzad
  Case 255 And Nr = 0
   Rest = 0
  Waitus 50
    Rest = 1


 End Select





'A = 0
'Do                                                          'pewnie bedzie wygladala inaczej raczej dojda wait....
'A = A + 2

'     If Nk = 1 Then
'     Do ; Until K1 = 0
'     Rzedy = Rzad
'     Return
'     End If
'     If K2 = 0 And Nk = 2 Then
'     Rzedy = Rzad
'    Return
'     End If
'     If K3 = 0 And Nk = 3 Then
'     Rzedy = Rzad
'   Return
'     End If
'     If K4 = 0 And Nk = 4 Then
'     Rzedy = Rzad
'  Return
'     End If
'     If K5 = 0 And Nk = 5 Then
'     Rzedy = Rzad
'   Return
'     End If
'     If K6 = 0 And Nk = 6 Then
'     Rzedy = Rzad
'   Return
'     End If
'     If K7 = 0 And Nk = 7 Then
'     Rzedy = Rzad
'    Return
 '    End If

 '    If Nk = 0 Then : Rzedy = Rzad
 '    'A = 1
 '    End If

 '    If Nk = 255 And Nr = 0 Then                            'RESTORE - poprawic i odkomentowac
 '    Rest = 0
 '    Waitus 50
 '    Rest = 1
 '    Else
 '    Rest = 1
 '    End If

     'Waitus 20

'Loop Until A = 1 Or A = 42                                  'zakoncz petle po wykryciu kolumny lub 20 powtorzeniach

Return

Upperkeys:

'A = 0
'Do                                                          'pewnie bedzie wygladala inaczej raczej dojda wait....
'A = A + 2

'If K1 = 0 Then : Rzedy = 239 : End If                       'problem caps locka do rozwiazania
A = 0
Do

     If K7 = 0 And Nk = 7 Then
     Rzedy = Rzad
     'A = 1
     End If
     If K6 = 0 And Nk = 6 Then
     Rzedy = Rzad
     'A = 1
     End If
     If K5 = 0 And Nk = 5 Then
     Rzedy = Rzad
     'A = 1
     End If
     If K4 = 0 And Nk = 4 Then
     Rzedy = Rzad
     'A = 1
     End If
     If K3 = 0 And Nk = 3 Then
     Rzedy = Rzad
     'A = 1
     End If
     If K2 = 0 And Nk = 2 Then
     Rzedy = Rzad
     'A = 1
     End If
     If K1 = 0 And Nk = 1 Then
     Rzedy = Rzad
     'A = 1
     End If
 A = A + 1
Loop Until A = 10

     If Nk = 0 Then : Rzedy = Rzad
     'A = 1
     End If

     If Nk = 255 And Nr = 0 Then                            'RESTORE - poprawic i odkomentowac
     Rest = 0
     Waitus 50
     Rest = 1
     Else
     Rest = 1
     End If

     'Waitus 20

'Loop Until A = 1 Or A = 42                                  'zakoncz petle po wykryciu kolumny lub 20 powtorzeniach

Return

'------------------------------------------------------------------------------------------------

'Dane rzedow - rzedy od 0 do 7 np. dec127 = byte0111 1111
Dr:
'Data 127 , 191 , 223 , 239 , 247 , 251 , 253 , 254
Data 254 , 253 , 251 , 247 , 239 , 223 , 191 , 127

'mapa klawiatury  rzedami   - wybrana pozycja 0111 1111, 1011 1111


'------------------------------------------------------------------------------------------------

'Dane kolumn t.j. poukladane porty od 0 do 7
'Dk:
'Data 0 , "K1" , "K2" , "K3" , "K4" , "K5" , "K6" , "K7"


'------------------------------------------------------------------------------------------------

'talica znakow    zapisana rzad kolumna np. 34  rzad 2 kolumna a3
Keydata:

'normal keys lower case

Data 0 , 58 , 0 , 0 , 0 , 0 , 0 , 88 , 0 , 68 , 0 , 0 , 0 , 31 , 21 , 0
Data 0 , 41 , 42 , 0 , 61 , 71 , 11 , 0 , 0 , 0 , 52 , 62 , 32 , 22 , 81 , 0
Data 0 , 53 , 43 , 33 , 72 , 82 , 12 , 0 , 0 , 51 , 44 , 63 , 73 , 23 , 13 , 0
Data 0 , 45 , 54 , 64 , 34 , 24 , 83 , 0 , 0 , 0 , 55 , 35 , 74 , 14 , 84 , 0
Data 0 , 46 , 65 , 25 , 75 , 85 , 15 , 0 , 0 , 56 , 47 , 36 , 66 , 26 , 16 , 0
Data 0 , 0 , 37 , 0 , 76 , 86 , 0 , 0 , 42 , 57 , 28 , 27 , 0 , 67 , 0 , 0
Data 0 , 0 , 0 , 0 , 0 , 0 , 17 , 0 , 0 , 10 , 0 , 0 , 18 , 0 , 0 , 0
Data 87 , 77 , 48 , 0 , 38 , 0 , 0 , 0 , 78 , 0 , 0 , 0 , 0 , 0 , 0 , 0



'shifted keys UPPER case

Data 0 , 58 , 0 , 0 , 0 , 0 , 0 , 88 , 0 , 68 , 0 , 0 , 0 , 31 , 21 , 0       '16
Data 0 , 41 , 42 , 0 , 61 , 71 , 11 , 0 , 0 , 0 , 52 , 62 , 32 , 22 , 81 , 0       '32
Data 0 , 53 , 43 , 33 , 72 , 82 , 12 , 0 , 0 , 51 , 44 , 63 , 73 , 23 , 13 , 0       '48
Data 0 , 45 , 54 , 64 , 34 , 24 , 83 , 0 , 0 , 0 , 55 , 35 , 74 , 14 , 84 , 0       '64
Data 0 , 46 , 65 , 25 , 75 , 85 , 15 , 0 , 0 , 56 , 47 , 36 , 66 , 26 , 16 , 0       '80
Data 0 , 0 , 37 , 0 , 76 , 86 , 0 , 0 , 42 , 57 , 28 , 27 , 0 , 67 , 0 , 0       '96
Data 0 , 0 , 0 , 0 , 0 , 0 , 17 , 0 , 0 , 10 , 0 , 0 , 18 , 0 , 0 , 0       '112
Data 87 , 77 , 48 , 0 , 38 , 0 , 0 , 0 , 78 , 0 , 0 , 0 , 0 , 0 , 0 , 0       '128

'przypisanie klawiszy c64 - atkeyb - kod getatkbd (hex) - rzad kolumna C64

'c64 key       AT key    scancode    table position Keydata     (rzad/kolumna)+1
'left arrow    - "`"       - 0e        - 15                          - 21
'1             - "1"       - 16        - 23                          - 11
'2             - "2"       - 1e        - 31                          - 81
'3             - "3"       - 26        - 39                          - 12
'4             - "4"       - 25        - 38                          - 82
'5             - "5"       - 2E        - 47                          - 13
'6             - "6"       - 36        - 55                          - 83
'7             - "7"       - 3D        - 62                          - 14
'8             - "8"       - 3E        - 63                          - 84
'9             - "9"       - 46        - 71                          - 15
'0             - "0"       - 45        - 70                          - 85
'+             - "-"       - 4E        - 79                          - 16
'-             - "="       - 55        - 86                          - 86
'Funt          - "BkSp"    - 66        - 103                         - 17
'crl/home      - "Insert"  - 70        - 113                         - 87
'inst/del      - "Home"    - 6C        - 109                         - 18

'control       - "Tab"     - 0D        - 14                          - 31
'Q             - "Q"       - 15        - 22                          - 71
'W             - "W"       - 1D        - 30                          - 22
'E             - "E"       - 24        - 37                          - 72
'R             - "R"       - 2D        - 46                          - 23
'T             - "T"       - 2C        - 45                          - 73
'Y             - "Y"       - 35        - 54                          - 24
'U             - "U"       - 3C        - 61                          - 74
'I             - "I"       - 43        - 68                          - 25
'O             - "O"       - 44        - 69                          - 75
'P             - "P"       - 4D        - 78                          - 26
'@             - "["       - 54        - 85                          - 76
'*             - "]"       - 5B        - 92                          - 27
'arrow up      - "Del"     - 71        - 114                         - 77
'RESTORE       - "End"     - 69        - 106                         - 10 osobne wyjście attiny

'run/stop      - "L Alt"   - 11        - 18                          - 41
'shift lock    - "CpsLck"  - 58        - 89                          - 42
'A             - "A"       - 1C        - 29                          - 32
'S             - "S"       - 1B        - 28                          - 62
'D             - "D"       - 23        - 36                          - 33
'F             - "F"       - 2B        - 44                          - 63
'G             - "G"       - 34        - 53                          - 34
'H             - "H"       - 33        - 52                          - 64
'J             - "J"       - 3B        - 60                          - 35
'K             - "K"       - 42        - 67                          - 65
'L             - "L"       - 4B        - 76                          - 36
':             - ";"       - 4C        - 77                          - 66
';             - "'"       - 52        - 83                          - 37
'=             - "\"       - 5D        - 94                          - 67
'RETURN        - "Enter"   - 5A        - 91                          - 28

'COMMODORE     - "L Ctr"   - 14        - 21                          - 61
'shift LEFT    - "L Shift" - 12        - 19                          - 42
'Z             - "Z"       - 1A        - 27                          - 52
'X             - "X"       - 22        - 35                          - 43
'C             - "C"       - 21        - 34                          - 53
'V             - "V"       - 2A        - 43                          - 44
'B             - "B"       - 32        - 51                          - 54
'N             - "N"       - 31        - 50                          - 45
'M             - "M"       - 3A        - 59                          - 55
',             - ","       - 41        - 66                          - 46
'.             - "."       - 49        - 74                          - 56
'/             - "/"       - 4A        - 75                          - 47
'shift RIGHT   - "R Shift" - 59        - 90                          - 57
'crs UP/DWN    - "D Arrow" - 72        - 115                         - 48
'crs LFT/RIGHT - "R Arrow" - 74        - 117                         - 38

'SPACE         - "SPACE"   - 29        - 42                          - 51

'F1/F2         - "F9"      - 01        - 02                          - 58
'F3/F4         - "F10"     - 09        - 10                          - 68
'F5/F6         - "F11"     - 78        - 121                         - 78
'F7/F8         - "F12"     - 07        - 08                          - 88

Schemat: 

Schemat klawiatury C64:


Działanie programu w skrócie:
1. czekaj na wciśnięcie klawisza i pobierz jego kod;
2. zdekoduj Nr rzędu i kolumny z tabeli;
3. czekaj aż na zdekodowanej kolumnie będzie stan 0 i w tym momencie ustaw 0 na zdekodowanym rzędzie
4. odczekaj określony czas
5. ustaw stan jeden na wszystkich rzędach
6. wróć do pk.1

Jak widać powyżej nie mam prawie żadnego doświadczenia z uC.
Jest to oczywiście wersja bardzo testowa, stąd np. rozbicie Lowerkeys - "CASE" i Upperkeys - "IF" (pozwala sprawdzić 2 możliwości za 1 zamachem ;p).
Przepraszam, ale kod musiałem wstawić inaczej pisałbym o niczym.... Oczywiście nie ponoszę żadnej odpowiedzialności za wykorzystanie...  :P :D

Trochę to działa t.j. zależnie od ustawienia "WAITMS"  (czas przytrzymania stanu na rzedach) - przy długim czasie mamy zapis wierszy głównie do kolumny A, przy krótkim i przytrzymaniu klawisza czasami "trafiamy" w inną kolumnę... Innymi słowy - najlepiej działa spacja :D

We wspomnianym wyżej temacie kolega @Kisiel napisał:
Witam
Zastanawia mnie kwestia emulowania klawiatury dla C64/128. O ile dobrze pamiętam, to były tam jakieś numery ze stanami logicznymi (to jest zwykła klawiatura multipleksowana), i nawet w którymś projekcie zastosowano matrycę łączników CMOS aby to ominąć. A ATMega jak to emuluje? Wykrywa kiedy linia jest wybierana i generuje wtedy sygnał wiersza?
A to akurat proste, masz bodaj siedem cykli procesora 6502 na odpowiedź , w tym czasie na przerwaniu wystawiasz wartość odpowiedzi.
Ja to zrobiłem na MSP430 plus level. Kolejny niedokończony projekt :)
- rozumiem, że "wykładam" się na "...w przerwaniu...", choć nie do końca wiem o co chodzi.

W przypadku "Lowerkeys" (CASE) na pewno wykrywany jest stan niski na lini danej kolumny gdyż program kontynuuje działanie - pobiera kolejny wciśnięty klawisz.

Bardzo proszę o pomoc, bo poległem:
- nie jestem leniem - start projektu praktycznie od 0 i ok. 200 przetestowanych wersji tegoż programiku;
- wiem, że niewiele wiem - dlatego proszę o pomoc;
- wiem, że próbuje zrobić "coś" z "niczego" - wydaje mi się, że nie ma sensu strzelanie do komarów z armaty (analog switch + "duży" procek);
- bardzo przepraszam za ortografy i inne błędy - nie mam wytłumaczenia, moja wina.

Na czym mi zależy (wymieniłem w komentarzu do programu, ale powtórzę):
1. możliwość zmiany keymapy + rozszerzenia np.: osobno traktowane klawisze F1 do F7 (czyli po wciśnięciu na klawiaturze F7 C64 dostaje Shift+F6);
2. wykrywanie wciśnięcia więcej niż 1 klawisza;
3. obsługa CapsLocka jako ShiftLocka (również dioda LED na klawiaturze).

Może jednak uśmiechnąć się do Atmegi88P (więcej pinków) - wyłączanie Reset jest jednak uciążliwe pomimo Fuse Bit Doctora - przy testach nie podłączam tej linii.

Tak czy inaczej, jeszcze raz prosząc o pomoc pozdrawiam. :)
« Ostatnia zmiana: 21 Maja 2017, 00:21 wysłana przez Term »



Offline rs2322

  • Level 5
  • *****
  • Wiadomości: 540
  • ASAP
Re: Konwerter klawiatury AT PS/2 dla C64
« Odpowiedź #1 dnia: 21 Maja 2017, 10:16 »
Jak bedzie nieaktulne to sam napisze, jak najbardziej jest aktualna, nie mam czasu na publikacje w chwili obecnej, ponadto projekt był przygotowany dla gosci z forum .de i z uwagi na pewne ustalenia zbytnio nie rozchwalam tego cuda (zrobi sie konkurencja) i pewne osoby moga sie zagotować na czym mi nie zależy.

Ponadto moje pytanie, po co podłaczac klawiat z PC do C64 ? akurat klawiatru do C64 nie brakuje zatem jaki sens ma takie szycie ?
« Ostatnia zmiana: 21 Maja 2017, 10:25 wysłana przez rs2322 »
Pamięci RAM każda ilość: KM4164, 4464, TMS 4464 MT1259-10
PCB - projekty na zamówienie.
Programowanie pamięci EEPROM, EPROM - free !
SD2IEC http://c64power.com/forumng/index.php?topic=6630.0

Offline dhg

  • Level 4
  • ****
  • Wiadomości: 459
  • god, root, i don't see any difference...
Re: Konwerter klawiatury AT PS/2 dla C64
« Odpowiedź #2 dnia: 21 Maja 2017, 10:49 »
Jak bedzie nieaktulne to sam napisze, jak najbardziej jest aktualna, nie mam czasu na publikacje w chwili obecnej, ponadto projekt był przygotowany dla gosci z forum .de i z uwagi na pewne ustalenia zbytnio nie rozchwalam tego cuda (zrobi sie konkurencja) i pewne osoby moga sie zagotować na czym mi nie zależy.

Ponadto moje pytanie, po co podłaczac klawiat z PC do C64 ? akurat klawiatru do C64 nie brakuje zatem jaki sens ma takie szycie ?

Takie szycie może mieć zatosowanie w jakimś c64 upchanym w inną obudowę niż oryginalna. Po upchaniu mobo odpada konieczność przedłużania kabla i kombinowania obudowy do klawy. Wygoda panie, wygoda. No i klawa at/ps2 jest dużo tańsza i łatwiej dostępna

10?"DHG
20GOTO10
RUN

Offline rs2322

  • Level 5
  • *****
  • Wiadomości: 540
  • ASAP
Re: Konwerter klawiatury AT PS/2 dla C64
« Odpowiedź #3 dnia: 21 Maja 2017, 10:54 »
No nie wiem, klawiat do c64 kupisz za 20 - 30zł, jak pakujsz plyte z C64 np. do obudowy AT/ATX PC to i tak zostaje do wykorzystania obudowa po C64 z klawiatura i nie trzeba nic robić poza przewodem, widziałem wiele takich projektów np. vanessa i zawsze tak to robili nikt sie nie bawił w klawiatury od PC ale jak ktoś lubi to czemu nie, ponadto dla klawiatry z PC potrzeba jeszcze chyba naklejki na klawisze co sie dodatkowo komplikuje - chyba ze to ma udawac PC :p
Pamięci RAM każda ilość: KM4164, 4464, TMS 4464 MT1259-10
PCB - projekty na zamówienie.
Programowanie pamięci EEPROM, EPROM - free !
SD2IEC http://c64power.com/forumng/index.php?topic=6630.0

Offline dhg

  • Level 4
  • ****
  • Wiadomości: 459
  • god, root, i don't see any difference...
Re: Konwerter klawiatury AT PS/2 dla C64
« Odpowiedź #4 dnia: 21 Maja 2017, 11:06 »
Sam przedłużałem upychając 64 w bude od blaszaka. Do dziś pamiętam ten gruby i sztywny kabel. Mam nawet skróconą obudowę klawiatury po tej herezji. W każdym razie  każdy nowy dodatek do c64 może okazać sie przydatny do jakichś celów. Wszystko zależy od tego co autor miał na myśli :)

10?"DHG
20GOTO10
RUN

Offline Term

  • Level 1
  • *
  • Wiadomości: 49
Re: Konwerter klawiatury AT PS/2 dla C64
« Odpowiedź #5 dnia: 21 Maja 2017, 22:10 »
... i pewne osoby moga sie zagotować ....
Heh przecież to tylko interfejs do klawiatury, a nie patent na Nagre,  ;D ale nie wnikam, powody mnie nie interesują ważne, że aktualne.  8)

...jaki sens ma takie szycie ?

Takie szycie może mieć zatosowanie w jakimś c64 upchanym w inną obudowę niż oryginalna. Po upchaniu mobo odpada konieczność przedłużania kabla i kombinowania obudowy do klawy. Wygoda panie, wygoda.
Dokładnie tak w 99%. :)

No nie wiem, klawiat do c64 kupisz za 20 - 30zł, jak pakujsz plyte z C64 np. do obudowy AT/ATX PC to i tak zostaje do wykorzystania obudowa po C64 z klawiatura i nie trzeba nic robić poza przewodem, widziałem wiele takich projektów np. vanessa i zawsze tak to robili nikt sie nie bawił w klawiatury od PC ale jak ktoś lubi to czemu nie, ponadto dla klawiatry z PC potrzeba jeszcze chyba naklejki na klawisze co sie dodatkowo komplikuje - chyba ze to ma udawac PC :p
Nie zostanie obudowa, bo jej nie ma - Commodorek, a właściwie płyta, odratowany ze shrotu. Chciałbym go wstawić do obudowy al'a tower niekoniecznie od PC raczej coś z drewna - wyprowadzone złącza, wbudowany PSU i SD2IEC i co tam się zmieści, ale w taki sposób by całość była "rozbieralna".

Mam klawiatury od kas fiskalnych (mechaniczne) i można by z tego zrobić dość fajną klawiaturkę do 64, ale nadal pozostaje w/w kwestia 18 żyłowego druta...

Btw. W przerobionej obudowie od blaszaka (CD zamontowane na górze) mam Amigę CD32 + SX1 i też jakieś problemy z klawiaturą AT występowały. Bodajże obszedłem opóźnieniem startu lub Reset na 555 - dokładnie nie pamiętam, ale działa do dziś i nadal cieszy. :)

Offline rs2322

  • Level 5
  • *****
  • Wiadomości: 540
  • ASAP
Re: Konwerter klawiatury AT PS/2 dla C64
« Odpowiedź #6 dnia: 21 Maja 2017, 23:14 »
Ja gdybym cos takiego robił to bezprzewodowa klawiature bym dodał, co za roznica czy przewód bedzie miał 20 zył czy 4 zyly, lepiej jak by go nie bylo wcale :) po co sie ograniczac.
Pamięci RAM każda ilość: KM4164, 4464, TMS 4464 MT1259-10
PCB - projekty na zamówienie.
Programowanie pamięci EEPROM, EPROM - free !
SD2IEC http://c64power.com/forumng/index.php?topic=6630.0

Offline dhg

  • Level 4
  • ****
  • Wiadomości: 459
  • god, root, i don't see any difference...
Re: Konwerter klawiatury AT PS/2 dla C64
« Odpowiedź #7 dnia: 22 Maja 2017, 07:22 »
Ja gdybym cos takiego robił to bezprzewodowa klawiature bym dodał, co za roznica czy przewód bedzie miał 20 zył czy 4 zyly, lepiej jak by go nie bylo wcale :) po co sie ograniczac.

W sumie..
Nrf24l01 z odpowiednim wsadem + konwerter napięć + arduino promini i można sobie klawke na 2.4GHz podpinać :)

10?"DHG
20GOTO10
RUN

Offline Term

  • Level 1
  • *
  • Wiadomości: 49
Re: Konwerter klawiatury AT PS/2 dla C64
« Odpowiedź #8 dnia: 22 Maja 2017, 19:31 »
Ja gdybym cos takiego robił to bezprzewodowa klawiature bym dodał, co za roznica czy przewód bedzie miał 20 zył czy 4 zyly, lepiej jak by go nie bylo wcale :) po co sie ograniczac.

W sumie..
Nrf24l01 z odpowiednim wsadem + konwerter napięć + arduino promini i można sobie klawke na 2.4GHz podpinać :)

No super, ale i tak trza CIA najpierw umieć obsłużyć. :D

Wydaje mi się, że CIA działa tak:
kolumna 7 ________________________
kolumna 6 -_------------------------------------
kolumna 5 ---_----------------------------------
kolumna 4 -----_--------------------------------
itd.
ale jak widać źle mi się wydaje...
bo to:
  Case 1
  Do : Loop Until K1 = 0
  Rzedy = Rzad
przy wykryciu 0 na określonej kolumnie ustawia 0 na odpowiednim rzędzie.
Jeżeli następnie wstawimy odpowiednio długi wait zanim przywrócimy stan 1 na tym rzędzie to uzyskujemy reakcję ze strony C64 (z reguły niepożądaną(niewłaściwa kolumna)), przy zbyt krótkim nie.

Tak wiem że używanie waitów jest niehigieniczne (uczę się). ;p

Może zrobić inaczej (tylko nie bardzo wiem jak to w programie zapisać).
Mój pierwotny zamysł był taki:
1. w przerwaniu skanuje tylko kol6;
2. w momencie gdy 0 na kol6 startuje licznik (maks. stan licznika to czas do kolejnego 0 na kol6-1);
2. po odczycie klawiatury At czekam gdy wartość na liczniku pokryje się z numerem kolumny dla określonego znaku;
3. ustawiam 0 na określonym rzędzie przez czas skanowania określonej kolumny -1 (zanim zacznie być skanowana następna kolumna).

No chyba, że Tinka się czasowo nie wyrabia (wew. 8MHz) i nic z tym nie zrobię... No i kwestja tego co interpreter robi z tym co napisałem np. szybsze jest IF czy CASE? I wiele innych takich niewiadomych. ;p
« Ostatnia zmiana: 22 Maja 2017, 19:35 wysłana przez Term »

Offline Term

  • Level 1
  • *
  • Wiadomości: 49
Re: Konwerter klawiatury AT PS/2 dla C64
« Odpowiedź #9 dnia: 23 Maja 2017, 22:33 »
Na wstępie:
1. Wiem, że piszę posta pod postem, ale nie chciałem żeby post monstrum wyszedł, więc jeżeli Mod/Admin uzna że trza połączyć proszę łączyć. :)
2. Jeżeli to jakaś tajemnica jest jak obsługa klawiatury realizowana jest przez CIA i jak to zrobić przy pomocy AVRka to proszę napisać, że "Wiemy, ale nie powiemy. Nie bo nie i już!" - zrozumiem (kol. @rs2322 nie ciągnę za język, bo napisał że ktoś tam by się ugotował i to rozumiem).  :P Nie próbuję jakiegoś cuda na miarę UK1541 czy HxC tylko zwykły emulator klawiatury, a ponieważ brak mi wiedzy/doświadczenia (głupi jestem) pytam osoby, jak mniemam, nią dysponujące. Bardzo proszę się nie obrażać na to co napisałem, nie chcę żeby zostało to odebrane jako postawa roszczeniowa - po prostu chcę wiedzieć na czym stoję.
3. English is not fun for me, so on the english board i feel like a sinking man, a google tłumacz wcale nie pomaga (ergo - organ nie używany zanika i to jest prawda). ;P
4. Mam Arduino Uno, ale C za bardzo nie ogarniam oprócz podstaw w wersji dla Arduino, ale Tinka ma 2kb + EEPROM - co powinno w zupełności wystarczyć (pisałem już o tym), a to co dotychczas napisałem i jest niezoptymalizowane zajmuje ok 60% ROM.

Dobra, ale do rzeczy:
Może zrobić inaczej (tylko nie bardzo wiem jak to w programie zapisać).
Mój pierwotny zamysł był taki:
1. w przerwaniu skanuje tylko kol6;
2. w momencie gdy 0 na kol6 startuje licznik (maks. stan licznika to czas do kolejnego 0 na kol6-1);


1. dalej zakładam że CIA działa jak napisałem powyżej;
1a. wciąż nie jestem przekonany co do użycia przerwań - procek musi zrzucić stos wykonać przerwanie przywrócić stos itd. a to zżera czas, ale
2. dopisałem coś co pozwala mniej/więcej zmierzyć czas od impulsu 0 to impulsu 0 na wybranej kolumnie (konkretnie zbocze opadające) (wklejam całość żeby było czytelniej).
2a. przypominam że kompilator Bascoma ignoruje linie ze znakiem  " ' " - komentarz lub nieużywana linia:
'opis patrz niżej...


' przejsciowka PS/2 AT do C64 keyboard interface

'1. prawdopodobnie 6526 trzyma normalnie na pa7 low (chyba ze przalacza pot z gniazd joy lub stan niski na ktoryms z"rzedow")
'wiec jezeli na zadnej pa0 do pa6 nie ma low to znaczy ze "skanowana" jest pa7
'
' TEST - CZAS - OD KOLUMNY DO KOLUMNY!!!! + UART
'
'!!! W finalnej wersji zmienic Fuse BIta od RESET !!!
'
'Problemy do rozwiazania:
'1. wiadomo jaki :/
'2. Klawisze z shiftem
'3. wcisniecie kilku klawiszy na raz (pp. GetAtKbdRaw pomoze)



$regfile = "attiny2313a.dat"
$crystal = 8000000
$baud = 9600


'$prog &HFF , &HE4 , &HDF , &HFF                             ' generated. Take care that the chip supports all fuse bytes.




  Config Portb = Output                                     'rzędy  od 0 do 7  np. rząd0 pinb.0 czyli rzad1 pinb.1 (pb0-pb7) | pin12(złącze klawiatury) row0 > pin5 row7
                                                             'rzedy w tabeli keydata wpisywane sa +1 czyli rzad 2 wpisany jest jako 3
'  Config Porta.0 = Input                                    'kolumna h7 pin(zlacze klawiatury) 13
'  Config Porta.1 = Input                                    'kolumna g6 pin(zlacze klawiatury) 14
'  Config Porta.2 = Input                                    'kolumna f5.pin(zlacze klawiatury) 15
                                                              '.
'  Config Portd.0 = Input                                    'kolumn e4 pin(zlacze klawiatury) 16

  Config Portd.1 = Output                                   'Odkomentowac W Finalnej Wersji Bedzie To Restore

  Config Portd.2 = Input                                    'kolumna d3 pin(zlacze klawiatury) 17
  Config Portd.5 = Input                                    'kolumna c2 pin(zlacze klawiatury) 18
 ' Config Portd.6 = Input                                    'kolumna b1 pin(zlacze klawiatury) 19
                                                               'kolumny podobnie jak rzedy + 1 czyli kolumna c2 to kolumna 3 pind.5
                                                               'kolumna a0 pin(zlacze klawiatury) 20 jezeli na ktorymkolwiek z powyzszych stan 1 to kolumna H aktywna

Rzedy Alias Portb

'Kol.0 Alias 0 'to kolumna zadna z powyzszych
'K1 Alias Portd.6
K2 Alias Portd.5
K3 Alias Portd.2
'K4 Alias Portd.0
'K5 Alias Porta.2
'K6 Alias Porta.1
'K7 Alias Porta.0

Rest Alias Portd.1


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







Rzedy = 255






Dim A As Word , B As Byte , C As Word , D As Word           'pomocnicze



Dim Klawisz As Byte , Nr As Byte , Nk As Byte , Rzad As Byte       '"Nr" - numer rzedu, "Nk" - numer kolumny, "Rzad" - bajt ustawiany na porcie rzedow
Dim Cps As Bit                                              'Cps - stan caps lock (shift lock)

Cps = 0


Config Timer1 = Timer , Prescale = 8
Config Int0 = Falling
On Int0 Kol6
On Ovf1 Przep
Enable Interrupts
Enable Timer1
Enable Int0

Stop Timer1
Timer1 = 0

A = 0
B = 0
C = 0
D = 20000
Waitms 2500
Do

 Print "hello"
Do

If C < A Then : C = A : End If
If D > A And A > 1000 Then : D = A : End If
'If A > 0 Then

Print B ; "  " ; A ; " " ; C ; " " ; D ; "     " ; Chr(13);
'Print "                                                             "
'End If

Loop





   Do                                                       'odczyt klawiatury + czeka na zwrocenie wartosci z taklicy keydata <>0

      Klawisz = Getatkbd()
'     If Klawisz = 0 Then
'     Rzedy = 255
'     End If
   Loop Until Klawisz <> 0

' Klawisz = 56                                               ' zakomentowac w pelnej wersji - linia do testowania

If Klawisz = 42 Then Toggle Cps

Nr = Klawisz / 10                                           'rozbicie na rzedy
Nr = Nr - 1                                                 '-1 patrz dlacego w opisie
Nk = Klawisz Mod 10                                         'rozbicie na kolumny
Nk = Nk - 1                                                 '-1 patrz opis ponizej


Rzad = Lookup(nr , Dr)                                      ' odczytaj wartosc z pozycji "rzad" tabeli "dr"





Loop

Kol6:

If Timer1 = 0 Then
Start Timer1
'B = B + 1
Else
Stop Timer1
A = Timer1
Timer1 = 0
'B = 0
End If

Return

 Przep:
 B = B + 1
 Return





'------------------------------------------------------------------------------------------------

'Dane rzedow - rzedy od 0 do 7 np. dec127 = byte0111 1111
Dr:
'Data 127 , 191 , 223 , 239 , 247 , 251 , 253 , 254
Data 254 , 253 , 251 , 247 , 239 , 223 , 191 , 127

'mapa klawiatury  rzedami   - wybrana pozycja 0111 1111, 1011 1111


'------------------------------------------------------------------------------------------------

'Dane kolumn t.j. poukladane porty od 0 do 7
'Dk:
'Data 0 , "K1" , "K2" , "K3" , "K4" , "K5" , "K6" , "K7"


'------------------------------------------------------------------------------------------------

'talica znakow    zapisana rzad kolumna np. 34  rzad 2 kolumna a3
Keydata:

'normal keys lower case

Data 0 , 58 , 0 , 0 , 0 , 0 , 0 , 88 , 0 , 68 , 0 , 0 , 0 , 31 , 21 , 0
Data 0 , 41 , 42 , 0 , 61 , 71 , 11 , 0 , 0 , 0 , 52 , 62 , 32 , 22 , 81 , 0
Data 0 , 53 , 43 , 33 , 72 , 82 , 12 , 0 , 0 , 51 , 44 , 63 , 73 , 23 , 13 , 0
Data 0 , 45 , 54 , 64 , 34 , 24 , 83 , 0 , 0 , 0 , 55 , 35 , 74 , 14 , 84 , 0
Data 0 , 46 , 65 , 25 , 75 , 85 , 15 , 0 , 0 , 56 , 47 , 36 , 66 , 26 , 16 , 0
Data 0 , 0 , 37 , 0 , 76 , 86 , 0 , 0 , 42 , 57 , 28 , 27 , 0 , 67 , 0 , 0
Data 0 , 0 , 0 , 0 , 0 , 0 , 17 , 0 , 0 , 10 , 0 , 0 , 18 , 0 , 0 , 0
Data 87 , 77 , 48 , 0 , 38 , 0 , 0 , 0 , 78 , 0 , 0 , 0 , 0 , 0 , 0 , 0



'shifted keys UPPER case

Data 0 , 58 , 0 , 0 , 0 , 0 , 0 , 88 , 0 , 68 , 0 , 0 , 0 , 31 , 21 , 0       '16
Data 0 , 41 , 42 , 0 , 61 , 71 , 11 , 0 , 0 , 0 , 52 , 62 , 32 , 22 , 81 , 0       '32
Data 0 , 53 , 43 , 33 , 72 , 82 , 12 , 0 , 0 , 51 , 44 , 63 , 73 , 23 , 13 , 0       '48
Data 0 , 45 , 54 , 64 , 34 , 24 , 83 , 0 , 0 , 0 , 55 , 35 , 74 , 14 , 84 , 0       '64
Data 0 , 46 , 65 , 25 , 75 , 85 , 15 , 0 , 0 , 56 , 47 , 36 , 66 , 26 , 16 , 0       '80
Data 0 , 0 , 37 , 0 , 76 , 86 , 0 , 0 , 42 , 57 , 28 , 27 , 0 , 67 , 0 , 0       '96
Data 0 , 0 , 0 , 0 , 0 , 0 , 17 , 0 , 0 , 10 , 0 , 0 , 18 , 0 , 0 , 0       '112
Data 87 , 77 , 48 , 0 , 38 , 0 , 0 , 0 , 78 , 0 , 0 , 0 , 0 , 0 , 0 , 0       '128

'przypisanie klawiszy c64 - atkeyb - kod getatkbd (hex) - rzad kolumna C64

'c64 key       AT key    scancode    table position Keydata     (rzad/kolumna)+1
'left arrow    - "`"       - 0e        - 15                          - 21
'1             - "1"       - 16        - 23                          - 11
'2             - "2"       - 1e        - 31                          - 81
'3             - "3"       - 26        - 39                          - 12
'4             - "4"       - 25        - 38                          - 82
'5             - "5"       - 2E        - 47                          - 13
'6             - "6"       - 36        - 55                          - 83
'7             - "7"       - 3D        - 62                          - 14
'8             - "8"       - 3E        - 63                          - 84
'9             - "9"       - 46        - 71                          - 15
'0             - "0"       - 45        - 70                          - 85
'+             - "-"       - 4E        - 79                          - 16
'-             - "="       - 55        - 86                          - 86
'Funt          - "BkSp"    - 66        - 103                         - 17
'crl/home      - "Insert"  - 70        - 113                         - 87
'inst/del      - "Home"    - 6C        - 109                         - 18

'control       - "Tab"     - 0D        - 14                          - 31
'Q             - "Q"       - 15        - 22                          - 71
'W             - "W"       - 1D        - 30                          - 22
'E             - "E"       - 24        - 37                          - 72
'R             - "R"       - 2D        - 46                          - 23
'T             - "T"       - 2C        - 45                          - 73
'Y             - "Y"       - 35        - 54                          - 24
'U             - "U"       - 3C        - 61                          - 74
'I             - "I"       - 43        - 68                          - 25
'O             - "O"       - 44        - 69                          - 75
'P             - "P"       - 4D        - 78                          - 26
'@             - "["       - 54        - 85                          - 76
'*             - "]"       - 5B        - 92                          - 27
'arrow up      - "Del"     - 71        - 114                         - 77
'RESTORE       - "End"     - 69        - 106                         - 10 osobne wyjście attiny

'run/stop      - "L Alt"   - 11        - 18                          - 41
'shift lock    - "CpsLck"  - 58        - 89                          - 42
'A             - "A"       - 1C        - 29                          - 32
'S             - "S"       - 1B        - 28                          - 62
'D             - "D"       - 23        - 36                          - 33
'F             - "F"       - 2B        - 44                          - 63
'G             - "G"       - 34        - 53                          - 34
'H             - "H"       - 33        - 52                          - 64
'J             - "J"       - 3B        - 60                          - 35
'K             - "K"       - 42        - 67                          - 65
'L             - "L"       - 4B        - 76                          - 36
':             - ";"       - 4C        - 77                          - 66
';             - "'"       - 52        - 83                          - 37
'=             - "\"       - 5D        - 94                          - 67
'RETURN        - "Enter"   - 5A        - 91                          - 28

'COMMODORE     - "L Ctr"   - 14        - 21                          - 61
'shift LEFT    - "L Shift" - 12        - 19                          - 42
'Z             - "Z"       - 1A        - 27                          - 52
'X             - "X"       - 22        - 35                          - 43
'C             - "C"       - 21        - 34                          - 53
'V             - "V"       - 2A        - 43                          - 44
'B             - "B"       - 32        - 51                          - 54
'N             - "N"       - 31        - 50                          - 45
'M             - "M"       - 3A        - 59                          - 55
',             - ","       - 41        - 66                          - 46
'.             - "."       - 49        - 74                          - 56
'/             - "/"       - 4A        - 75                          - 47
'shift RIGHT   - "R Shift" - 59        - 90                          - 57
'crs UP/DWN    - "D Arrow" - 72        - 115                         - 48
'crs LFT/RIGHT - "R Arrow" - 74        - 117                         - 38

'SPACE         - "SPACE"   - 29        - 42                          - 51

'F1/F2         - "F9"      - 01        - 02                          - 58
'F3/F4         - "F10"     - 09        - 10                          - 68
'F5/F6         - "F11"     - 78        - 121                         - 78
'F7/F8         - "F12"     - 07        - 08                          - 88
Czyli w skrócie:
1.Poczekaj aż Commodorek wystartuje;
2. napisz "Hello" - UART;
3. Wyślij do UART zmienne: B - przepełnienie; A - odczyt z Timera; C - najdłuższy czas ; D - Najkrótszy czas (od przerwania do przerwania czyli od 0 do 0 na badanej kolumnie)
- przerwanie1:
A. jeżeli zbocze opadające na PD2;
B. jeżeli timer stoi - wystartuj Timer;
C. jeżeli Timer pracuje przypisz jego wartość do zmiennej A i zatrzymaj Timer.
- przerwanie2: (Overflow)
A. dodaj 1 do B (sprawdzanie przepełnień).

Uzyskany wynik to: od ok. 16900 do ok. 17300 czyli przy preskale=8 (Fuse Bit divide mam wyłączony) od 0.0169sek. do 0.0173sek. (przetestowane na 3 kolumnach)
Wynik oczywiście +- bo dochodzi czas na wywołanie przerwania, UART i inne pierdoły i to, że używam wewnętrznego oscylatora.
Dzielimy na 8 i od zbocza opadającego do kolejnego opadającego zbocza następnego pinka (kolumny) mamy ok. 2137 czyli 0.002137sek, ok. 2ms (strasznie dużo czasu).

Więc dalej nie wiem czemu pierwotna wersja nie chce działać...  :-\ Jeśli ktoś, coś to wciąż proszę o pomoc. :)


Offline rs2322

  • Level 5
  • *****
  • Wiadomości: 540
  • ASAP
Re: Konwerter klawiatury AT PS/2 dla C64
« Odpowiedź #10 dnia: 23 Maja 2017, 23:14 »
podlacz sobie oscyloskop, nacisnij jakis klawisz, zobacz jak zmienian sie stan na linii (reakcja na zbocze), zrób to samo za pomocą AVR, tyle
po pierwsze wywal wszystkie "wait" bo to będzie kiepsko działało lub prawie wcale
ponadto z pradawnych czasów, dla Bascoma była istotna wersja kompilatora jak i komentarze (miejsce ich stawienia), nie wiem czy to poprawili ale lepej wywal komenatarze
i moze przeskocz na Arduino lub C bo ten jezyk jest raczej wymarły,
wedlug mnie to raczej temat na elektrode, tutaj predzej znajdziesz pomoc jak byś to pisał w asemblerze :) wtedy mozesz liczyc na gotowca nawet w mojej strony
Pamięci RAM każda ilość: KM4164, 4464, TMS 4464 MT1259-10
PCB - projekty na zamówienie.
Programowanie pamięci EEPROM, EPROM - free !
SD2IEC http://c64power.com/forumng/index.php?topic=6630.0

Offline Term

  • Level 1
  • *
  • Wiadomości: 49
Re: Konwerter klawiatury AT PS/2 dla C64
« Odpowiedź #11 dnia: 23 Maja 2017, 23:35 »
podlacz sobie oscyloskop, nacisnij jakis klawisz, zobacz jak zmienian sie stan na linii (reakcja na zbocze)...
W momencie wciśnięcia klawisza "zwalnia" odczyt kolumn - zauważyłem.
...ponadto z pradawnych czasów, dla Bascoma była istotna wersja kompilatora jak i komentarze (miejsce ich stawienia), nie wiem czy to poprawili ale lepej wywal komenatarze...
Spróbuje.
...i moze przeskocz na Arduino lub C bo ten jezyk jest raczej wymarły,
wedlug mnie to raczej temat na elektrode, tutaj predzej znajdziesz pomoc jak byś to pisał w asemblerze :) wtedy mozesz liczyc na gotowca nawet w mojej strony
Za wiele wymagasz. Jakieś 26 lat temu pisałem w ASM na C64 - proste, bo proste ale pisałem - nic karwa nie pamiętam! :D
(C nigdy wcześniej nie używałem, raczej Pascal - ale też nic/niewiele nie pamiętam)

P.S.
Ciebie za język nie ciągnę j.w. - tym bardziej dzięki za info. :)
« Ostatnia zmiana: 23 Maja 2017, 23:36 wysłana przez Term »

Offline hobocti77x

  • Level 5
  • *****
  • Wiadomości: 731
Re: Konwerter klawiatury AT PS/2 dla C64
« Odpowiedź #12 dnia: 24 Maja 2017, 11:10 »
Działanie programu w skrócie:
1. czekaj na wciśnięcie klawisza i pobierz jego kod;
2. zdekoduj Nr rzędu i kolumny z tabeli;
3. czekaj aż na zdekodowanej kolumnie będzie stan 0 i w tym momencie ustaw 0 na zdekodowanym rzędzie
4. odczekaj określony czas
5. ustaw stan jeden na wszystkich rzędach
6. wróć do pk.1
Wyglada na to ze twoj algorytm jest bledny.
Punkty 1-3 OK
punkt 4. powinien byc czekaj az zniknie stan 0 na kolumnie i wowczas ustaw stan jeden na wszystkich rzędach.
6. wroc do pk.1
oczywiscie mozesz rozbuowac program o kilka klawiszy jednoczesnie co nieco skomplikuje algorytm.
Dodatkowo mozesz miec problem z predkoscia programu w BCASCOM i lepij zrobic te czesc programu w asemblerze.

Offline Kisiel

  • Level 7
  • *******
  • Wiadomości: 11447
  • Number 7 in all users competition...
    • http://wiki.projekt64.filety.pl/doku.php
Re: Konwerter klawiatury AT PS/2 dla C64
« Odpowiedź #13 dnia: 24 Maja 2017, 19:44 »
Działanie programu w skrócie:
1. czekaj na wciśnięcie klawisza i pobierz jego kod;
2. zdekoduj Nr rzędu i kolumny z tabeli;
3. czekaj aż na zdekodowanej kolumnie będzie stan 0 i w tym momencie ustaw 0 na zdekodowanym rzędzie
4. odczekaj określony czas
5. ustaw stan jeden na wszystkich rzędach
6. wróć do pk.1
Wyglada na to ze twoj algorytm jest bledny.
Punkty 1-3 OK
punkt 4. powinien byc czekaj az zniknie stan 0 na kolumnie i wowczas ustaw stan jeden na wszystkich rzędach.
6. wroc do pk.1
oczywiscie mozesz rozbuowac program o kilka klawiszy jednoczesnie co nieco skomplikuje algorytm.
Dodatkowo mozesz miec problem z predkoscia programu w BCASCOM i lepij zrobic te czesc programu w asemblerze.

z takim algorytmem życzę powodzenia.
idz wyprostowany wśród tych co idą na kolanach

...w przypadku checi zakupu UK1541,GA,MA,T8500,T7501 prosze o kontakt na Facebooku, haslo: UK1541....

Offline dhg

  • Level 4
  • ****
  • Wiadomości: 459
  • god, root, i don't see any difference...
Re: Konwerter klawiatury AT PS/2 dla C64
« Odpowiedź #14 dnia: 24 Maja 2017, 22:00 »
Bascom jest powolny, kompilator ma skopany, kod wynikowy typowego "blink" potrafi ważyc kilka kb. Przeskocz na arduino ide, masa przykładów, bibliotek, i ogolnie przyjemnie sie w tym rzeźbi. Mówie to jako zatracony pascalowiec. Łatwiej mi było ogarnąć arduino ide niż bascom avr. W dodatku jest support dla większości procków avr nie tylko tych upchanych na plytki *ino.

10?"DHG
20GOTO10
RUN