パラレルポート入出力
CPLDをパラレルポートから制御したいので、パラレルポートから入出力する方法を調べた。
まずパラレルポートのピン割り当てについて
http://www.nahitech.com/nahitafu/mame/mame5/printer.html
を参考に調べた。
D-Sub25pinのメスを正面から見て右上:1 左上:13 右下:14 左下:25になるようにピンが割り当てられている。
2-9の8ピンがデータ入出力に使うピンで、18-25がGND。
次に、これらのピンに直接出力してみる。
asm/system.hがバグってるみたいで使えなかったのでppdev.hを使うことにした。
http://www.siio.jp/index.php?How2LinuxParport
を参考にして書いたコードが次
#include <stdio.h> #include <fcntl.h> #include <sys/ioctl.h> #include <linux/ppdev.h> #include <linux/parport.h> int main(void) { int parport; parport = open("/dev/parport0", O_RDWR); if(parport == -1){ fprintf(stderr, "Can't open /dev/parport0\n"); return 1; } if(ioctl(parport, PPCLAIM)){ fprintf(stderr, "PPCLAIM error\n"); close(parport); return 1; } /* D3からD7を1/10秒間隔で順番にHにする */ int i; while(1){ for(i = 8; i < 256; i <<= 1){ usleep(100000); ioctl(parport, PPWDATA, &i); } } ioctl(parport, PPRELEASE); close(parport); return 0; }
それで、テストするためにやったのがこれ。パラレルポートにLED直差し(笑)
5つのLEDが順番にくるくると点灯している。上手く出力出来ているようだ。あっさりと出来た。
普通はちゃんと基板に実装するんだけど、これはこれでシュールだ。本当は抵抗ぐらい付けるべきだけど(^^;