まよらー's 電子工作日記

回路設計、基板設計、Arduino、M5Stack、FPGAとか

OWON製SDS1104/中華オシロを買ってみた

とある事情で、Arduinoを用いた電子回路のプリント基板を作ることになった。

UART通信が常時流れてきて、それを受けて複数のLEDをPWM駆動する、というもの。

それを他人に提供するので、しっかりとその通信波形とPWMの様子をモニタしておきたい。

 

、、、そうなると、やっぱ信号波形モニタしたい。。。

 

ということで、やっすいオシロ無いかなーと楽天市場を探したら、そこそこあった。

3万円台で4ch、しかもカラー!!!

 

中国製ということであまり馴染みがないけど、まあ、使えんこともないでしょー、と楽観的に考えてポチってみた。

 


 

待つこと2日くらいで到着。

早速開封して中身をチェック。

ちょっと心配していたが、期待通りプローブが4本ついていて安心した。

(プローブ別売りとかだったら泣くw)

それとCD-ROMがついている。

そこからアプリをインストールするようになっている。

そのアプリでは、PCから波形を吸い上げたり、オシロの設定をPCから変更できたりする。使い勝手もそんなに悪くない。

 

プローブを接続し、電源を入れて、オシロ本体のチェック用矩形波を測定し、波形観測をしてみた。

プローブの補正が大きくずれていて、波形が歪んでいたが、付属のドライバみたいなのでプローブの調整ねじを回して、いい感じにできた。

 

次にトリガをかけてみる。

トリガの種類は、、エッジとよくわからないビデオ信号の2つのみ。。。

A→Bトリガや、パルス幅トリガは使えないようだ。。。

まあ、値段的にそこまで求めてはいけないのかも。。。

 

とりあえず、エッジトリガで4ch使えれば、ある程度の信号計測はできるので、今後、活躍してくれることを祈ってます。

 

プリント基板製作 / PCB WAY / 2層基板

とある事情でプリント基板を作る必要が出てきたので、作ってみた。

 

Kicadを使って回路図作成→基板設計をして、ガーバデータを作成し、いざどのメーカで基板製造をするか、、、ということで少し調べた。

 

まずは安心の国内メーカで、と行きたいが、予算はないので、できるだけ安くしたい。

最近は、どのプリント基板メーカもHPでカンタン見積もりできるようになっているので、金額の比較がしやすい。

 

Web検索で「プリント基板製造」で出てきたところで適当に比較してみた。

基板サイズは 200mm * 150mm 。層数は2層。枚数は最小単位。

<Unicraft>         18,959円(税別)

<Pban.com>        36,090円(税別)

<プリント基板センターPB> 28,620円(税別)

 

、、、んー、もうちょっと安いとこないかな、、、

 

ということで、安いと噂の中国メーカも見てみた。

(配送会社はFedEX.IPを選択)

<PCBWAY>  $55.18+送料$16.56=$71.74

<PCBgogo> $55.00+送料$37.00=$92.00

 

1ドル155円とすると、PCBWAYだと11,120円。。。

 

やっぱ安い。円安じゃなかったら1万円切るくらいかな?

 

2層基板だし、そんなに品質気にならないっしょ💦💦

ということでPCBWAYで製作することに。

 

とはいえ、ガーバの出力をしてP板発注したことないし、中国メーカだと、データに問題あったときどうなるんだろ、、、と心配していたが、HPのヘルプページにはCAD毎のガーバ出力の仕方が紹介されているではないか oh--。

 

Kicadでのガーバ出力の記事を参考にしてガーバデータを作成し、いざ注文。

HPで製造進捗が確認できるようだ。

なんか結構親切ですねー。

2日くらいで製造完了し、発送の連絡がメールで来た。

そして3日くらいして、基板が無事に自宅に到着!

 

 

しっかり梱包されてる。

基板も見た感じ問題なさそう。

Intel FPGA / NiosⅡSBT / まずはincludeファイルについて調べてみる

とりあえずLチカが無事に成功したので、ソースコードについて、理解を深めていく。

ソースコードは以下。

Lチカソースキャプチャ1

 

includeファイルについて

<>で囲まれたファイルはアプリインストールフォルダ以下にあるっぽい。

 

・stdio.h

C:\intelFPGA_lite\18.1\nios2eds\bin\gnu\H-x86_64-mingw32\nios2-elf\include

にあった。

これがないとprintf文が使えないらしい。

 

・system.h

