トップページ電気・電子
1002コメント278KB
AVRマイコン総合スレ Part40
■ このスレッドは過去ログ倉庫に格納されています
0001774ワット発電中さん
垢版 |
2018/01/27(土) 11:14:18.02ID:yaXvNyvZ
個人でも手軽に使えるAtmelのAVRマイクロプロセッサを中心に語るスレッドです

<公式サイト>
http://www.microchip.com/design-centers/8-bit/microchip-avr-mcus
・AVR Libc Reference Manual:
https://www.microchip.com/webdoc/avrlibcreferencemanual/install_tools_1install_avr_libc.html

<参考になるページ>
・AVRWiki: http://avrwiki.sourceforge.jp/cgi-bin/wiki.cgi?page=AVRWiki
・AVR情報多い-chanさんのpage: http://elm-chan.org/
・avrfreaks.net avrgccその他AVR関連の総本山(英語): http://www.avrfreaks.net/
・TAP-Config: http://ww2.tiki.ne.jp/~maro/
・AVR.jp 日本語のAVR資料他: http://www.avr.jp/
・ATMega168日本語データシート(翻訳中): http://awawa.hariko.com/chira-ura/
・AVR アセンブラのマニュアル(ユーザーズガイド): http://www.atmel.com/Images/doc1022.pdf
・インストラクション(命令セット)の解説: http://www.atmel.com/Images/doc0856.pdf
・条件付きアセンブルの解説(アセンブラ ver. 1.74対応):http://www.atmel.com/Images/doc2550.pdf
・アセンブラとCの連携方法: http://www.atmel.com/Images/doc1234.pdf

前スレ
AVRマイコン総合スレ Part39©2ch.net [無断転載禁止]©2ch.net
http://rio2016.5ch.net/test/read.cgi/denki/1499338233/
0750774ワット発電中さん
垢版 |
2018/08/19(日) 15:24:44.86ID:LnIysm0c
atmel studioで"sprintf"関数を使おうとしたらヘッダファイルstdio.hのインクルードだけでなく、
リンカーの指定:
Use vprintf library(-Wl,-u,vfprintf)にチェックを入れ
-lprintf_flt フラグを追記する
https://startingelectronics.org/articles/atmel-AVR-8-bit/print-float-atmel-studio-7/

