ユーザー名:

パスワード:


パスワード紛失

新規登録
ビートス オンラインショップへ
アブソリュート株式会社様へ

USB接続の7セグ表示器に改造してもいいんじゃないでしょうか

前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 .2 | 投稿日時 2016-1-23 16:11
disklessfu  <EXPERT>   投稿数: 209
USB接続で3桁以上の7セグ表示器が欲しいと思っているんですが、
「USB接続で」となると、見つからないです。
このキットはチップがUSB機能を持ったPIC18F14K50なので
ハードに関してはごく簡単な改造だけで
USB接続の7セグ表示器に仕立てられそうです。
他の社から出ているUSB接続じゃない7セグ表示器キットにUSB対応チップを組み合わせるより、
ずっとシンプル・コンパクトな構成にできると思います。
イイね!の数:0 返信する
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2016-2-15 22:44
disklessfu  <EXPERT>   投稿数: 209
このキットのファームウェアのソースはMPLAB C18用で供給されているので
深刻な問題ではないんですが、MLAのソースを見ていて
あることに今頃になって気づきました。

XC8だと、USB機能と、CCP割り込みやタイマー割り込みや外部割り込み等の、
いわゆる一般的な割り込み機能とを(少なくとも今のところ)両立できないようです。

なので、XC8では、タイマー割り込みが必要な、USB接続の7セグ表示器のファームウェアは作成できないと思います。

同じ理由で、USB接続赤外線リモコンのファームウェアをXC8に移行させることもできないようです。
イイね!の数:0 返信する
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2018-2-12 11:43
disklessfu  <EXPERT>   投稿数: 209
自己レスですが、今一番安くUSB接続の7セグ表示器を手に入れるなら、
TM1637搭載の4桁7セグLEDのモジュールと、小型・激安なArduino互換モジュールの組み合わせですね。

詳細な品名までは書きませんが、TM1637搭載の4桁7セグLEDのモジュールはアマゾンのあわせ買い対象商品の3個セットが650円、
Arduino互換のモジュールについては、アマゾンで1個から買える商品が、今日現在、中国発送ですが送料込で369円です。

激安なArduino互換モジュールはUSBシリアル変換チップがマイナーなCH340になってしまうのがちょっとした短所ですが、
USB接続の7セグ表示器が激安で、ソフトウェアを自力で全く書く必要もなく、手に入ります。
GPIOのない普通のPCをサーバにする場合なんかにUSB接続の7セグ表示器は便利です。
イイね!の数:0 返信する
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2018-5-13 10:13 | 最終変更
disklessfu  <EXPERT>   投稿数: 209
動画をアップしました。
https://www.youtube.com/watch?v=jXxo90emvyI


作り方は、中華・激安7セグ・モジュールと、同じく中華・激安の互換Arduino nanoを、僅か4本のリード線で単純にVCC,GND,CLK,DIOを接続した上で基板同士をホットボンドで軽く接着するだけです。
あとはArduinoに(https://github.com/bremme/arduino-tm1637/blob/master/examples/SerialPrint/SerialPrint.ino)のスケッチを書き込めば完成です。
作例では、中華・激安7セグ・モジュール(TM1637搭載)は、Amazonで3個セット通常配送無料で、650円(1個あたり217円)、
中華・激安の互換Arduino nanoはAmazonで、USBシリアル変換チップがCH340のタイプで、送料込み369円でした。
CH340は中華製のわりと新しめのチップなのでドライバのインストールが必要かな?と思っていましたが、実際にはWindows10、Linux(x64)、Linux(Raspberry Pi)全て、インボックスドライバがあり、自動認識されました。
ネガティブ面の情報も記しておきます。
ArduinoとTM1637との間は、I2C派生プロトコルでの通信なので時間がかかりますし、Arduino側のパワーも食います。なので、書き換えと書き換えの間は最低でも約1秒、開ける必要があります。でもスクロール機能がありますから、1度に長い文字列を書き込めば、ある程度、そのネガ面は克復できるでしょう。
あと、多分Arduinoのライブラリの制限でしょうけど、「$echo > /dev/ttyUSB0」みたいな使い方はできません。きちんとopenしてその後、環境によりますが、1.5秒から2秒待った後に最初の書き込みをおこなう必要があります。ただし、その後は、上述のように、1秒毎の書き込みが可能です。



動画の前半撮影時にPC側で使用していた、サンプルプログラムも載せておきます。
#include <stdio.h>
#include <sys/ioctl.h>
#include <fcntl.h>
#include <termios.h>
#include <time.h>
#include <string.h>

#define SERIAL_PORT "/dev/ttyUSB0"

int main(int argc, char *argv[])
{
struct termios tio; // シリアル通信設定
int baudRate = B9600;
int i, j = 0;
int fd;
time_t timer;
char device[128];
char myTime[9];
char str[5];
memset(str, 0, 5);
unsigned char buf[5];

if(argc > 1)
strcpy(device, argv[1]);
else
strcpy(device, SERIAL_PORT);

fd = open(device, O_WRONLY);
if (fd < 0) {
printf("open error\n");
return -1;
}

sleep(2);

tio.c_cflag += CLOCAL; // ローカルライン(モデム制御なし)
tio.c_cflag += CS8; // データビット:8bit
tio.c_cflag += 0; // ストップビット:1bit
tio.c_cflag += 0; // パリティ:None

cfsetispeed( &tio, baudRate );
cfsetospeed( &tio, baudRate );
cfmakeraw(&tio); // RAWモード
tcsetattr( fd, TCSADRAIN, &tio ); // デバイスに設定を行う
ioctl(fd, TCSETS, &tio); // ポートの設定を有効にする

while(1)
{
time(&timer);
timer+=1;
strftime(myTime, 9, " %H%M%S", localtime(&timer));
strncpy(str, myTime+j, 4);

sprintf(buf, "%s\n", str);
write(fd, buf, 5);

j+=4;
if(j==8)
j=0;
sleep(1);
}

close(fd);
return 0;
}
イイね!の数:0 返信する

このトピックに投稿する

題名
ゲスト名   :
投稿本文