「PIC AVR 工作室」サイトの日記的なブログです。
サイトに挙げなかった他愛ないことを日記的に書き残してます。
PIC AVR 工作室 ブログ



文字通り、裏をかかれた。今日は沖縄県地方の台風8号
で、M2だったから、本線も黄色進行で24時まであやち
がでてたから、てっきりM2と思ってたら、

https://www.youtube.com/watch?v=vxSyJT45L-A

ポン子のチャンネルで、いつも以上にスタッフが弾けて
大騒ぎになっている。本線に載らないからって、こんな
弾けてて良いのか?という疑問はおいておいて、後から
追いかけ再生中。M2だからと言って、気が抜けないな。






ESP32、ADCのサンプリング速度はいかほど?っていうのが
気になっているので、単純ループでぐるぐる回しながら
適当な数サンプリングしたら、どのくらいになるのかを
計測してみた。

でっち上げたスケッチはこんな。(例によって、不等号記号
は全角に変えてあるので、このスケッチ動かしてみようと
いう方は、半角に戻してからコンパイルしてください)

#include <driver/adc.h>

/* global variables */

#define LED 2
#define SAMPLES 2048

/* sub routine */

void prt_hex(int n, char c) {
  for (int i = 1; i  4; i++) {
    if ( (n >> (4*i)) == 0) {
      Serial.print(c);
    }
  }
  
  Serial.print(n, HEX);
}

/* main process */

void setup() {
  Serial.begin(115200);
  pinMode(LED, OUTPUT);

  /* set up ADC1 parameters */
  Serial.println();
  Serial.println("-----  adc width = 12 bits  -----");
  adc1_config_width(ADC_WIDTH_BIT_12);
  adc1_config_channel_atten(ADC1_CHANNEL_0,ADC_ATTEN_DB_0);
}

void loop() {
  //int val[SAMPLES];
  uint16_t val[SAMPLES];

  Serial.println("start sampling.");
  Serial.println();
  digitalWrite(LED, HIGH);

  /* input 1024 samples with simple loop */
  unsigned long starttime = millis();
  for (int i=0; <SAMPLES; i++) {
    val[i] = adc1_get_raw(ADC1_CHANNEL_0);
  }
  unsigned long endtime = millis();

  digitalWrite(LED, LOW);
  Serial.println("complete sampling.");
  Serial.println();

  Serial.print("start time = ");
  Serial.print(starttime); 
  Serial.println("ms");
  Serial.print("end   time = ");
  Serial.print(endtime); 
  Serial.println("ms");
  Serial.print("total time = ");
  Serial.print(endtime - starttime); 
  Serial.println("ms");
  Serial.print("unit  time = ");
  Serial.print((endtime - starttime) * 1000 / SAMPLES); 
  Serial.println("us / sample");
  Serial.print("sampling speed = ");
  Serial.print(1000 * SAMPLES / (endtime - starttime)); 
  Serial.println("sps");
  
  for (int i=0; i<SAMPLES; i++) {
    if ((i % 16) == 0 ) {
      Serial.println();
      prt_hex(i, '0');
      Serial.print(" : ");
    }
    prt_hex(val[i], ' ');
    Serial.print(", ");
  }
  Serial.println();
  
  
  for (;;);
}

これを実行してみると、



こんな感じ。単純ループでは、25kspsくらいってこと
なのかな。

で、サンプルビット数を12から9に落としてみると、



ほとんど変わらない。数%向上するだけ…

なんだろうねぇ?ADC以外のところで、やたらと時間を
食っているのかねぇ?でも、GPIO制御とか使ってない
だろうしなぁ。なんだろう?

でも、12ビット精度でも、逆に言えば20ksps(10kHz)
くらいならナントカなるといえるのかもしれない。



気になるところが何点か。

ひとつは、データを取り込んでストックしておく
配列の領域、4kBを超えるとエラーになっちゃうっぽい。
2048サンプル×uint16_t(2バイト)とか、1024サンプル
×int(4バイト)とかだとokなんだけど、サンプル数を
この2倍とかにしたり、データ長を長くしたりすると
実行時にエラー吐いてしまうなぁ。

たしか、SRAMは512kB搭載していたはずなんだけど、
領域が分かれているのかな?へんな領域に押し込まれて
いて、実行時にちゃんとアクセスできなくてエラーに
なっているのかなぁ?

どんだけドでかいSRAM載ってても、さくっと配列を
作って置いておけるようじゃないと、色々こまるよな。


ESP32のArduinoまわり、調べても調べても、色々知りたい
情報までたどり着くのが大変なんだよな。触ってみて
初めてわかった。


あと、このスケッチで使っているアナログ入力回りの関数
は、多分ESP32の素のC言語用ライブラリで、いわゆる
ArduinoのanalogRead関数使ったりすると、また結果が
変わって来るんだろうと思うけど、その辺もちょっと
見比べてみたいんだよな。






https://twitter.com/macbs/status/1015903687766446080

QD。





Rubyというか、railsでSVG図形を扱いたいなぁと思って
探してみたんだけど、

http://d.hatena.ne.jp/oldfish/20101216/1292519919

Cairoがいいの?

https://techracho.bpsinc.jp/baba/2011_07_04/3713

RMagickはSVG対応しているの?

いくつか情報漁ってみたものの、なかなか良いところまで
行き着かなかった。
SVGの画像データ、xmlのままじゃなくて、簡単にファイル
として入出力したり、サーバ上のストレージに保存したり、
webページから眺められたり、もしくはBLOBとしてDBに
保存したり出来るのを期待しているんだけどな。





https://twitter.com/penta_twi/status/1015929682129088514

ゆるふわ系。





https://twitter.com/nied_inok/status/1016278562628759553

批判されないために取りやめたのか。つまり、被災者とか
犠牲者の人なんぞ、どうでもよいと。自分の人気取りに
資するものかどうか。典型的なサイコパスじゃない?

https://twitter.com/usa_hakase

カジノと、それに群がるお友達の財布の方が大事。

https://twitter.com/campintheair/status/1016561082469527552

こう見ると、なんか、リアル「ヨブ=トリューニヒト」と
いう気がしてくる。

地球教とは違う宗教を推しているみたいだけど。



コメント ( 0 )