をやれって言われたんだけどなんでこんな面倒なことさせられるの?
PCでC言語書いてたときはこんな面倒なことやらされた記憶が無い
0753774ワット発電中さん
垢版 |
2018/08/20(月) 22:40:41.96ID:9QkJNT78
前から実数を文字にしてシリアル通信でPCのコンソールに表示しても
ちゃんと表示されないので桁挙げて整数にしてたが
これやればいけるのか へー
0755774ワット発電中さん
垢版 |
2018/08/21(火) 13:22:03.12ID:HGtVX0oC
純正ライブラリのprintf周りは実装がヘビーだから
ライトなサブセットとか必要な機能だけ抜き出して
使うのは常識だと思ってたがな
探せばライトな実装のソースあるから探してみ
0757774ワット発電中さん
垢版 |
2018/08/21(火) 21:55:19.74ID:xI6VXNFk
ヒープの実装とかやってられっか!そんな暇じゃねー(ちゃんと動かす自信ない)
てことで、必要なとこだけ適当に作るわ。
0762774ワット発電中さん
垢版 |
2018/08/28(火) 16:55:19.64ID:X/PBMgkw
オラの使用頻度は tiny2313 → mega328 → mega1284 の順。
ほとんどの場合、I/Oの点数で決る。
0763774ワット発電中さん
垢版 |
2018/08/28(火) 17:08:07.48ID:x4ysaIKD
ATTiny44って需要ないのかな?
1個50円で4KBあってピンが14本あって
ほとんどのことが出来るんだけど、世界的に需要がないね
0766774ワット発電中さん
垢版 |
2018/08/29(水) 11:13:58.08ID:JsInWxhP
「ほとんどのこと」って個人差が激しすぎる表現だよね。
tiny13しか要らない人もいれば、xmega128を使い切る人もいる。
0767774ワット発電中さん
垢版 |
2018/08/29(水) 13:12:17.39ID:grB9/XTT
それがその人間が持つ「世界」なんだろ
そっとしといてやれよ
0769774ワット発電中さん
垢版 |
2018/08/29(水) 17:04:09.26ID:j5KyviK8
電電板の「ほとんど」は自分の性格の悪さを競うところだからネw
0771774ワット発電中さん
垢版 |
2018/08/29(水) 22:37:39.91ID:MczWYvcm
そもそもどこでATtiny44を1個50円で売ってるんだよ…
俺には見つけられない
0772774ワット発電中さん
垢版 |
2018/08/30(木) 09:18:56.12ID:qpzY4rbF
少なくともattinyでCを自由に使うことはできない。メモリの制約ありまくり。
0773774ワット発電中さん
垢版 |
2018/08/30(木) 09:30:16.61ID:eJmrGxCr
そりゃメモリの制約じゃなくて自身のスキルの制約でしょ。
0774774ワット発電中さん
垢版 |
2018/08/30(木) 09:39:45.94ID:qpzY4rbF
    ∩___∩           |
    | ノ\   ,_ ヽ      |
   /  ●゛  ● |         |
   | ∪  ( _●_) ミ      (>>773) 
  彡、   |∪|   |       J
 /     ∩ノ ⊃  ヽ
 (  \ / _ノ |  |
  \  "  /  | |
   \ / ̄ ̄ ̄ /
0775774ワット発電中さん
垢版 |
2018/08/30(木) 15:47:55.10ID:LdaFNO3J
>>772
BCD演算ルーチンも作れないような技術レベルの人が、
プログラム設計時にBCDとバイナリのプログラムサイズ、実行速度の比較検討も出来ないような人が、
小さくて早いプログラム、に何の興味も無い人が、
tinyのプログラミングをCで済ませようとするのは、当ったり前でしょ?
0776774ワット発電中さん
垢版 |
2018/08/30(木) 16:04:09.05ID:b1/JO4sT
要らん苦労をすることもないからな
趣味ならやっつけ上等だ
仕事なら・・・
ご愁傷さま
0777774ワット発電中さん
垢版 |
2018/08/30(木) 16:30:37.26ID:E+kW5yn6
>>772
いつの時代だよ…
メモリのせいでCを使わないなんてtinyでも
ほとんど有り得ない。アセンブラで下手くそな
コードかくより、コンパイラの最適化で吐かれ
たコードの方が効率良いぐらい。

どうしてもアセンブラで書かなきゃ困る場面は、
1クロックが問題になる時ぐらい
その場合でも、その部分だけしかアセンブラで
書かないけど…
0779774ワット発電中さん
垢版 |
2018/08/30(木) 18:08:16.47ID:PyGoGxYA
USARTの送信緩衝レジスタ空き割り込みとSPIの送信完了割り込みって実際に送り終わってからかなり遅れて発生してる?
送信クロック8MHzで64bit送ってるんだけどもなんか思ったより通信頻度があがらない
0780774ワット発電中さん
垢版 |
2018/08/30(木) 18:52:13.36ID:14OY0zUg
>>779
割り込みハンドラの問題じゃないの
そういうときこそインラインアセンブラ使うんだよ
該当箇所のソース晒してみ?
0781774ワット発電中さん
垢版 |
2018/08/30(木) 19:30:32.37ID:Nmqoo8gZ
>>779
超手抜きプログラムでUSARTの検証をしてみた

#define F_CPU ( 24UL * 1000 * 1000 )
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
ISR( USART_TX_vect, ISR_NAKED )
{
asm volatile (
"sbi 0x09, 2 \n\t"
"nop \n\t"
"sbi 0x09, 2 \n\t"
"reti \n\t"
);
}

int main( void )
{
DDRD = 0xff, PORTD = 0x00;
UBRR0 = 0;
UCSR0B = (1<<TXCIE0) | (1<<TXEN0);
sei();
while ( 1 ) {
_delay_ms( 100 );
UDR0 = '@';
}
}

https://i.imgur.com/ta8Imkt.jpg
大体、152〜153クロックくらい遅延する感じかな?
そもそも、このプログラムで遅延が測定できているかは不明だけどw
0783774ワット発電中さん
垢版 |
2018/08/30(木) 19:59:21.00ID:PyGoGxYA
>>780
もともとCで書いてないよ
普通のアセンブラ
64bit転送するのに20μ秒くらいかかるね
0784774ワット発電中さん
垢版 |
2018/08/30(木) 20:14:18.69ID:PyGoGxYA
割り込みで6クロックで次データレジスタに入れてるのに64bit送出に20μ秒かかる
転送は1バイトあたり16クロックで1μ秒なんだから
余計な時間が18クロック近くあることになる
0786774ワット発電中さん
垢版 |
2018/08/30(木) 21:09:36.27ID:bqQwOaAc
SPIの話なのか、USARTのSPIモードの話なのかがまず見えん。
SPIならデバイスによっては送信二重バッファ無いし。
0787774ワット発電中さん
垢版 |
2018/08/30(木) 21:18:44.25ID:PyGoGxYA
どっちも試して
USARTのSPIモードだと20μ秒、SPIだと23μ秒かかる
SPIは送信完了しか割り込みがないのと
使わないMISOが入力モードに固定されるからUSARTの方を使ってる
0788774ワット発電中さん
垢版 |
2018/08/30(木) 23:18:30.20ID:bqQwOaAc
3us変わってるってことは二重バッファの効果は出てるってことやね。
割り込み処理の内容が重いと思われるが、ソースが無いと何とも・・・
16MHz動作だろうが1バイト送る間にたった16CPUクロックしかないんだもんな。
0789774ワット発電中さん
垢版 |
2018/08/30(木) 23:21:39.68ID:bqQwOaAc
余談だが、xmegaのDMA使って16MHzクロックのSPIが遅延無しで動くのには笑った。
0790774ワット発電中さん
垢版 |
2018/08/31(金) 01:22:01.22ID:N/i7dTZj
>>788
>>784で書いたけどUDREベクターの割り込みの処理内容は6クロック分しかないのよ
ポインタをインクリメントして配列からUDRに次バイトを入れるだけだ
6クロックでデータ入れて16クロックで送ってるのに次のデータの送信が始まるのが送信終わりのクロックから18クロック後になる
つまり1フレームに40クロックかかってる
本当にUDRが空になった瞬間に割り込み処理に入ればジャンプ入れても1フレームは26クロックで済むハズ
0791774ワット発電中さん
垢版 |
2018/08/31(金) 01:31:45.21ID:N/i7dTZj
実験だしSREGのPUSHとPOP省いてもこれなの
とにかく何故かUDREベクターにジャンプするのが遅い
CKOUT出してロジアナでXCKと合わせて監視するとわかる
シフトレジスタに投げたら転送中にUDRに次を入れたいのに
送信が始まって33クロックも後にこられても…16クロックの時点で送信終わってるのにw
これじゃ実効bpsが3.2MHzしかでないよ
0792774ワット発電中さん
垢版 |
2018/08/31(金) 01:33:55.19ID:N/i7dTZj
bpsがMHzておかしいなまぁ言いたいことはわかるからいいか
明日もうちょっと実験してみる
0793774ワット発電中さん
垢版 |
2018/08/31(金) 02:28:45.01ID:5CIPvHcX
mega328pでUDREベクタの内容をこれで試してみた。
UDRR0=0設定できっちり17クロック毎に割り込む。
何か別の割り込み無限にが動いてないか?
たった6クロックの内容ならコード出しなよ。

.global USART_UDRE_vect
USART_UDRE_vect:
nop
nop
ldi XL,0xAA
sts UDR0, XL
reti
0795774ワット発電中さん
垢版 |
2018/08/31(金) 10:08:07.18ID:rB3voyat
確かに>>793のコードでnopを一つ減らすか、ベクターテーブルをrjmpで生成する
Relax Branchesオプションを指定するかして1クロック節約すれば遅延無しの実質8Mbpsになる。
安物のオシロでもこれくらいなら見れる。
0796774ワット発電中さん
垢版 |
2018/08/31(金) 10:39:39.71ID:T2Z/tBAh
> メモリのせいでCを使わないなんてtinyでもほとんど有り得ない。

w
0798774ワット発電中さん
垢版 |
2018/08/31(金) 12:37:00.70ID:T2Z/tBAh
> 2313でCを使っていて困ったことなどほぼ無いんだが

天才プログラマー現るw
0799774ワット発電中さん
垢版 |
2018/08/31(金) 13:08:12.09ID:rB3voyat
あなたの世界では私は天才の部類なんですか。それは光栄です。
GPS校正の7セグデジタル時計、ステップモーターの等加速度コントローラ、
フルカラーLED電子ホタル、電子ルーレットなんてのが今ぱっと思い出せる2313作品です。
もちろん処理によってはアセンブラ関数も利用していますが、ベースはAtmelStudioでGCCですね。
0800774ワット発電中さん
垢版 |
2018/08/31(金) 13:12:12.76ID:tL1DJ/uK
>>798
え?
なんか、時代に取り残されてない?
avr-gccが吐くコードを見たことないでしょ
ほとんどオーバーヘッドないぞ?
0802774ワット発電中さん
垢版 |
2018/08/31(金) 15:53:59.98ID:T2Z/tBAh
>>799
なんか大海の広さは知ってるからあえて大海に出ない井の中の蛙みたいですね。
0803774ワット発電中さん
垢版 |
2018/08/31(金) 15:58:17.83ID:tDLYk6Vp
大海を知らないから井の中の蛙と呼ぶのであって
知ってて出ないなら、冒険者ではないにしても賢者かもしれんよね
0804774ワット発電中さん
垢版 |
2018/08/31(金) 16:08:58.74ID:Ap4oSnfy
アセンブラなぁ
スタートアップコードとか
コンパイルした結果がおかしい時に見る位だな
後はデバッガでの逆アセウインドゥか
昔は通信で同期取るときとか命令表見てキリキリ書いたものだが

今時アセンブラ使わなきゃならない場面て何がある?
0805774ワット発電中さん
垢版 |
2018/08/31(金) 16:26:36.93ID:rB3voyat
>>803
あなたの趣味がより資源のチープなデバイスに無理矢理収めることなんですかね?
それも立派な趣味です。
私はあくまで「動かすこと」が趣味ですから、目的や規模に合わせてデバイスを変えてるだけです。
50円や100円程度の価格差は、私の趣味の範疇ではほぼ無意味なので。

フルアセンブラによる開発は昔さんざん「やらさられた」のでもう飽きました。
まあそのせいか、私はまだアセンブラ関数を使う方だと思いますけど。
何より複数人数で開発するのにフルアセンブラは無理がありすぎですわ。
0806774ワット発電中さん
垢版 |
2018/08/31(金) 16:28:22.25ID:T2Z/tBAh
散々アセンブラ使ってると公言しておいて今時アセンブラ使わないとか言われてもね。
同一人物だとは思いますが二人して論理破綻してることに気づいてないんですか?

やはり大海を知ってる井の中の蛙ですな。
0808774ワット発電中さん
垢版 |
2018/08/31(金) 16:58:44.88ID:rB3voyat
あのぉ、私は「アセンブラ関数は」使います。「フルアセンブラ」をしないだけで。
使わなきゃいけないかはともかく、使いたい場面は私にはあります。
>>804さんとはちょっと違うのは明白じゃないですか?
0809774ワット発電中さん
垢版 |
2018/08/31(金) 17:00:04.42ID:7OvXy247
>>807
いつも思うんだけどさ
おサルのお前がさっさと進化して2足歩行すれば
マウントも取られずに済むんちゃうん?
0810774ワット発電中さん
垢版 |
2018/08/31(金) 17:03:52.44ID:EO4WU+CH
>>809
それ、同意。
「意識高い系?」とか「マウント取られた。」とか言ってるヤツは、
お前が低能だからだろ、アホをカミングアウトされても困るんだわ、って感じ。
0811774ワット発電中さん
垢版 |
2018/08/31(金) 18:10:24.70ID:wPhShKLl
SREGの全体割り込みを禁止してあって
いくつかフラグが貯まってるときに
全体の割り込み許可を出すと実行される順番ってデータシートに載って無い?
割り込みベクター番号の一覧っていうのかな
0812774ワット発電中さん
垢版 |
2018/08/31(金) 18:11:51.72ID:E1usIXxI
フルアセンブラとCのインラインアセンブラは似て非なる物だよ。
AVRを趣味として楽しみたい人にはフルアセンブラがお勧め。
フルアセンブラだとCPUとの間に薄い膜が存在しないので、生の感覚を楽しめるw
Cではタイムスライスも出来ないし、ADDI命令が無くてSUBI命令がある意味も分らないww
0813774ワット発電中さん
垢版 |
2018/08/31(金) 18:19:33.00ID:E1usIXxI
私はAVRを隅から隅まで熟知したいと考えているし、
AVRが持っている性能を限界まで追及したいと考えているので、
フルアセンブラで作っている。
0815774ワット発電中さん
垢版 |
2018/08/31(金) 18:25:46.59ID:E1usIXxI
>811
一部の新しいCPUを除き、テーブルの若い番号から順に実行されるのでは?
割り込みベクター番号の一覧は資料に掲載されているよ。
0816774ワット発電中さん
垢版 |
2018/08/31(金) 18:25:49.58ID:wtFvlGaw
優れたプログラマは
Cでもパフォーマンスが出るように記述する
アセンブラを使うとしてもごく一部
0817774ワット発電中さん
垢版 |
2018/08/31(金) 18:32:17.14ID:L/sRkkb7
君らどうなったらもめ事やめるん?
面倒いからお互いゴメンナサイして仲直りしな。
0819774ワット発電中さん
垢版 |
2018/08/31(金) 18:33:23.16ID:n9XPwpus
ベクタの完全な一覧は32頁の「割り込み」 で示されます。
この一覧は各種割り込みの優先順位も決めます。
下位側アドレスがより高い優先順位です。
リセットが最高優先順位で、
次が外部割り込み要求0(INT0)です。

と書いてある、原文(英文)は確認してない
0822774ワット発電中さん
垢版 |
2018/08/31(金) 20:58:16.08ID:+qiy03sC
書いてスッキリするならいいんじゃないの
聞いてくれる人も誰にも褒めてもらえないんだから

おれはお年寄りの話聞くようにしてる、寂しいもんね
0823774ワット発電中さん
垢版 |
2018/08/31(金) 20:58:41.56ID:5CIPvHcX
このフルアセ爺さんまた沸いてたのか。昼間からよほど暇なんだな。
何の役にも立たん個人の感想も相変わらずで元気そうだ。
0826774ワット発電中さん
垢版 |
2018/09/01(土) 00:12:14.05ID:IatDFWpP
6800とか6502をフルアセで触ってドヤッしてた世代なんやろな
直交性(笑)
0827774ワット発電中さん
垢版 |
2018/09/01(土) 01:59:26.08ID:nBJ5WzJD
ファミコンみたいな低スペ機でマリオカーとみたいな3D世界を表現する原理はわからない
0829774ワット発電中さん
垢版 |
2018/09/01(土) 07:41:41.15ID:IatDFWpP
その質問が何故AVRスレなのか(笑)
因みにスーファミの話ならば、スプライトと拡大縮小のキーワードでググるんやで
スーファミの頃はまだ擬似3Dやし
ちゃんとポリゴン計算した3DはN64以降やな
0832774ワット発電中さん
垢版 |
2018/09/01(土) 10:39:50.14ID:+32apRsJ
>>831
そのノスタルジックなスーファミをAVR使って再現しましたってところまでもっていくんじゃね?

まさか関係ない話をAVR絡めないままひっぱったりせんだろ。
まさかなぁ・・・
そんな馬鹿はいないと信じてるよ。
0834774ワット発電中さん
垢版 |
2018/09/01(土) 12:44:44.52ID:nBJ5WzJD
>>829
その疑似3Dの仕組みが分からん。
どうやって遠近法を表現してるの?
画像切り出して変形?
0837774ワット発電中さん
垢版 |
2018/09/03(月) 09:28:59.65ID:zbn92e33
tinyAVR使ってる人あんまりいないのね
このクラスの石だとPICが多いのかな
0839774ワット発電中さん
垢版 |
2018/09/03(月) 10:34:11.62ID:cEBW0mIF
両方とも使ったみたが
C だけ、 or Asm だけ、で使うなら大差無い(変体Archとか言われるが、実際使ってみるとそれほどでもない)

C & Asm で使うなら、 PICは駄目だね
そもそも呼び出し規約の説明すら殆ど書いて無いし(使って欲しくないという事なんだろうが)
コンパイラが吐き出すコードもまともじゃない(動かないコードを吐いたりする)
元がスタックに変数積めないArchだから、深く突き詰めてもしょうがないが・・・

I/OはPICの方洗練されてる

今手元にあるAVRは 32u4, tiny85 で、 最後に買ったのがコレ
これ以降、下位クラス(8-bit)は、PICに変えた。
0841774ワット発電中さん
垢版 |
2018/09/03(月) 14:16:46.48ID:I/gM5fxd
PICはって結局16F84Aあたりを指してるのかな?
最近のPICは8ビットでもスタックに変数を積めるんだけどね。
0842774ワット発電中さん
垢版 |
2018/09/03(月) 15:48:53.25ID:p2/vJ0I0
>>839
 >両方とも使ったみたが
 >C だけ、 or Asm だけ、で使うなら大差無い
イヤァ、久しぶりにイスからズリ落ちそうになるほど驚いた。
私は両方をフルアセンブラで組んでみて、その大きな差に驚きあきれて、
2度とPICなんか使うかと固く決心したのに、こういう人も居るんだ、う〜む。
世の中、ホントに「蓼食う虫も好き好き」だな。
まぁ16ビットPICなら一度は使って見たい気がするが、エラッタが多いそうだし・・・
0843774ワット発電中さん
垢版 |
2018/09/03(月) 15:58:26.95ID:cCvbU5Eg
>まぁ16ビットPICなら一度は使って見たい気がするが、
使ったこと無いのか…。
>2度とPICなんか使うかと固く決心したのに、
でも決心したのか…。

馬鹿っぽいな。

正しい決心
 2度とPIC16F1より古いPICなんか使うか
0844774ワット発電中さん
垢版 |
2018/09/03(月) 21:17:29.56ID:p2/vJ0I0
>>843
おいおい、勝手に順番変えないでくれよw
2度と使うかと決心した後で16ビットPICが発売されたんだぞ。
でも16ビットPICもあまり良い評判を聞かないのが残念だ。
8ビットPIC使うにしても、スタック領域をユーザーが自由に確保出来るものでないと使う気がしない。
なぜなら私こそは、天上天下唯我独尊、知る人ぞ知る、知らない人は誰も知らないw
「タイムスライス・マン」なのだ! チャンチャン

さて、そろそろ死んだ真似でも始めるか・・・
0848774ワット発電中さん
垢版 |
2018/09/04(火) 13:43:44.84ID:L3nAZzpp
色々と御不満もございましょうがw 
趣味のAVRはメチャ楽しい。
ハード作業(基板の配線など)が終ってプログラミングを始めるときは、
特に新しい周辺機器やデバイスを使うときは、
なんかもうワクワクして、早くPCの前に座りたい。
止められまへんな。
0849774ワット発電中さん
垢版 |
2018/09/04(火) 15:04:35.69ID:GeQJwrY6
俺も趣味のAVRは楽しいと思う。
CPU自体の機能はそんなに無いけど、情報の多さ、値段の安さ、手軽さなんかも魅力的。
仕事ではSPARCだけど、高機能でなんでもできちゃう反面、お利口すぎてつまらないです。

人それぞれ、感じ方、やりたい事、スキル、予算なんかも色々とあるとは思うし、拘りもあると思うんで、好きなCPUを好きに使い倒したいなぁと。
0850774ワット発電中さん
垢版 |
2018/09/04(火) 17:06:07.23ID:f4Jj9aq2
情報の多さって...
データシートがちゃんとしてれば他に不要では?
特にAVRみたいな低機能マイコンでは
■ このスレッドは過去ログ倉庫に格納されています

ニューススポーツなんでも実況