I am sure this link is somewhere in this forum.
http://www.computer-engineering.org/ps2protocol/
I am sure this link is somewhere in this forum.
http://www.computer-engineering.org/ps2protocol/
"If the Earth were a single state, Istanbul would be its capital." Napoleon Bonaparte
hello sayzer
actually I know this protocolle befor the problem how can I emplement it and make an "A"
appears on the notepad or microsoftword using pic 16f877A
I used shiftout ...., ..... , 5 [% 010100110/11]
but it not working how can I control the clock frequency I want it between 10 - 16.7 KHz !
please give me some help.
May be it would be much better if you write your own routine.
You can control Clock and Data lines with more accuracy and thus play with Clock frequency as you like.
Example:
Code:<font color="#000000"> Temp = <font color="#FF0000"><b>$15 </b></font><font color="#000080"><i>' Send "q" as an example. </i></font>DatTime = <font color="#FF0000"><b>10 </b></font><font color="#000080"><i>' Data Pause Time. </i></font>ClkTime = <font color="#FF0000"><b>50 </b></font><font color="#000080"><i>' Clock Pause time. </i><b>OUTPUT </b></font>TxCLK <font color="#000080"><i>' Before you send anything, assign the pins as output pins. </i><b>OUTPUT </b></font>TxDAT TxCLK = <font color="#FF0000"><b>1 </b></font><font color="#000080"><b>PAUSEUS </b></font>DatTime TxDAT = STARTBit <font color="#000080"><i>' Start bit is always zero. </i><b>PAUSEUS </b></font>DatTime TxCLK = <font color="#FF0000"><b>0 </b></font><font color="#000080"><b>PAUSEUS </b></font>ClkTime TxCLK = <font color="#FF0000"><b>1 </b></font><font color="#000080"><b>PAUSEUS </b></font>DatTime TxDAT = Temp.<font color="#FF0000"><b>0 </b></font><font color="#000080"><i>' Bit 0. </i><b>PAUSEUS </b></font>DatTime TxCLK = <font color="#FF0000"><b>0 </b></font><font color="#000080"><b>PAUSEUS </b></font>ClkTime TxCLK = <font color="#FF0000"><b>1 </b></font><font color="#000080"><b>PAUSEUS </b></font>DatTime TxDAT = Temp.<font color="#FF0000"><b>1 </b></font><font color="#000080"><i>' Bit 1. </i><b>PAUSEUS </b></font>DatTime TxCLK = <font color="#FF0000"><b>0 </b></font><font color="#000080"><b>PAUSEUS </b></font>ClkTime TxCLK = <font color="#FF0000"><b>1 </b></font><font color="#000080"><b>PAUSEUS </b></font>DatTime TxDAT = Temp.<font color="#FF0000"><b>2 </b></font><font color="#000080"><i>' Bit 2. </i><b>PAUSEUS </b></font>DatTime TxCLK = <font color="#FF0000"><b>0 </b></font><font color="#000080"><b>PAUSEUS </b></font>ClkTime TxCLK = <font color="#FF0000"><b>1 </b></font><font color="#000080"><b>PAUSEUS </b></font>DatTime TxDAT = Temp.<font color="#FF0000"><b>3 </b></font><font color="#000080"><i>' Bit 3. </i><b>PAUSEUS </b></font>DatTime TxCLK = <font color="#FF0000"><b>0 </b></font><font color="#000080"><b>PAUSEUS </b></font>ClkTime TxCLK = <font color="#FF0000"><b>1 </b></font><font color="#000080"><b>PAUSEUS </b></font>DatTime TxDAT = Temp.<font color="#FF0000"><b>4 </b></font><font color="#000080"><i>' Bit 4. </i><b>PAUSEUS </b></font>DatTime TxCLK = <font color="#FF0000"><b>0 </b></font><font color="#000080"><b>PAUSEUS </b></font>ClkTime TxCLK = <font color="#FF0000"><b>1 </b></font><font color="#000080"><b>PAUSEUS </b></font>DatTime TxDAT = Temp.<font color="#FF0000"><b>5 </b></font><font color="#000080"><i>' Bit 5. </i><b>PAUSEUS </b></font>DatTime TxCLK = <font color="#FF0000"><b>0 </b></font><font color="#000080"><b>PAUSEUS </b></font>ClkTime TxCLK = <font color="#FF0000"><b>1 </b></font><font color="#000080"><b>PAUSEUS </b></font>DatTime TxDAT = Temp.<font color="#FF0000"><b>6 </b></font><font color="#000080"><i>' Bit 6. </i><b>PAUSEUS </b></font>DatTime TxCLK = <font color="#FF0000"><b>0 </b></font><font color="#000080"><b>PAUSEUS </b></font>ClkTime TxCLK = <font color="#FF0000"><b>1 </b></font><font color="#000080"><b>PAUSEUS </b></font>DatTime TxDAT = Temp.<font color="#FF0000"><b>7 </b></font><font color="#000080"><i>' Bit 7. </i><b>PAUSEUS </b></font>DatTime TxCLK = <font color="#FF0000"><b>0 </b></font><font color="#000080"><b>PAUSEUS </b></font>ClkTime TxCLK = <font color="#FF0000"><b>1 </b></font><font color="#000080"><b>PAUSEUS </b></font>DatTime TxDAT = Parity <font color="#000080"><i>' Parity Bit. </i><b>PAUSEUS </b></font>DatTime <font color="#000080"><i>' You must calculate Parity bit_ </i></font>TxCLK = <font color="#FF0000"><b>0 </b></font><font color="#000080"><i>'in somewhere before putting it here. </i><b>PAUSEUS </b></font>ClkTime TxCLK = <font color="#FF0000"><b>1 </b></font><font color="#000080"><b>PAUSEUS </b></font>DatTime TxDAT = StopBit <font color="#000080"><i>' Stop bit is always 1. </i><b>PAUSEUS </b></font>DatTime <font color="#000080"><i>' Have a variable named StopBit and make it 1. </i></font>TxCLK = <font color="#FF0000"><b>0 </b></font><font color="#000080"><b>PAUSEUS </b></font>ClkTime <font color="#000080"><b>INPUT </b></font>TxCLK <font color="#000080"><i>' when you are done with sending a byte, </i><b>INPUT </b></font>TxDAT <font color="#000080"><i>'assign the pins as input pins. </i></font>
This routine works fine.
But I am having issues with different computers.
Thus, you will have to play with Data and Clock pauses.
Also, you will have to have a Delay between each "SEND".
"If the Earth were a single state, Istanbul would be its capital." Napoleon Bonaparte
ok actually I tried your code with little midifications :
as follow:
device 16f877a
INPUT portb.1 ' when you are done with sending a byte,
INPUT portb.0 'assign the pins as input pins.
input portd.2
StopBit var bit
StartBit var bit
Parity var bit
Temp var byte
DatTime var byte
ClkTime var byte
stopbit = 1
startbit = 0
Parity = 0 'for q parity=0
Temp = $15 ' Send "q" as an example.
DatTime = 10 ' Data Pause Time.
ClkTime = 50 ' Clock Pause time.
main:
if portd.2=1 then sendQ
goto main
end
sendQ:
OUTPUT portb.1 ' Before you send anything, assign the pins as output pins.
OUTPUT portb.0
portb.1 = 1
PAUSEUS DatTime
portb.0 = STARTBit ' Start bit is always zero.
PAUSEUS DatTime
portb.1 = 0
PAUSEUS ClkTime
portb.1 = 1
PAUSEUS DatTime
portb.0 = Temp.0 ' Bit 0.
PAUSEUS DatTime
portb.1 = 0
PAUSEUS ClkTime
portb.1 = 1
PAUSEUS DatTime
portb.0 = Temp.1 ' Bit 1.
PAUSEUS DatTime
portb.1 = 0
PAUSEUS ClkTime
portb.1 = 1
PAUSEUS DatTime
portb.0 = Temp.2 ' Bit 2.
PAUSEUS DatTime
portb.1 = 0
PAUSEUS ClkTime
portb.1 = 1
PAUSEUS DatTime
portb.0 = Temp.3 ' Bit 3.
PAUSEUS DatTime
portb.1 = 0
PAUSEUS ClkTime
portb.1 = 1
PAUSEUS DatTime
portb.0 = Temp.4 ' Bit 4.
PAUSEUS DatTime
portb.1 = 0
PAUSEUS ClkTime
portb.1 = 1
PAUSEUS DatTime
portb.0 = Temp.5 ' Bit 5.
PAUSEUS DatTime
portb.1 = 0
PAUSEUS ClkTime
portb.1 = 1
PAUSEUS DatTime
portb.0 = Temp.6 ' Bit 6.
PAUSEUS DatTime
portb.1 = 0
PAUSEUS ClkTime
portb.1 = 1
PAUSEUS DatTime
portb.0 = Temp.7 ' Bit 7.
PAUSEUS DatTime
portb.1 = 0
PAUSEUS ClkTime
portb.1 = 1
PAUSEUS DatTime
portb.0 = Parity ' Parity Bit.
PAUSEUS DatTime ' You must calculate Parity bit_
portb.1 = 0 'in somewhere before putting it here.
PAUSEUS ClkTime
portb.1 = 1
PAUSEUS DatTime
portb.0 = StopBit ' Stop bit is always 1.
PAUSEUS DatTime ' Have a variable named StopBit and make it 1.
portb.1 = 0
PAUSEUS ClkTime
INPUT portb.1 ' when you are done with sending a byte,
INPUT portb.0 'assign the pins as input pins.
goto main
______________________________
and it still not working ,nothing appears on the screan and if I used the 5V supply from the PC , the PC became freezing and nothing will work , if I used an auxiliarysupply the character " q " will not appear also as in the first case but the computer will not freezing !
now:
1) I thought it might be the DataTime and ClkTime values so I think to chnge them to dataTime = 18 , ClkTime=37 by using those values the period of logic one = 37us and logic zero period = 37us ( for the clock ) !! then the T=74us -> f=1/T =13.513KHz in the required range. but I didn't try it yet
2) the second reason I was thinking about (it may look crazy - but I get missed of reasons)
ok what I think:
in all the cases ever the PS/2 cable that we are use was goten from a mouse " a mouse
PS/2 cable - green - " was conntected to our Pic microcontroller !!
so do you think that one of those might be the reason of making the PC freezing and the character not appears.
AMAZING THAT AN ENGINEERES CAN'T MAKE A HARDWARE TO SHOW A SINGLE CHARACTER ON THE COMPUTER NOTEPAD
and this is still the first step on my project .
by the way thanks sayzer for your tring and for your help !! waitting to see your replay and what Ideas do you have in your mind !
As noted in Post #2, to get a key to be read by a PS/2 port, you have to send a MAKE and a BREAK scan code.
Looking at your code, I only see 8 data bits, some timing, etc. being sent.
Sayzer gave you good code to work with, but that's only half the battle.
And besides, shiftout should work just fine, as long as you send the right codes (see first line of this post)...
Also, you can shorten that up by quite a bit: (yes, here I go with my colons again!)
Code:device 16f877a input portb.1:input portb.0:input portd.2:stopbit var bit:startbit var bit parity var bit:temp var byte:dattime var byte:clktime var byte tempbit var bit:stopbit=1:startbit=0:parity=0:Temp=$15:DatTime=10 ClkTime=50 main: if portd.2=0 then main output portb.1:output portb.0:tempbit=startbit:gosub sendbit:tempbit=temp.0 gosub sendbit:tempbit=temp.1:gosub sendbit:tempbit=temp.2:gosub sendbit tempbit=temp.3:gosub sendbit:tempbit=temp.4:gosub sendbit:tempbit=temp.5 gosub sendbit:tempbit=temp.6:gosub sendbit:tempbit=temp.7:gosub sendbit tempbit=parity:gosub sendbit:tempbit=stopbit:gosub sendbit INPUT portb.1:INPUT portb.0:goto main sendbit: portb.1=1:pauseus dattime:portb.0=tempbit:pauseus dattime:portb.1=0 pauseus clktime:return END
Wireless,
Freezing computer seems to be having Data and Clk lines reversed.
Either in your code, or in your hardware, change them.
Also, make sure, you remove your PS/2 Keyboard while testing this. Some people try to use them in parallel as I do not understand how they expect it to work??
Also, as Skimask stated, it is a code to work on.
If you like to send 'q' then you should send $15,$F0,$15.
$15 is 'q' as pressed Key.
$F0,$15 is 'q' as released Key.
You should consider this procedure in your code.
"If the Earth were a single state, Istanbul would be its capital." Napoleon Bonaparte
skimask
I made what you said by inserting a break code after the make but the two problems are still there :
1- the Computer still freezing !!! <-- why is that ?
" and the computer give a note that no keyboard exict " !!!
2- the character still not appears .
is it a hardware problem !!!
by the way thanks for your tring and I hope you can find an answer for me![]()
Last edited by wireless magic; - 31st January 2008 at 22:08.
Bookmarks