AVRマイコン総合スレ Part41
■ このスレッドは過去ログ倉庫に格納されています
H8が高性能だって?
まあ、そう「感じた」んなら仕方ないけど・・・ AVRより高性能なのは間違ってない
コード見るとAVRはコンパイラがかなり苦しんでる >>530
RL78とかは、24bit ADC とか、OPAMP x4 とか、機能が満載のMPU揃ってるけど、
小口での入手性や、開発環境考えるとAVRと、外部ADC,OPAMPというのが、妥当なんだろうなと思っています
。今度、仕事で使うけどね。
PICも比較的、機能充実しているけど、それなりのノウハウが必要な感じですね。 RL78のことは全く知らないけどマイコンなら電源は5Vか3.3Vでしょ?
24bitのADCとか周辺回路も含めてどうやってローノイズ化するの?
温度変化や機械衝撃だけでも下位数bitはグラグラ動きそう。。 >>534
0.1uVオーダーって帯域にもよるけど
熱雑音の方が大きいな
普通の実装では全く意味を持たない世界 レスありがとうございました。
しかし、ど素人レベルでも読めるAVRの参考書籍がAmazonみてもほとんどありませんでした。
H8系は、これはいけそう!って本が何冊か見当たりました。
PICの本、多いけシステムにど統一性が無いですし。
とりあえず、AVRとH8系を見ていきたいと思います。 >>526
ふむFWのUpdateにMAPLABが必要だっただけで、対応FWを持ったPICkit4は
最初からAS7で使用可能なのですね。 クロックの周波数変えたいだけなのにヒューズビットの決め方がわからん。
アホなのでPICに変えます。 クロックの周波数を変えたいならCLKPRレジスタでは? Arduino IDEから適当な周波数を選んで「ツール」→「ブートローダを書き込む」では? >>542
後半は何となくわかる。
前半の
>Arduino IDEから適当な周波数を選んで
を具体的に頼む。
現行のボードの中から選ぶってことなら選択肢ほとんど無いような。 >>543
じゃあ、IDEに付属の「avrdude.exe」を使う方法かな >>541
このサイトで設定してavrdudeでヒューズを書き変える
ヒューズはL・H・E(Low,High,Extended)の3種類ある
例えば、Lヒューズを「0x7a」にしたければ
avrdude -C c:\avrdude\avrdude.conf -p m328p -P COM6 -c avrisp -b 19200 -U lfuse:w:0x7a:m
とかにする。引数はだいたい分かると思う フリーでGUI版があったりするから探してみて
連投すんません >>541
ありがとう、知らなかった。
これ使ってboards.txtを編集するという方法でやってみる。 >>547
うんそれそれ、ありがとう。
ID:rOsqwnuw
ありがとう。
コマンドラインはなんかとっつきにくいけど、慣れてきたらGUI版から試してみる。 存在しなければ、あるいは使いにくいなら、
自分で好きなようにヒューズ読み書きプログラムを作れば済む話しなのに。
>>474 前にAliでATtiny13A開発ボードとかいうよくわからん基板を買った(1枚60円くらいで5枚買った)
ISPがつなげられてLEDが2つ付いてるから13Aで遊ぶのにいいかなと思っていたけどずっと放置してた
https://i.imgur.com/EBrwfnS.jpg
なんでmicroUSBコネクタが付いてるのかどうも気になってたけどよく調べてみるとtiny85乗せてファーム書き込むとDigisparkになるらしい
https://s3.amazonaws.com/digispark/DigisparkSchematicFinal.pdf(この回路図D3の向き逆じゃね?) >>551
必ずこういう口調で殺伐と畳みかけてくる奴がいるよね、このスレ。 >>555
「殺伐と畳みかける」と受け取らせてしまったのなら申し訳無かった。
私としては雰囲気を悪くするつもりではなくて、ホントに純粋に単純に
「無いなら作ればいいのに」、「必要なら作ればいいのに」
なぜ作らないんだろ?と思ったんだよ。
作らなければ一生出来ないし、作ろうとすればいつかは出来る。
「なさぬは人のなさぬなりけり」
今後は「殺伐と」にならないように書く時に気をつける。
どう気をつけたらいいかよく分らないけどw >>556
悪意が先に立つから
>AVRのヒューズ/ロックビット読み書きソフトを作っていて、
が目に入らないんだろ。
人としての品格の問題だから気をつけようがない、あんたの場合は。 >>554
USBから電源を給電するのであれば逆だよね
JP2から給電した場合はUSBの5Vに接続する必要無さそうだし、回路図が間違っているのかもね AVRドラゴンの追加部品セットがあればライターやリセッタ周りの悩みはかなり減るんだが
自由度ありすぎて困る >>557
多分、勘違いしていると思う。
>>551 の > AVRのヒューズ/ロックビット読み書きソフトを作っていて
も
>>474 の > 自分で好きなようにヒューズ読み書きプログラムを作れば済む話しなのに。
も私が書いたんだよ。
そうか、だから、
>>552 の > いや、だから作ってたって話なんだろ?
という私にとっては意味不明のレスになったのか?
私のレス方針は「和を以て貴しとなす」と「アホの相手はしない」なのでw
怒られたのならとりあえず謝っておこう、と >>553 を書いた。
なお、私に人としての品格が無いかどうかはよく分らない。
人に言われたことはないけど、考えてみます。
(他の人には何の興味も無いでしょうから、この話題はこれで終わりにします)
私がAVRを始めた時の製作順序は、
1)秋月で購入したライタで1作目、2作目のプログラムを作る
AVRが気に入ったので使い続けることを決める
2)回路に影響されないROMエミュレータ方式のライタを作る
3)ブラックボックスがイヤなのでデバッガを作る
4)ヒューズ・ロックビットのGUIソフトを作る
5)パラレルライタを作る PICの場合、PWM AUTO-SHUTDOWN MODE があって、コンパレータのイベントで、
PWMのstop/startを自動的に制御できる機能がありますけど、
avrの場合、この機能のある品種ってありますか、割込みで制御すればいいだけなんですが、便利なので。 イベントシステムを搭載しているチップのA型カウンタは
イベントがHiの間だけカウント動作させる機能がある。
コンパレータ出力はイベントを発生できるので目的の動作ができるでしょう。 >>564
ありがとうございます。
tinyだと、
attiny1607 が該当しているみたいですね。
QFPしかないのは、残念。 >>564
attiny412も8pinでevsys対応してますね。 AVRみたいなマイコンでprintfってコマンド打つとどうなるの?
PCみたいにディスプレイが標準端末ならまだしも
マイコンに標準端末って無いじゃん >>567
何もおきない
標準出力をシリアル出力に設定しておくとターミナル等のアプリに文字列が出力されて便利 >>567
ArduinoみたいにPCとUSB接続してクロス開発するような処理系だとPC側に仮想端末を持たせて、これにprintf他の出力関数で文字列を出力(キーボード入力も)できる。
Arduino内で無くてもPCで起動されてる汎用端末のアプリとも同様に入出力できる。 >>567
printfが呼び出す先、つまり putc とかを自分で作ってあげないとリンカーエラーでコンパイル
できない場合が多い。
たいていはUARTなんかを出力先にしてデバッグしたり。
もちろんディスプレイを付けてあげればパソコンのようなこともがんばればできるし、
Arduinoなんかは出来合いのもあるんではないか。 >>567
>>569 の他にもbluetoothユニットを介してスマホの仮想端末アプリとも同様の入出力できる。
また有線LANボードを追加するとミニサーバーを立ち上げて、HTMLを書いとけばLAN上のPCやスマホのブラウザからアクセスできる。
自分はArduinoに取り込んだセンサー情報を端末から読むときに使ってる。 >>568
> 標準出力をシリアル出力に設定しておくと
そういうことか!
そういう設定ってプログラムの中でやるの?
それともヒューズビットか何かをいじるの? >>572
static int stdPutc( char c, FILE *stream );
static FILE suStream = FDEV_SETUP_STREAM( stdPutc, NULL, _FDEV_SETUP_WRITE );
static int stdPutc( char c, FILE *stream )
{
while ( !( UCSRA & (1<<UDRE) ) );
UDR = c;
return 0;
}
int main( void )
{
stdout = &suStream;
printf_P( PSTR("Hello world") );
}
ヘッダファイルとUSARTの初期化は省略しているので注意。(あくまでも標準出力を設定するサンプルなので) そもそも、Cにおいてprintf()ってのは関数を呼び出す以上の
意味はないからな…
printf()が具体的に何をするかは知らんもの コンソールアプリでC言語勉強はじめたばかりのガキ臭がする デバッガ使うまでも無い小さなプログラムならprintf()で変数の内容表示とか割と便利(出力先をLCDにしておいても良いし)
ただ標準のprintf()はコードが無駄に大きいので似たような関数を自作した方が良いと思う 何故画面に出力される事が標準乃動作と思ふのだらうか >>576
平気で、printf()は「画面に」出力する「命令」です
なんて教える教師や教科書があるからなぁ…
そう言うのに当たっちゃったら、やむを得ない気がする まぁパソコンのソフトウェア開発から入れば高級言語しか知らんだろうし… lcd繋げて、それに出力する様作っても良いんだよ! >>580
おまえらの世代はパンチカードだったかもしれんが、
入門者には画面と教えて問題ないだろ >>574
いまいち何やってるのかよく分からないけど
printf_UART()
なる関数を自作するよりかはスマートな方法なのね
たしかにprintf()で書いていた方が
UARTに出力するかLCDに出力するかそのときに応じて
ソースコードをほとんどいじらずに瞬時に対応できるよね >>584
マニュアルちゃんと読もうぜ
avr-libcのマニュアルに丁寧な解説付きで書いてあるぞ 久しぶりにマイコンいじった。mega3208ってやつ
これ8bitAVRコアにUC系のペリフェラルっぽいな xmega系列になって従来のmega/tinyとちょっと変わったんだ。
UC系の周辺と揃えようって意思はあったんだろうね。
mega3208は名前こそmegaだけどxmega系の子孫なのよ。 同じ処理を、3種類の環境でコンパイルしてみた。
cc5xは、制限の多いコンパイラで、ページを自分で割り付けなければ
ならないのと、固有の構文を多用する。
xcは、proバージョンでどのくらいコードがスリム化するんだろう?
gccベースという使いやすさと、PIC以外でも使えるので価格が折り合えば使いたいな。
avrgccは、データメモリとレジスタの転送でコードが膨らんでいるけど、対CPUクロックで考えると速度的に問題ないはず。要求プログラムメモリは要注意。PICは、word,avrは byteで単純比較できないけどね。
PIC cc5x (PIC16F18313)
; RAM usage: 51 bytes (11 local), 205 bytes free
; Maximum call level: 4 (+3 for interrupt)
; Total of 1027 code words (50 %)
PIC xc8 free (PIC16F18313)
Memory Summary:
Program space used 5ECh ( 1516) of 800h words ( 74.0%)
Data space used 41h ( 65) of 100h bytes ( 25.4%)
avrgcc (atmega48)
Program Memory Usage 3586 bytes 87.5 % Full
Data Memory Usage 42 bytes 8.2 % Full ATmega328PのUARTポート(RX, TX)とUSBシリアル変換器
http://akizukidenshi.com/catalog/g/gK-06894/
のUARTポート(TX, RX)をつないでPC上で立ち上げたTera Termをモニタ代わりに使用してる。
これはこれで問題無くモニタ出来てるんだけど他に問題があって
AVRの電源を切ってもAVRが稼働し続けてることに気付いた。
はじめ何が起きてるのかよく分からなかったけどテスターを当てていくと
USBシリアル変換器のUARTポートからAVRのUARTポートに電気が流れて
その電流が寄生ダイオードを経由してかAVRの電源側に回り込んで結果的に
AVRが稼働し続けてるっぽいことに気付いた。
大元たどるとパソコンのUSBポートの5Vが電気の供給源ってことになるね。
この状態でAVRの書き込みも出来るから恐ろしい。
AVRのUSBポートから流れ込んできた電気でAVRが稼働するってのも
AVRにとってあまりよろしくない状況だと思うんだけど何か解決方法ってあるかな? そもそも電源の入っていないマイコンにUSBシリアル変換を接続しっぱなしにするのが間違った使い方。根本的な解決方法はない。
ポートに抵抗入れる、AVRの電源ラインにシャント抵抗を入れて電圧を下げるなどの対症療法はある。
しかし残留電圧でヒューズがリセットされないためデバッグワイヤが解除できない等の不具合が発生するので、その辺を理解して使うこと。 >>591
AVRに限らず禁止事項だよ。うっかりするとチップ内の保護ダイオードを壊したり、
外部にレギュレータがあると、こいつを破壊する。
とりあえずの対策としてはFT232XのRESET#をLowにしておけばOK
ATmegaの余っているポートをPull Downしておいて、ここにRESET#をつないでおく。
ATmegaの電源On時に、このポートをHiにしてRESET#を解除すれば普通に使えるし、
電源を落とせばFT232XはResetステートに入る。
FT232XはReset#がLoになっている間、UARTポーtははTri-state、入力は内部200kΩで
プルアップされる(データシートVer. 1.2だったらp. 23)
これで、ほとんどの場合問題はないが、Resetステートの時にUARTピンが浮くので、
気になる場合は弱く(高抵抗で)プルダウンしておけばよい。 >>591
根本的にはAVRの入力に74VHC04のような入力保護ダイオードが入っていない
バッファを入れる。インバータなので2段入れる。 ↑が正解
不都合だけじゃなく、流しすぎるとデバイスがお釈迦になるよ
オレは↓を使ってる
http://akizukidenshi.com/catalog/g/gI-09418/ 小信号ダイオードはさんでオープンドレインもどき接続にして
USBシリアルからのHレベルを遮断すればとりあえず大丈夫なんじゃね >>592
>>593
AVR書き込むたびにUSBケーブルも抜き差しするの面倒くさくてさぼってたけど
やっぱこういう使い方禁則事項だよね^^;)
> FT232XはReset#がLoになっている間、UARTポーtははTri-state、入力は内部200kΩでプルアップされる
FT232XのRESET#ピンを制御するのはいい方法かも
ただ細かいことを言うとまっさらな状態のAVRに書き込もうとしたときは
RESET#ピンの制御は無理になるかな。
初回限定のほんとどうでもいい細かいことだけど。
>>595
> 74VHC04のような入力保護ダイオードが入っていないバッファを入れる
あ、この方法もいいね。ものぐさな自分にはぴったりの方法かもしれん。
VHCシリーズを選べば入力に保護ダイオードが入っていないことは
確約されるんだっけ? >>598
VHCシリーズはVCCに関係なく入力電圧の上限が5.5Vまで印加可能だったと思う
簡易電圧変換なんかにも使われるよね >>599
VHC, LVC, LCX, VCXは入力から電源にむけて寄生ダイオードが無いから
電源に電流が流れることが無いのね
https://toragi.cqpub.co.jp/Portals/0/backnumber/2006/06/p171-172.pdf
一つ勉強になった
ありがとう float型の変数を文字列に変換する際の定番の sprintf はメモリを馬鹿食いするから
次点の dtostrf を使ってみたんだけどこれも結構メモリ馬鹿食いするんだよね
もうちょい軽く済ます方法って無いかしらん >>601
float使わずにintで固定小数点数として格納する 誰しもが通る系の道よ…
固定少数にしても表示が遅い、間に合わないってんで
LCD表示ルーチンの改良してみたり
割り込みでマルチスレッド的に出来ないか?
とか
アセンブラで書くか?
とか、やる訳よ… >>602
>>604
その発想は無かったわ
たとえばfloat型数値 3.1415 を小数点第2桁まで文字列にするとしたら
まずこいつをint型にキャストして3を取り出し
(int) 3.1415 → 3
取り出した3を引いて小数点以下を抽出し、
3.1415 - 3 = 0.1415
抽出した小数点以下に100をかけて再びint型でキャストし
0.1415 x 100 = 14.15
(int) 14.15 → 14
3と14を atoi() 使って文字列に変換。ピリオドを間に挟んで結合すれば
文字列 3.14
のできあがり。こういうことか >>607
>>602 >>604 の助言を無視して float で演算してどうするんだ? 30年前だがZ80でどうしてもfloatが使いたくて、MSX-C 買ったらできないでやんの。
しょうがないからアセンブラでやるfloatのライブラリが載ってる本買って、そこだけ関数呼び出し
に書き直してしのいだわ。 sprintfが重いって話だろ?
floatの演算自体は仕方なかろうし、大した負荷じゃなかろう。 まあでも小数2桁って決まってるんなら最初から100倍しておいて整数で演算するわな。 そう考えると、昔のBASICとか優秀だよな
あれしかメモリなかったのに プログラムのフットプリントを意識出来ないのは池沼やで 昔、友人が変数名がアルファベット1文字というVTL系のコンパイラを作っって
私にくれたことがある。
プログラムサイズは512バイト程度だったと思う。
付属のサンプルプログラムが「月面着陸ゲーム」 だった。 Digi-keyにTiny3216¥119が入荷している。 マルツは¥166 マルツってdigikey発注代行だろ?
それでこんなに取るのか
ボリ松もびっくりだな 50円でボッタクリ。
じゃあ、Digikey で買えよ。送料払って。 すぐ欲しい数個で買って
数十百個になったら海外通販使う
新しい品種とかは前者で探すのが困難だけど >>621
どうせ人件費は0円とかいう無職の発想でしょ
親が買い置きした家にある食い物はタダ、みたいな ■ このスレッドは過去ログ倉庫に格納されています