パラレル ポートのデータ ピンを高低に設定する方法を知りたいです。これには PyParallel を使用できると思いますが、特定のピンを設定する方法がわかりません。
ありがとう!
パラレル ポートのデータ ピンを高低に設定する方法を知りたいです。これには PyParallel を使用できると思いますが、特定のピンを設定する方法がわかりません。
ありがとう!
ここでは、ソフトウェアとハードウェアのインターフェイスについて話しています。これらは通常、レジスタに 1 バイトの値を割り当てることによってローとハイに設定されます。パラレル ポートには、データが移動するための 8 つのピンがあります。C、C++ のような低水準言語では、データの 8 ピンに対応する 8 ビットを保持するレジスタを「A」と呼びましょう。たとえば、次のようになります。
レジスタ A がピンのように設定されていると仮定します: [7,6,5,4,3,2,1,0]
Cライクな疑似コード
A=0x00 // all pins are set low
A=0xFF // all pins are high
A=0xF0 // Pins 0:3 are low, Pins 4:7 are high
このアイデアはPyParallelで継承されます
import parallel
p = parallel.Parallel() # open LPT1
p.setData(0x55) #<--- this is your bread and butter here
p.setData は、あなたが興味を持っている関数です。バイナリに変換された 0x55 は
0b01010101
-また-
[ルルルルフ]
データを特定のバイトに設定できるようになりましたが、大量のデータを送信するにはどうすればよいでしょうか... 3 バイト 0x00、0x01、0x02 としましょう。受信マシンが送信されたばかりの受信を確認したときの ack ラインを監視する必要があります。
単純な実装:
data=[0x00, 0x01, 0x02]
while data:
onebyte=data.pop()
p.setDataStrobe('low') #signal that we're sending data
p.setData(onebyte)
while p.getInAcknowledge() == 'high': #wait for this line to go 'low'
# to indicate an ACK
pass #we're waiting for it to acknowledge...
p.setDataStrobe('high')#Ok, we're done sending that byte.
わかりました、それはあなたの質問に直接答えません。ピン5を高くまたは低く設定したいだけだとしましょう。多分私はそのピンにLEDを持っています。次に、バイナリ操作が少し必要です。
portState = 0b01100000 #Somehow the parallel port has this currently set
newportState = portState | 0b00010000#<-- this is called a bitmask
print newportState
>>> 0b011*1*0000
それでは、そのビットをクリアしましょう...
newportState = 0b01110000
clearedPin5 = newportState & 11101111
print clearedPin5
>>> 0b011*0*0000
これらのバイナリ操作が外部のものである場合は、avrfreaks に関するこの優れたチュートリアルをお勧めします。さらに先に進む前に、私は彼らと親しくなりました。このような組み込みソフトウェアの概念は、ビットマスクとビットシフトでいっぱいです。