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

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

新規登録して質問してみよう
ただいま回答率
85.35%
コンパイル

コンパイルとは、プログラミング言語のテキストソース(ソースコード)をコンピュータ上で実行可能な形式(オブジェクトコード)に変換することをいいます

Arduino

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

Q&A

解決済

3回答

3399閲覧

ATtiny85でDAコンバータとのSPI接続でコンパイルエラー

_kimura_

総合スコア14

コンパイル

コンパイルとは、プログラミング言語のテキストソース(ソースコード)をコンピュータ上で実行可能な形式(オブジェクトコード)に変換することをいいます

Arduino

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

0グッド

0クリップ

投稿2020/03/21 05:25

編集2020/03/21 08:08

ATtiny85のSPI接続でコンパイルエラー

arduinoUNOにて動作確認済みのソースコードを変更してコンパイルを試みたのですが、エラーが発生してしまいます。

様々なサイトでATtinyでのDAコンバータの制御方法を調べても私の求めているものがありませんでした。

よろしければ助けていただけると嬉しいです。

####コード

Arduino

1#include <MCP4922.h> // https://github.com/helgenodland/MCP4922-Arduino-SPI-Library 2#include <tinySPI.h> // https://github.com/JChristensen/tinySPI 3 4#define MOSI 0 5#define SCK 2 6#define SS 3 7#define LDAC 4 8 9MCP4922 DAC(MOSI,SCK,SS,LDAC); //DAC(MOSI,SCK,SS,LDAC) 10void setup() { 11 SPI.begin(); 12 13} 14 15void loop() { 16 for(int i = 0; i < 4096 ; i++){ 17 DAC.Set(i,4095-i); 18 } 19}

####エラーメッセージ

arduino

1Arduino:1.8.12 (Windows Store 1.8.33.0) (Windows 10), ボード:"ATtiny25/45/85, Enabled, CPU, ATtiny85, 8 MHz (internal), EEPROM retained, B.O.D. Disabled, Enabled" 2 3In file included from C:\Users\kntki\OneDrive\�h�L�������g\ArduinoData\packages\ATTinyCore\hardware\avr\1.3.3\cores\tiny/Arduino.h:168:0, 4 5 from sketch\sketch_mar21a.ino.cpp:1: 6 7C:\Users\kntki\OneDrive\�h�L�������g\ArduinoData\packages\ATTinyCore\hardware\avr\1.3.3\variants\tinyX5/pins_arduino.h:48:14: error: expected ',' or '...' before numeric constant 8 9 #define SCK 2 10 11 ^ 12 13C:\Users\kntki\OneDrive\�h�L�������g\Arduino\libraries\MCP4922-Arduino-SPI-Library-master/MCP4922.h:27:26: note: in expansion of macro 'SCK' 14 15 MCP4922(int SDI, int SCK,int CS, int LDAC); 16 17 ^~~ 18 19sketch_mar21a:9:29: error: no matching function for call to 'MCP4922::MCP4922(int, int, int, int)' 20 21 MCP4922 DAC(MOSI,SCK,SS,LDAC); //DAC(MOSI,SCK,SS,LDAC) 22 23 ^ 24 25In file included from C:\Users\kntki\AppData\Local\Temp\arduino_modified_sketch_957046\sketch_mar21a.ino:1:0: 26 27C:\Users\kntki\OneDrive\�h�L�������g\Arduino\libraries\MCP4922-Arduino-SPI-Library-master/MCP4922.h:27:5: note: candidate: MCP4922::MCP4922(int, int) 28 29 MCP4922(int SDI, int SCK,int CS, int LDAC); 30 31 ^~~~~~~ 32 33C:\Users\kntki\OneDrive\�h�L�������g\Arduino\libraries\MCP4922-Arduino-SPI-Library-master/MCP4922.h:27:5: note: candidate expects 2 arguments, 4 provided 34 35C:\Users\kntki\OneDrive\�h�L�������g\Arduino\libraries\MCP4922-Arduino-SPI-Library-master/MCP4922.h:24:7: note: candidate: constexpr MCP4922::MCP4922(const MCP4922&) 36 37 class MCP4922 38 39 ^~~~~~~ 40 41C:\Users\User\OneDrive\�h�L�������g\Arduino\libraries\MCP4922-Arduino-SPI-Library-master/MCP4922.h:24:7: note: candidate expects 1 argument, 4 provided 42 43C:\Users\User\OneDrive\�h�L�������g\Arduino\libraries\MCP4922-Arduino-SPI-Library-master/MCP4922.h:24:7: note: candidate: constexpr MCP4922::MCP4922(MCP4922&&) 44 45C:\Users\User\OneDrive\�h�L�������g\Arduino\libraries\MCP4922-Arduino-SPI-Library-master/MCP4922.h:24:7: note: candidate expects 1 argument, 4 provided 46 47exit status 1 48no matching function for call to 'MCP4922::MCP4922(int, int, int, int)' 49 50「ファイル」メニューの「環境設定」から 51「より詳細な情報を表示する:コンパイル」を有効にすると 52より詳しい情報が表示されます。 53

