Klawiatura komputerowa z PS2 na mikroprocesor AVR

To forum jest dla wszystkich pasjonatów mikrokontrolerów AVR Atmela. Wymiana doświadczeń i pomoc dla początkujących w pisaniu programów zarówno w C, Asemblerze jak i BASCOM. Zapraszam znawców tematu, aby pomogli wszystkim początkującym!
ODPOWIEDZ
Awatar użytkownika
Tranzystor
Użytkownik
Posty: 889
Rejestracja: 28 sie 2005, 19:19
Lokalizacja: Świętochłowice
Kontakt:

Klawiatura komputerowa z PS2 na mikroprocesor AVR

Post autor: Tranzystor » 16 wrz 2005, 17:08

Czy jest możliwe podłączenie klawiatury komputerowej z gniazdem PS2??
Jeżeli tak to jak to by wyglądało??
Jak napisać program w BASCOM??


Pozdrawiam!!

Awatar użytkownika
Ertew
Użytkownik
Posty: 1414
Rejestracja: 03 lip 2005, 10:36
Lokalizacja: Leszno
Kontakt:

Post autor: Ertew » 16 wrz 2005, 17:21

Jest do tego specjalna (płatna :x ) biblioteka go bascoma.

K_o_n_r_a_d
Użytkownik
Posty: 123
Rejestracja: 29 lip 2005, 10:21
Lokalizacja: Lublin

Post autor: K_o_n_r_a_d » 16 wrz 2005, 17:57

Kiedyś zrobiłem coś takiego (działa bardzo dobrze):

Kod: Zaznacz cały

$crystal = 4000000
Config Portd = Input
Portd = &B1111111
Config Lcdpin = Pin , Db4 = Portb.3 , Db5 = Portb.2 , Db6 = Portb.1 , Db7 = Portb.0 , E = Portb.5 , Rs = Portb.7       
Config Lcd = 16 * 2
Dim Klawisz As Byte , Komenda As Byte
Dim I As Byte , Ile As Byte
Dim Wyswietlacz As Byte

Kl_dat Alias Pind.4 
Kl_clk Alias Pind.2 

Cls
Cursor Off Noblink

Do
   Gosub Odczyt_klawiatury
   Incr Wyswietlacz
   If Wyswietlacz = 5 Then Lowerline
   If Wyswietlacz = 10 Then
      Cls
      Wyswietlacz = 0
   End If
   Lcd Hex(klawisz) ; " "
Loop
End
'#################################################
Odczyt_klawiatury:
Klawisz = 0
Gosub Czekaj_na_0_na_clock
For I = 0 To 7
  Gosub Czekaj_na_1_na_clock
  Gosub Czekaj_na_0_na_clock
  Klawisz.i=Kl_dat
Next I
  Gosub Czekaj_na_1_na_clock
  Gosub Czekaj_na_0_na_clock
  Gosub Czekaj_na_1_na_clock
  Gosub Czekaj_na_0_na_clock
Return

Czekaj_na_1_na_clock:
Bitwait Kl_clk , Set
Return

Czekaj_na_0_na_clock:
Bitwait Kl_clk , Reset
Return
'################################################
Skopiuj podprogram Odczyt_klawiatury i też powinno działać.

Więcej informacji znajdziesz tu:
http://www.beyondlogic.org/keyboard/keybrd.htm

Pozdrawiam, Konrad.

Awatar użytkownika
radzio
Użytkownik
Posty: 573
Rejestracja: 07 gru 2004, 23:06
Lokalizacja: Sosnowiec
Kontakt:

Post autor: radzio » 16 wrz 2005, 19:41

Dla odmiany w C:

Kod: Zaznacz cały

#define ATKbdPort PORTD
#define ATKbdPin  PIND
#define ATKbdDir  DDRD
//
#define ATKbdDta  0
//
#define ATKbdGetDta (ATKbdPin & (1 << ATKbdDta))
//

unsigned char volatile dane = 0, nowy = 0, i = 0;
// Odczyt danych z klawiatury realizowany jest w ramach
// obsługi przerwania zewnętrznego INT0
// linia CLK podłączona do PD2
// linia DATA podłączona do PD0
SIGNAL(SIG_INTERRUPT0)
{
switch(i){
  case 0 : // bit startu
  dane = 0;
  i++;
  break;
  case 1 : // bity danych
  if(ATKbdGetDta) dane |= 0x01;
  i++;
  break;
  case 2 :
  if(ATKbdGetDta) dane |= 0x02;
  i++;
  break;
  case 3 :
  if(ATKbdGetDta) dane |= 0x04;
  i++;
  break;
  case 4 :
  if(ATKbdGetDta) dane |= 0x08;
  i++;
  break;
  case 5 :
  if(ATKbdGetDta) dane |= 0x10;
  i++;
  break;
  case 6 :
  if(ATKbdGetDta) dane |= 0x20;
  i++;
  break;
  case 7 :
  if(ATKbdGetDta) dane |= 0x40;
  i++;
  break;
  case 8 :
  if(ATKbdGetDta) dane |= 0x80;
  i++;
  break;
  case 9 : // bit parzystości - pomijamy
  i++;
  break;
  case 10 : // bit stopu
  nowy = 1;
  i = 0;
  break;
  }
}

unsigned char getATkbd(void)
{
while(!nowy); // oczekiwanie na odebranie nowego znaku
nowy = 0; // zerowanie flagi odebrania znaku
return dane;
}

Awatar użytkownika
Tranzystor
Użytkownik
Posty: 889
Rejestracja: 28 sie 2005, 19:19
Lokalizacja: Świętochłowice
Kontakt:

Post autor: Tranzystor » 16 wrz 2005, 20:18

Dzięki przyda mi się do różnych moich zabawek!!

Awatar użytkownika
Ertew
Użytkownik
Posty: 1414
Rejestracja: 03 lip 2005, 10:36
Lokalizacja: Leszno
Kontakt:

Post autor: Ertew » 17 wrz 2005, 9:38

Może jeszcze coś dla asemblara :wink: .

ODPOWIEDZ