Arduino初心者熱烈大歓迎質問スレ part35
レス数が1000を超えています。これ以上書き込みはできません。
I2CデバイスのSDA,SCLの許容電圧範囲も、I2CデバイスのVCC電圧の制約を受けるものが多いと思う。最大許容電圧が「VCC+0.3V」みたいに。
この場合は、I2Cラインを5Vでプルアップしていいかどうかは微妙になる。(ケースバイケースだけどわりとOK)
でも、RX8900のI2Cは、そういう表現になってなくて最大6.5Vとなっている。電源電圧が異なることがあるのでRTCではわりとよくあると思う。
なので、>>948さんが書いてるように、RX8900自体を3.3Vで使っていても、I2Cラインを5Vでプルアップして使って良さそう。
ただ、なんでマイコンが5Vで、RTCが3.3Vなのかちょっとわからんけど。
ところで、328PのI/OのVIHはVCCが2.4V〜5.5Vの場合は、0.6VCCじゃなかったか。(ふつうのC-MOSは0.7VCCのものが多い)
だから、ちょっと危ういけれど、5V駆動の328Pの入力は、3.3VのC-MOSで駆動できる。
もっとも、0.7VCCであっても、閾値はもっと低いところにあるから、実験的には3.3VのC-MOSで5VのC-MOSを駆動できる場合がほとんどだけど。
RX8900は温度補償発振器付きなので、並みのRTCとは安定性も違う。(ブリーフシートにはちゃんとグラフもあるのに、アプリケーションマニュアルには
一般的なRTCの放置したらダダ狂いの温度特性グラフしかないような。なんでだー。)
温度補償付水晶内蔵RTC…温度が変わっても月差10秒ぐらい
水晶内蔵RTC…25℃での精度はそこそこOK
RTC回路+外付け水晶…25℃前提、水晶自体の精度ばっちりでも、コンデンサをちゃんと合わせるか、デジタル補正をしないとダダ狂い。
基本的にはどれを使っても同じ、と言えるためには、月差数分以内ならOKOKみたいな鷹揚な人格か、「安定した室温でしか使わない」みたいな条件か、
自前で温度補正することが必要になりそう。 DIP基板実装済みで\500か・・・
俺の昨日の昼飯代より安いじゃないか、こんなに安くていいのか?w RX8900CE UA3がDigikeyで1500円超。
国産部品をDigikeyで買うとやけに高価なことがあるけれど、それにしても価格差でかいですね。 ATmega328のVIH min.は、普通の入力ピンは0.6VccだけどI2Cは0.7Vccだよ。 >>955
あらためて確認したらその通りでした。ありがとうございます。
すみません>>948。 sparkfun の Pro Mini 328 - 5V/16MHz のシリアル通信について教えて下さい。
USB <-> シリアルボードを介して通信しています。
当初ボーレート揃えているのにASCIIですら文字化けしていて、諦めかけていたのですが、色々いじっているうちに
シリアルモニタのボーレートを、Serial.begin(19200); と初期化の際のボーレートの半分にしてみたところ文字化けしなくなりました。
これは、Pro Mini 328 - 5V/16MHz の仕様なのでしょうか?
それとも、USB <-> シリアルボード がおかしいのでしょうか?
はたまた、他の原因でしょうか? ビルドするときのクロック定数があってないんじゃないか?
LED点滅間隔を delay(1000); ってして一秒間隔で点滅するかとかでチェックしたら倍ずれてるぐらいだとすぐわかる 3.3V版なんじゃねぇの
載ってるクリスタルの刻印は? ちゃんとGNDつないでる?
オシロで波形見ればすぐ分かるんだけどね。 >>958
確かにLチカが2秒間隔でした。
これはもしかして8MHzで動作しているのでしょうか?
https://i.imgur.com/JyzETGw.jpg
https://i.imgur.com/KWRfpJn.jpg
画像大きくてすみません。
>>959
メインのチップには見づらいですが、MEGA328Pとあります。
>>960
GNDはつないでます!オシロはないです。
USBで給電しているので5Vだと思います。 >>961
一応だけど、赤丸のレギュレーターの型番で5V版か3.3V版か判断できるよ
https://i.imgur.com/LT2vfJx.jpg
動作周波数はヒューズビットで確認できるけど >>961
メインのマイコンの左下の銀のやつがクリスタル
それが8MHzの載ってない?
そのサイズでも刻印あったような気がする >>962
刻印読めなくてもVINに5V入れて、Vccから4.7Vでてくるか3.3Vかで判別できるな >>961
>確かにLチカが2秒間隔でした。
delay(1秒)を2つ使えば2秒間隔になるよ。
while(1){
delay(500) LED=on
delay(500) LED=off
}
と書けば、1秒周期になるよ。大丈夫か? HLHLを繰り返すもので、周期と言えばHLの1回分ということで正確な解釈ならぶれないはず。
間隔ってどうだろう。
解釈がぶれそうな単語を使うのではなく、Hの時間がなんぼ、Lの時間の時間がなんぼ、HLの1回分の時間がなんぼと、
くどく書く方が誤解はなかったりして。
用語の解釈で齟齬が発生すると混乱することあるね。
アナログの電圧の話で、どうも話が通じないと思っていたら、相手が言ってる「振幅が2V」が実は「p-pが2V」だった、
みたいなことがわりとよくあった。 >>961
とりあえずオシロスコープ買ったほうがいい。
測定器もなしにデバッグするのは時間の無駄。 >>969
AmazonやAliExpressに自分で組み立てる系の周波数カウンタ有るよね
一つ組立しましたが良い感じですよ Arduinoで簡易オシロスコープを自作してる事例けっこう見るよね >>972
九州工科大が提供してる簡易オシロは作ってみた
回路も簡単だしとりあえずならこれがお手軽 市販のArduinoで周波数カウンタ作ろうと思ったらまずオシレータ交換しなきゃダメなんじゃね 今までPICばかりでしたが、今日Arduinoを始めました。
さこで質問があります。
開発環境ををダウンロードして、サンプルソースを試したのですが、
ソースに、LED_BUILTIN OUTPUTというのが出てきたので、
基板に合わせて書き換えたのですが、点灯のままLEDが点滅しませんでした。
調べたたら、TRISの値が反対で、出力=1、入力=0でした。半日もかかったお馬鹿でした。
次にタイマー割込がやってみたいです。(1ms周期で時間をカウントするとかです)
サンプルを探してみましたが、外部割り込みはありましたが、タイマ割込とか受信割込とかを
見つけれませんでした。
タイマー割込などのソース例をご紹介いただけないでしょうか。
宜しくお願いします。 MsTimer2、serialEventとかは駄目なの? void setup() {
TCCR1A = 0; TCCR1B = 0; //一応初期化しとけ
TCCR1B |= (1 << WGM12) | (1 << CS12); //プリスケーラー256にしろ
OCR1A = 31250-1; //0.5秒毎に割り込め
TIMSK1 |= (1 << OCIE1A);//タイマースタートしろ
}
ISR (TIMER1_COMPA_vect) {
//割り込みが起きれば何か処理しろ
}
void loop() {
} >>979
MsTimer2()というのは、__delay_ms(xx)と同じで、その場で待つタイマーではないでしょうか。
それではなくて、main()で仕事をしていても、FOSCをハードがカウントしてくれて、
例えば0xFFFFになったら割込がISR_Timer0()みたいなところに飛んでくれて...のような動作を
試してみたかったです。
シリアル受信も同じです。ハードが1byte受信したら割込関数に飛んでくれるようなことが
してみたかったです。 >>982
時間が来るとコールバックに指定した関数が呼ばれるらしいぞ。 >>980
ありがとうございました。
Arduinoのタイマーのことがいっぱい出てきました。
勉強します。ありがとうございました。 >>981
こういうのを探してました。ありがとうございます。
乱暴なコメントですが、とてもよく分かります。
そのソースに出てくる、TCCR1Aとかのレジスタ名は、
AVRのデータシートを見るのだと思います。ダウンロードして、見てみます。
TCCR1B |= (1 << WGM12) | (1 << CS12);
このWGM12とかCS12は、ヘッダファイルに書かれているのですよね。例えば、
#define WGM12 1
#define CS12 4 など。
TCCR1B |= (1 << WGM12) | (1 << CS12);は、
TCCR1B |= 00010010; と同じということで。
ありがとうございました。 そういうのをArduino的にやるのがmstimer2だと思うがAVR的でいいならそれで ライブラリの追加ができない。includeでエラー。調べ中。 英語圏の海外サイトのコードをコピペしたらincludeでエラーが出たことあったけど
まさかのスペルミスで「inculde」になってたことあった
>>986
質問者がPIC経験者なのでベストアンサーでしょ? >>988
アンサーにケチをつけてるわけじゃないぞ?
MStimer2のことを誤解してそうだから補足しただけだ
どっちがベストかは本人が決めることだと思う D1 mini Liteでの質問です
TX/RX 端子に何か機器を繋いであると ArduinoIDE からのアップロードが失敗します(Connection Failed)
同端子を機器から切り離せばアップロードは成功するのですがそういったものなのでしょうか?
例えば単純シリアル接続をしたいときには TX/RX に繋げるのではなくほかのPINに割り当てて
SoftSerial で動かすのが正しい方法なのでしょうか
お教えを頂けるとありがたいです 書き込みにUARTを使ってるからそりゃそうや
完成したらもう書き込みしないんだからええやろ別に >>992
ピンが足りないならCD4052などで切り替える方法もあるよ >>993
>書き込みにUARTを使ってるからそりゃそうや
その後いろいろと調べてみましたが正にその通りですね
てっきり別経路でアップロードされているのかと思っておりました
>完成したらもう書き込みしないんだからええやろ別に
スケッチの更新をしようと思いこの現象に遭ったのでした
>>994
(デ)マルチプレクサなどで切り替える(切り離す)と言う方法ですね
例えばアップロード時にはRSTがセットされる?のを利用して
リレーで切り離すとかそういう方法もありそうですね
いろいろと助言頂きありがとうございました 繋いである「何か」にPCから送られてくる書き込みデータが流れ込んでも問題が生じないなら、
切り離す必要があるのは「何か」のTxDラインだけでいいはず。
ボードに手が届くなら、単純にジャンパープラグ&ソケットでもいいのでは。
>アップロード時にはRSTがセットされる?のを利用して
RSTって主マイコンのリセットだっけか。書き込み動作中は、
リセットは通常動作時と同じく解除されているはず。 >>995
Arduinoではないけど、プログラミング時にリレーで書き込み信号と
ターゲット回路側とを切り替えているライタがある。 このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 148日 12時間 38分 4秒 5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。
───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────
会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。
▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/
▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php レス数が1000を超えています。これ以上書き込みはできません。