C:\Intel\software\C4_NIOS_TEST_SOFT_bsp

にあった。

コードで使うマクロがたくさん定義されている。

コードを作るときには必須で必要と思う。

 

・altera_avalon_pio_regs.h

C:\Intel\software\C4_NIOS_TEST_SOFT_bsp\drivers\inc

にあった。

QuartusPrimeのPlatformDesignerで登録したペリフェラルへのアクセスは、ここにあるファイルをincludeするっぽい。

 

とりあえず、includeファイルをすべてコメントアウトして"Build Project”をしてみた。

その時の、エラーとワーニングは以下の通り。

 

10:52:17 **** Incremental Build of configuration Nios II for project C4_NIOS_TEST_SOFT ****
make all 
Info: Building ../C4_NIOS_TEST_SOFT_bsp/
C:/intelFPGA_lite/18.1/nios2eds/bin/gnu/H-x86_64-mingw32/bin/make --no-print-directory -C ../C4_NIOS_TEST_SOFT_bsp/
[BSP build complete]
Info: Compiling main.c to obj/default/main.o
nios2-elf-gcc -xc -MP -MMD -c -I../C4_NIOS_TEST_SOFT_bsp//HAL/inc -I../C4_NIOS_TEST_SOFT_bsp/ -I../C4_NIOS_TEST_SOFT_bsp//drivers/inc  -pipe -D__hal__ -DALT_NO_INSTRUCTION_EMULATION -DALT_USE_SMALL_DRIVERS -DSMALL_C_LIB -DALT_SINGLE_THREADED -DALTERA_AVALON_JTAG_UART_SMALL -DALTERA_AVALON_UART_SMALL    -O0 -g -Wall   -mno-hw-div -mno-hw-mul -mno-hw-mulx -mgpopt=global  -o obj/default/main.o main.c
main.c: In function 'main':
main.c:25:3: warning: implicit declaration of function 'printf' [-Wimplicit-function-declaration]
   printf("Hello from Nios II!\n");
   ^
main.c:25:3: warning: incompatible implicit declaration of built-in function 'printf'
main.c:25:3: note: include '<stdio.h>' or provide a declaration of 'printf'
main.c:28:4: warning: implicit declaration of function 'IOWR_ALTERA_AVALON_PIO_DATA' [-Wimplicit-function-declaration]
    IOWR_ALTERA_AVALON_PIO_DATA(LED_PIO_BASE, 0xFF);
    ^
main.c:28:32: error: 'LED_PIO_BASE' undeclared (first use in this function)
    IOWR_ALTERA_AVALON_PIO_DATA(LED_PIO_BASE, 0xFF);
                                ^
main.c:28:32: note: each undeclared identifier is reported only once for each function it appears in
main.c:29:4: warning: implicit declaration of function 'usleep' [-Wimplicit-function-declaration]
    usleep(500000);
    ^
make: *** [obj/default/main.o] Error 1

10:52:18 Build Finished (took 1s.7ms)



これに対して、includeファイルを一つずつコメントを外して、Build Projectしてみた。

・stdio.h

 printfに関するエラーが消えた。

・stdint.h

 何も変わらない。

・system.h

 LED_PIO_BASEに関するエラーが消えた。

 代わりにIOWR_ALTERA_AVALON_PIO_DATAに対してエラー扱いになった。

・altera_avalon_pio_regs.h

 IOWR_ALTERA_AVALON_PIO_DATAに関するワーニングが消えた。

 が、これに関するnoteが複数出てきた。

 恐らくLED_PIO_BASEが定義されていないためだろう。

 試しに、system.hも併せてコメントを外したら、IOWR_ALTERA_AVALON_PIO_DATAとLED_PIO_BASEに関するエラー、ワーニングが消え、noteも無くなった。

・sys/alt_sys_wrappers.h

 usleepに関するワーニングが消えた。

 

ということで、stdint.hはいらなさそう。

それ以外はこの短いコード中でも参照されるものであることが分かった。

Intel FPGA / NiosⅡSBT / Buildについて

Build All

Build project

の違いが分からない。

 

Build Allは、実行したら下記のようなメッセージがでた。

Build Allメッセージキャプチャ1

なぜかbspフォルダの方しかBuildされていないようだ。。。

 

Build Projectは全体のBuildを実行しているっぽい。

includeファイルをコメントアウトしてBuild Projectしたら、エラーとワーニングが出てきた。ちなみにBuild Allではエラーとワーニングは出なかった。

