satotsuのいろいろつくってみた日記

いろいろつくってみたあれこれの記録。

ついにオシロを買った!(RIGOL DS1054Z)

買ってしまいました。据え置きのオシロ

ネットで安くて良さそうなの探して見つけたこれ。

RIGOL DS1054Zです。中国メーカー。

4chで帯域は50MHzと普段使いには十分な性能。

f:id:msatotsu:20180128171448j:image

 

輸入かと思いきや、モノタロウで扱ってました。

お値段税別49,900円。月一の計測機器10%オフの日に買うとお得ですよ。

https://www.monotaro.com/p/5574/2733/

 

寒い中運ばれてきて結露してたので、部屋で温めてあげる。

合わせてAmazonベーシックの台がとてもいい感じ。

こちらを参考にしました。

https://rabbit-note.com/2017/12/23/rigol-ds1054z-stand/

 

電源入れたらプローブを補正。早速使ってみた。

f:id:msatotsu:20180128171221j:image

 

前にちゃんと見れなかった、arduinoで作ったタイマー1の相補PWMが確認できた。すごい。

 

ちなみに前に取ったのはこんな感じ。

すごいなまってる。帯域は200kHzだし。

そして1chなので相補がわからない。。

f:id:msatotsu:20180128172321j:image

 

ちょくちょく波形見たいときにストレスなく見られるのがとてもいい感じ。

埃まみれにならないよう、カバーつけたいな。 

esp32の時刻合わせをntpでやってみる。

esp32のサンプルスケッチで時計を動かせたので、時刻も合わせたくなった。

こちらを参考にさせていただく。

qiita.com

 

はまったのが、wifiに接続するところ。

何回WiFi.status()やってもWL_NO_SSID_AVAILが返ってくる。

scanしたら見つけてるので、見えないわけではないみたい。。

statusの内容はここの.hファイルを参照。

github.com

 

結果的には、beginの前にdisconnectするとできた。

しばらく繋がらなかったら、またdisconnectしてbeginする。

WiFi.disconnect();
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);

macでesp32のoledひからせるまで。

これ届いた。さっそく開発環境をととのえるよー。

ja.aliexpress.com

まずはGithubからesp32の設定とってきて、USBドライバをインストールする。

qiita.com

たぶんうちのはESP 32 Dev Moduleじゃなくて、Heltec_WIFI_LoRa_32でいいはず。

スケッチの書き込みにはボタン押してモード変更してやる。

-> [RST]押しながら[PRG]押して、[RST]を離せばおK。

 

コンパイラでBLEが無効とかでるのは特に問題なさそうだけど。

ここからダウンロードして、esp32フォルダに置けば出なくなる。

github.com

 

で、びんぼうでいいのと同じようにOLED動かそうとするも動かない。。

スケッチ書き込み前はちゃんと動いてたので、ハード的には問題ないはず。

あとシリアルはなんか吐き出してるので、i2cまわりがあやしそう。

 

Aliでみてみた。SDAが4,SCLが15らしい。

https://ae01.alicdn.com/kf/HTB1hdmKSpXXXXbMXFXXq6xXFXXXR.jpg?size=188590&height=599&width=1000&hash=9ae2381838511582087d4c5a7912a60d

なので、SSD1306 display(0x3c,4,15);でうごくはず。 動かない。。

 

結局、ここでまんまのボードとサンプルがあったので試す。これは動いた。

robotzero.one

 

#include "SSD1306.h"でやるときは、setup()で、

// put your setup code here, to run once:
  pinMode(16, OUTPUT);
  digitalWrite(16, LOW); // set GPIO16 low to reset OLED
  delay(50);
  digitalWrite(16, HIGH); // while OLED is running, must set GPIO16 to high
  Wire.begin(4, 15);
  display.init();

  display.flipScreenVertically();

ってやると動いた。16pinがみそらしい。

macでelectronいれるまでのめも。

mac(osx el capitan 10.11.6 )にelectronいれるまでのめも。

node.jsを最初にpkgでいれたけどうまくいかずに結構はまった。

 

nodenvでnode.jsをいれる。今回は安定の8.9.4で。

joppot.info

 

electronをいれる。sudoつけるとうまくいかない。でもこれはいらないかも。

npm install electron -g

 

gitでサンプルひろってきて動かしてみる。動く。ヽ(=´▽`=)ノ

masaru-sasaki.sakura.ne.jp

macでsinatraインストールするまでめも。

まずはhomebrewいれる。

brew.sh

次にrubyをいれる。とりあえず2.4.1で。(2.4.3とか2.5.0でもいいかも。)

qiita.com

うまく入らないのでここを見る。

qiita.com

 やっとこさsinatraのターン。

qiita.com

で、myapp.rbにhello world描いて実行。

ruby myapp.rb

とりあえず動く。で、何するか。。

arduinoで相補PWMだしてみる。

arduinoでも相補PWM出せるよね。ということで試してみた。

 

これが一応最終形。オシロが1chしかないので、PWMの出力2つをつまんでる。

deadtimeと相補PWMでてるっぽい。1kHz。

f:id:msatotsu:20171229204739j:image

 

でも信号の切り替わりを拡大してみると、変なレベルがでてる。-2.5Vくらいのやつ。なんだこれ。

f:id:msatotsu:20171229205034j:image 

 

こいつのせいで、10kHzでdeadtimeを0にしても変な段つき波形になる。。

f:id:msatotsu:20171229205133j:image

 

一応ソースのせとく。timer1を使ってる。

 

#include <avr/io.h>
#include <avr/interrupt.h>

void PWM_init(uint8_t ch, uint8_t N, uint16_t top) {
// 0:in, 1:out, DDRB,DDRD: DIO, DDRC: AnalogIn
// timer0->PD6,5, timer1->PB1,2, timer2->PB3,PD3
DDRB = DDRB | B00000110;


// COM1x1,COM1x0: duty, 10: OCR1/TOP, 11:1-(OCR1/TOP)
TCCR1A = TCCR1A & ~(bit(COM1A1)|bit(COM1A0)|bit(COM1B1)|bit(COM1B0));
TCCR1A = TCCR1A |bit(COM1A1)|bit(COM1B1)|bit(COM1B0);
TCCR1B = (TCCR1B & B11100000) | bit(WGM13) | N;

TCNT1 = 0;
TIMSK1 = bit(TOIE1);
ICR1 = top;
OCR1A = 2000; // deadtime 0.5us -> 0.5us/50us*800=8
OCR1B = OCR1A - 1000;
}

void setup() {
noInterrupts();

TCCR1A = 0;
TCCR1B = 0;
TCNT1 = 0;

PWM_init(1, 1, 8000);

interrupts();
}

ISR (TIMER1_OVF_vect) {
} void loop() { // put your main code here, to run repeatedly: }