####Arduino UNO での正常動作が確認できているコード

Arduino

1#include <MCP4922.h> // https://github.com/helgenodland/MCP4922-Arduino-SPI-Library 2#include <SPI.h> // https://github.com/JChristensen/tinySPI 3 4MCP4922 DAC(11,13,10,5); 5void setup() { 6 SPI.begin(); 7} 8 9void loop() { 10 for(int i = 0; i < 4096 ; i++){ 11 DAC.Set(i,4095-i); 12 } 13}

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

適当に作成した新規スケッチで、

Arduino

1#define SCK 2 2void func (int SCK);

とすると、

Text

1sketch_mar21c:1:13: error: expected ',' or '...' before numeric constant 2 #define SCK 2 3 ^ 4 5sketch_mar21c.ino:2:16: note: in expansion of macro 'SCK' 6 void func (int SCK); 7 ^~~

と同様のエラーになりました。

pins_arduino.hとMCP4922.hとの間に不整合というかシンボルの衝突が起きている、ということのような。
MCP4922.hでMCP4922::MCP4922()の宣言を行っている部分のint SCKの変数名を変えてやる必要があるのではないでしょうか。


ファイル内容確認しました。

packages\ATTinyCore\hardware\avr\1.3.3\variants\tinyX5/pins_arduino.hでは

C++

1#define SS 3 2#define MOSI 1 3#define MISO 0 4#define SCK 2

UNOの場合多分‪Arduino15\packages\arduino\hardware\avr\1.8.2\variants\standard\pins_arduino.h が使われていて、おおよそ該当する部分は

C++

1#define PIN_SPI_SS (10) 2#define PIN_SPI_MOSI (11) 3#define PIN_SPI_MISO (12) 4#define PIN_SPI_SCK (13) 5 6static const uint8_t SS = PIN_SPI_SS; 7static const uint8_t MOSI = PIN_SPI_MOSI; 8static const uint8_t MISO = PIN_SPI_MISO; 9static const uint8_t SCK = PIN_SPI_SCK;

となっているので、UNOのライブラリではエラーにならないのでしょう。

投稿2020/03/21 08:30

編集2020/03/21 09:05
thkana

総合スコア7703

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

_kimura_

2020/03/21 09:01

元のライブラリをコピーしたtinyMCP4922.hという別のライブラリにて SCK を tinySCK と、とりあえず別の名前にしてみたところ、コンパイルエラーを起こさずに書き込みできました。 しかし、オシロスコープでMCP4922からfor文で生成されるはずの「のこぎり波」が確認できませんでした。
thkana

2020/03/21 09:16

> しかし、オシロスコープでMCP4922からfor文で生成されるはずの「のこぎり波」が確認できませんでした。 それは質問「コンパイルエラー」とはまた別の問題ですね。質問を分けるべきとは思いますが、オシロを持っているのなら、とりあえずSPIの各波形を確認されてDACのデータシートと比べてみては。
thkana

2020/03/21 09:25

スケッチ中の #define MOSI 0 #define SCK 2 #define SS 3 #define LDAC 4 と、ヘッダ中の #define SS 3 #define MOSI 1 #define MISO 0 #define SCK 2 MOSIが一致しませんが、それは大丈夫なんですか?
thkana

2020/03/21 10:07

tinySPIのgithubのページのReadmeには 'tinySPI is an Arduino SPI master library for ATtiny microcontrollers that utilizes the USI hardware in the ATtiny MCUs. ' と書いてあるわけで、SPIではなくUSIを使うならUSCKとDOを使う、ということになるのでしょう。
guest

0

SS,MOSI,MISO,SCK は、"pins_arduino.h" にて定義されていませんか?

ATTinyCore

pins_arduino.h

一部抜粋

#define SS 3 #define MOSI 1 #define MISO 0 #define SCK 2

投稿2020/03/21 07:38

koujikuu

総合スコア401

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

_kimura_

2020/03/21 07:57

"pins_arduino.h"のライブラリ内でSPIで使うピンがすでに固定されてしまっているということでしょうか? ATtiny85のspi接続についてこちらでも可能な限り調べてみようと思います。
guest

0

MCP4922 DAC(MOSI,SCK,SS,LDAC); //DAC(MOSI,SCK,SS,LDAC)

この記述がC++的におかしいです
参考になさってるところをよく見て、これで合ってるのか確認してみてください

投稿2020/03/21 05:35

y_waiwai

総合スコア88042

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

_kimura_

2020/03/21 06:34

ご返答頂きありがとうございます。 Arduino UNO ではこの箇所は MCP4922 DAC(11,13,10,5); という形式で今まで使えておりました。 しかし、ライブラリの内容が十分理解できていないの内容確認をしようと思います。
thkana

2020/03/21 08:40

ミニマルに #define MOSI 0 #define SCK 2 #define SS 3 #define LDAC 4 class MCP4922{ public: MCP4922(int a, int b, int c, int d){ }; }; MCP4922 DAC(MOSI,SCK,SS,LDAC); としてみるとエラーにはなりませんが(変数を使ってないと警告は出る)、どこがC++的におかしいのでしょうか。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問