LoginSignup
2

More than 5 years have passed since last update.

RS-232Cでパルスジェネレータを作る

Posted at

パルスジェネレータが欲しかったんだけど水晶振動子や抵抗やコンデンサなど、結局材料が手元に何も無かったのでソフトウェアでやることに。

環境

  • Mac OS X 10.9.5

方針

  • USB-RS232CアダプタをかませてRS-232Cのどこかの出力を振動させる。
  • 出力電圧などはとりあえず置いておいて、とにかく振動させることを目的とする。

参考文献

キモ

int fd = open(argv[1], O_RDWR | O_NONBLOCK);

int modem = 0;
ioctl(fd, TIOCMGET, &modem);

modem |= TIOCM_DTR;
ioctl(fd, TIOCMSET, &modem);

modem &= ~TIOCM_DTR;
ioctl(fd, TIOCMSET, &modem);

close(fd);

ioctl(fd, TIOCMGET, &modem)でモデム状態を取得し、modem |= TIOCM_DTRもしくは、modem &= ~TIOCM_DTRでDTR信号だけを変化させる。それをioctl(fd, TIOCMSET, &modem)で設定してやることで、DTR信号の電圧を変化させることができる。

ちなみにargv[1]には、実行時に引数に与える/dev/tty.usbserial-FTG97M9Sみたいなのが入る。BUFFALOのUSB-RS232Cアダプタケーブル使ったらこれだった。

上記のコードを適当に使ってやると、手元の環境では+10Vと-10Vで振動した。

その他

いろいろ試した内容は文章にするのが大変なので、以下箇条書き。

  • RTS信号を変化させようとTIOCM_RTSを使ってみたけど、変化しなかった。
  • Wikipediaで入出力がOUTになっている信号しかホスト側からは制御できないだろうと予想。
  • write()などを使用してTxDに書き出す方法でもできないことは無いんだろうけど、スタートビット、パリティビット、ストップビットなどが付与されちゃって、思い通りの波形にならないだろうと予想。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2