Słabe połączenie PS/2 z AVR 2313 ? błąd w kodzie ASM dla wysyłania danych?
problem z =?iso-8859-2?Q?transmisj=B1?= przez PS/2 (avr)
From: Antoni Gerc <agerc_at_nospam_gazeta.pl>
Subject: problem z =?iso-8859-2?Q?transmisj=B1?= przez PS/2 (avr)
Date: Sun, 18 Jan 2004 11:38:45 +0000 (UTC)
Witam
Sprawa wygląda tak:
układ ma naśladować klawiaturę i wysyłać do komputera różne dane przez
PS/2.
Mam sobie AVRka (2313), 4MHz, 33pF, coś przeciwzakłuceniowego i na
sztywno podłączone 2 porty I/O jeden z CLK a drugi z DATA na PS/2.
Zasilanie też bioręz PSa.
No i teraz jest tak:
ładny opis protokołu znalazłem na
http://perso.wanadoo.es/juanramon.villodas/The%20PS-2%20Mouse-
Keyboard%20Protocol.htm
piszę sobie programik w ASM i wyraźnie widać, że te części programu,
które nie komunikują się z kompem działają poprawnie. Do kompa
(próbnie) wysyłam sobie kody 30 i 158 (naciśnięcie i zwolnienie
klawisza litery 'a'), a ten nic nie widzi :(
Jak by ktoś miał trochę czasu i chęci, to wklejam kawałek kodu od
wysyłania. będę baardzo wdzięczny za pomoc, bo już nie mam do tego
siły...
Pozdrawiam
Antoni Gerc
;dane do wysłania w rejestrze 'data'
send:
sbis PORTD, clkp
rcall receive ;na razie czeka az CLK będzie w stanie wysokim
sbi DDRD, datap ;przełączenie linii danych w tryb wyjście
;bit startu (0):
cbi PORTD, datap
rcall pulsed ;impuls zegarowy
;bity danych:
clr temp ;liczba jedynek w bajcie
clr temp2
pbds: ;petla bitow do wyslania
sbrc data, 0
rjmp bis ;bit is set
cbi PORTD, datap
rjmp bdone
bis: sbi PORTD, datap
inc temp ;zwiększenie liczby jedynek
bdone:
lsr data ;logical shift right
rcall pulsed ;impuls zegarowy
inc temp2
cpi temp2, 8
brlo pbds ;
;bit parzystosci (gdy liczba jedynej jest nieparzysta, to 0):
sbrs temp, 0 ;skocz jeśli liczba jedynek jest nieparzysta
rjmp pbis ;parity bit is set
cbi PORTD, datap
rjmp bdone2
pbis: sbi PORTD, datap
bdone2:rcall pulsed ;impuls zegarowy
;bit stopu (jedynka):
sbi PORTD, datap
rcall pulsed ;impuls zegarowy
cbi DDRD, datap ;przełączenie linii danych w tryb wejścia
ret
;procedura generująca impuls zegarowy. Wywoływana po ustaleniu
;na linii danych stanu do wysłania
pulsed:
sbi DDRD, clkp ;przełączenie linii zegarowej w tryb wyjścia
rcall wait20
cbi PORTD, clkp ;zbocze zegarowe
rcall wait20
rcall wait20
sbi PORTD, clkp
rcall wait20
cbi DDRD, clkp ;przełączenie linii zegarowej w tryb wejścia
ret
;odbiera bajt przesylany z komputera:
receive:
cbi PORTD, 6 ;zgaszenie diody
sbi PORTD, 6 ;zgaszenie diody
sbis PORTD, clkp
rjmp receive
ret
;procedura opóźniająca dla potrzeb opóźnienia zegara
;80 instrukcji = 20 mikrosekund
wait20:
push temp
ldi temp, spd1 ;pozycja startowa (bylo 215)
wnext: inc temp ;zwiększ licznik
brvc wnext ;jeśli niema przepełnienia kontynuuj
pop temp
ret ;jeśli jest przepełnienie zakończ
========
Path: news-archive.icm.edu.pl!news.rmf.pl!agh.edu.pl!news.agh.edu.pl!news.onet.pl!newsfeed.gazeta.pl!news.gazeta.pl!not-for-mai
From: Antoni Gerc <agerc_at_nospam_gazeta.pl>
Subject: Re: problem z =?iso-8859-2?Q?transmisj=B1?= przez PS/2 (avr)
Date: Sun, 18 Jan 2004 12:47:27 +0000 (UTC)
Jak by ktoś miał trochę czasu i chęci, to wklejam kawałek kodu od
wysyłania. będę baardzo wdzięczny za pomoc, bo już nie mam do tego
siły...
wait20:
push temp
ldi temp, spd1 ;pozycja startowa (bylo 215)
no to udalo mi sie zrobic blad przed samym wyslaniem:
oczywiscie mov a nie ldi (ldi bylo przy stalej ;/ )
========
Path: news-archive.icm.edu.pl!news.rmf.pl!news.ipartners.pl!news.internetia.pl!newsfeed.gazeta.pl!news.gazeta.pl!not-for-mai
From: Antoni Gerc <agerc_at_nospam_gazeta.pl>
Subject: Re: problem z =?iso-8859-2?Q?transmisj=B1?= przez PS/2 (avr)
Date: Sun, 18 Jan 2004 12:48:13 +0000 (UTC)
ldi temp, spd1 ;pozycja startowa (bylo 215)
Oczywiście mov - sorki
========
Path: news-archive.icm.edu.pl!news.rmf.pl!agh.edu.pl!news.agh.edu.pl!news2.icm.edu.pl!news.man.poznan.pl!not-for-mai