質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
Arduino

Arduinoは、AVRマイコン、単純なI/O(入出力)ポートを備えた基板、C言語を元としたArduinoのプログラム言語と、それを実装した統合開発環境から構成されたシステムです。

解決済

arduino unoで1kHz以上のサンプリング周波数でAD変換したデータをSDカードに保存しようと思っていますがうまくいきません.

shio
shio

総合スコア3

Arduino

Arduinoは、AVRマイコン、単純なI/O(入出力)ポートを備えた基板、C言語を元としたArduinoのプログラム言語と、それを実装した統合開発環境から構成されたシステムです。

2回答

0評価

0クリップ

1191閲覧

投稿2021/11/11 12:04

前提・実現したいこと

マイコン初心者の者です.arduino unoを用いてAD変換器を作成しています.ただAD変換をする上で,サンプリング周波数を自由に設定できるようにしたいです.現在,timer1の割り込みによって,サンプリング周波数を調整しようとしています.シリアル通信でPCへprintするときは,指定したサンプリン周波数で正しいデータを得ることができました.ただ,シリアル通信によるPCへのプリントとSDカードへの保存を同時にしようとすると正しいデータがでてきません.SDカードはV10(10Mbps)のものを使用しています.SPI通信の速度が遅いことが原因だと私は考えています.ただ,1[kHz]以上でのサンプリング及び,SDカードへの保存を実現したいです.なにかいい方法はあるのでしょうか.
詳しい方,ご教授ください.よろしくお願いします.

発生している問題・エラーメッセージ

上記のとおりです.

該当のソースコード

作成したプログラムは以下の通りです. #include <SPI.h> #include <SD.h> #include <TimerOne.h> #include <MsTimer2.h> const int chipSelect = 10; // Arduino UNOでは10、Arduino MEGAでは53 int ainput; //読み取ったbit数:intは整数 float vinput; //bit数を電圧に変換したもの:floatは浮動小数点数 //電圧測定及びSDカード保存 void mesuring(void){ vinput=5.0*ainput/1023; //上記を電圧mVに変換 Serial.println(vinput);//電圧をシリアル通信でパソコンに送信 /* SDカードに書き込み */ File dataFile = SD.open("datalog.csv", FILE_WRITE); if (dataFile) { dataFile.println(vinput); } dataFile.close(); } void setup(void) { /* ----- Setting up serial communication with PC ------ */ /* ここでUSBを介してPCとシリアル通信を始める。9600はシリアル通信のボーレート */ Serial.begin(115200); while (!Serial) { ; // wait for serial port to connect. Needed for native USB port only //何らかの問題があってシリアルポートに接続できないときは、このループにトラップされる } /* ----- Initialisation of SD card ------ */ Serial.print("Initializing SD card..."); //see if the card is present and can be initialized: if (!SD.begin(chipSelect)) { Serial.println("Card failed, or not present"); // don't do anything more: return; } Serial.println("card initialized."); int i= 100;//サンプリング間隔[micro sec] Timer1.initialize(1000); //マイクロ秒単位で設定 Timer1.attachInterrupt(mesuring); } void loop(void){ ainput=analogRead(A0); }

試したこと

試せることはありません.他力本願で申し訳ありません.

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Arduino

Arduinoは、AVRマイコン、単純なI/O(入出力)ポートを備えた基板、C言語を元としたArduinoのプログラム言語と、それを実装した統合開発環境から構成されたシステムです。