Intel FPGA / NiosⅡSBT / UART core を使ってみた

 

UARTモジュールを使ってみる。

 

とりあえず、Lチカのコードに継ぎ足してみた。

 

仕様はこんな感じ↓。

LED点灯時にASCIIの”A(0x41)”を送信し、LED消灯時にASCIIの”B(0x42)”を送信する。

TXDとRXDはFPGA内でループバックするようにトップモジュールでつないだので、送信した上記のデータはそのまま受信することになる。

受信した結果をJTAG_UARTでコンソールに表示する。

 

ソースコードは以下。

 

 

  1. #include <stdio.h>
  2. //#include <stdint.h>
  3. #include "system.h"
  4. #include "altera_avalon_pio_regs.h"
  5. #include "altera_avalon_uart_regs.h"
  6. #include "altera_avalon_jtag_uart_regs.h"
  7. #include "sys/alt_sys_wrappers.h"
  8.  
  9. int main()
  10. {
  11.   printf("Hello from Nios II!\n");
  12.   char cBuf;
  13.   while (1) {
  14.      IOWR_ALTERA_AVALON_PIO_DATA(LED_PIO_BASE, 0xFF);
  15.      IOWR_ALTERA_AVALON_UART_TXDATA(IO_UART_BASE, 0x41);
  16.      cBuf = IORD_ALTERA_AVALON_UART_TXDATA(IO_UART_BASE);
  17.      IOWR_ALTERA_AVALON_JTAG_UART_DATA(JTAG_UART_BASE, cBuf);
  18.      usleep(500000);
  19.      IOWR_ALTERA_AVALON_PIO_DATA(LED_PIO_BASE, 0x00);
  20.      IOWR_ALTERA_AVALON_UART_TXDATA(IO_UART_BASE, 0x42);
  21.      cBuf = IORD_ALTERA_AVALON_UART_TXDATA(IO_UART_BASE);
  22.      IOWR_ALTERA_AVALON_JTAG_UART_DATA(JTAG_UART_BASE, cBuf);
  23.      usleep(500000);
  24.   }
  25.  
  26.   return 0;
  27. }
  28.  
 
PIOと同じ要領で、レジスタライト、リードの関数を使って、データ送信、受信をする。
レジスタ書き込みの関数名は、altera_avalon_uart_regs.h の中に書かれている。
(送信:#define IOWR_ALTERA_AVALON_UARTTTXDATA(base, data))
(受信:#define IORD_ALTERA_AVALON_UART_RXDATA(base))
 
結果は以下。
 

UARTお試し_コンソール
想定通りに動いていた!
 
が、よくよく考えると、送信受信ともにバッファがないので、文字列を扱おうと思ったら、割り込み使って効率よく転送する必要がある。。。
 
Intel FPGA 16550 Compatible UART Core というIPならバッファがありそう。
なので、今度はこっちを試してみる。
 

はんだこて購入 / 楽天市場 / KLARYTYMA

プリント基板を作り、表面実装の細かい部品をはんだ付けする必要が出てきたので、今持っているはんだこて(錆びてる、温度調節なし、ON/OFFスイッチなし)では作業がしづらそう。

 

使い勝手が良さそうなはんだこてを探すべく、楽天市場へ。

 

すると1980円で中々良さそうなものを発見!

 


 

 

温度調節出来て、それをデジタル表示してくれるのはありがたい。

そしてON/OFFスイッチがついているのもありがたい。

 

早速ポチって到着を待つこと2日。

商品が届いたー(*^-^*)

 

こて先がオプションで5つあるので、元からついているものと合わせて6つあるので、錆びてもしばらく安心だ。

こて先の交換はとても簡単。ねじの部分を回すと、そこが外れるようになる。

外すと ↓ のように3つに分れるので、こて先を他のものにはめ直して再度、ねじの付いたカバーを被せてねじを回して固定するだけ。

 

温度調整は、50℃単位でしかできない?あるいは表示が50℃単位なだけか?

とりあえず持ち手のところにある表示機は50℃単位の表示であった

200℃、250℃、300℃、350℃、400℃、450℃

の6通り。まあ、それくらい調整できれば大丈夫でしょう。

 

加熱スピードはどれくらいだろうか、、、

とりあえず400℃にセットし、はんだを溶かすことができるようになるまでの時間を計測してみた。

すると、約25秒ではんだが溶け出した。

まずまずの速さですねー(^O^)/

 

ということで、良い買い物だったと思います。