X



トップページ電気・電子
1002コメント312KB
AVRマイコン総合スレ Part39©2ch.net [無断転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
0001774ワット発電中さん
垢版 |
2017/07/06(木) 19:50:33.22ID:Um7dmNHJ
個人でも手軽に使えるAtmelのAVRマイクロプロセッサを中心に語るスレッドです

<公式サイト>
Atmel AVR 8-bit and 32-bit Microcontrollers
http://www.atmel.com/products/microcontrollers/avr/  英語表記
http://www.atmel.com/ja/jp/products/microcontrollers/avr/ 日本語
・AVR Libc Reference Manual: http://www.atmel.com/webdoc/AVRLibcReferenceManual/

<参考になるページ>
・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マイコン総合スレ Part38©2ch.net
http://rio2016.2ch.net/test/read.cgi/denki/1474477013/

テンプレみたいなものは以上です
0540774ワット発電中さん
垢版 |
2017/10/20(金) 03:50:55.73ID:GLk4+0Yi
>>538
マルチコアってコンパイラどうなるの
作るのすげえ大変なんでしょ?知らんけど
0541774ワット発電中さん
垢版 |
2017/10/20(金) 11:30:03.65ID:zEBqZlNy
16bitレジスタのXmegaがあるだろ?なにいってんだと思いつつ
Xmega のデータシートみたらmegaと同じだったXmega って何が違うの?

全てのレジスタの裏レジと割り込みで裏と表に切り替わる仕組みを乗せて欲しいな
0542774ワット発電中さん
垢版 |
2017/10/20(金) 11:55:16.11ID:v8R+NSA4
xmegaは周辺機能の強化がメインだね。
コアCPUの機能としてはそんなに大きく変わってない。
megaで出た不満の修正を最低限やりましたって感じがする。
0543774ワット発電中さん
垢版 |
2017/10/20(金) 13:22:14.59ID:mSYXSDQR
> 全てのレジスタの裏レジと割り込みで裏と表に切り替わる仕組みを乗せて欲しいな
私も前に同じような事を書いた。
裏と表だけでも全然違うと思うが、出来れば
 32個のレジスタセットを複数組持って、SRB n(select register bank #n)命令で1組を選択
にして欲しい。
Cコンパイラを作る人も、マルチタスクを作る人も喜ぶと思う。。
命令は入力ポートのビットクリア命令<cbi DIxn>の領域に割り当てれば良い。

残念ながら、エラッタ放置厨のマイクロチップには期待できそうも無い。
0544774ワット発電中さん
垢版 |
2017/10/20(金) 14:47:57.97ID:Gyi1cUpP
Nano Pi NEO ¥1,680(税込)
こんなんだからな

正直、今更 上位クラスを作っても勝てるとは思えん。
0545774ワット発電中さん
垢版 |
2017/10/20(金) 15:40:22.57ID:mSYXSDQR
>>544
今のAVRをより面白くするには、という点に着目して書きました。

8ビットと32ビットのCPUを比べるのは、軽トラと大排気量のピックアップを比べるようなものだと思う。
いつも軽が負けているかというと、そんな事は無くて
軽を「田ンボルギーニ」、「農道のカウンタック」と賞賛する声があり、
実際、米国ではハンティング(ラフロード)用には「これしかない」と軽が大人気です。
0546774ワット発電中さん
垢版 |
2017/10/20(金) 17:12:24.78ID:zEBqZlNy
マイコンはシミュレーション環境がいまいちだなあ
シミュレータ上で任意の外部端子を互いに接続してループバックできるようにしてくれると
かなりのことがシミュレータだけで確認できるのだが・・・

atmelstudioのシミュレータにそういう機能ついてる?
0547774ワット発電中さん
垢版 |
2017/10/20(金) 17:58:11.10ID:v8R+NSA4
そういうのはプロテウスってシミュレータを使うのが海外ではトレンドみたいよ。
0548774ワット発電中さん
垢版 |
2017/10/20(金) 18:21:20.97ID:zEBqZlNy
外部端子とレジスタの間にクロスバースイッチが挿入されてて
任意に接続可能なAVRマイコンが欲しいなw
0549774ワット発電中さん
垢版 |
2017/10/20(金) 18:56:47.87ID:QPhxXtBB
>>538 は、ESP32 のことなんだが、(高速I/O は割り当てが決まってるものの) 入出力機能は基本自由に割り当てられるな。
完全に直交してるから、PIC みたいにパズルのようなことにならない。
0554774ワット発電中さん
垢版 |
2017/10/24(火) 10:04:56.92ID:kXfO5z+S
Atmel Studio 7.0.1645がリリース
前リリースの1417はバグが酷いので1188に戻してたが、今回のはどうかな。
0555774ワット発電中さん
垢版 |
2017/10/24(火) 16:22:00.90ID:jVvd0erO
秋月のattiny861aって

> ・シリアルI/F:SPI、I2C等

atmegaみたいな回路とは違うよね?
0556774ワット発電中さん
垢版 |
2017/10/24(火) 16:41:29.31ID:+CyeX6+Q
バグ? Jungoがなくなって驚いたがLUFA cloneは快適になって○です
インスト不具合は対応したとリリースノートに記載があるしWin8.1ですが
KB2999226だけでKB2975719は不要でした。

あとSupport DeviceにATmega4808/4809が追加されてる(ほかにmega3208/3209)
Tiny817と同じAVR8Xコアのようで、5V Xmegaもどき UPDIです

秋月でICE買う前にUSBaspにでもだれかインプリしてくれないかな。
0557774ワット発電中さん
垢版 |
2017/10/24(火) 17:02:55.01ID:kXfO5z+S
>>555
使う気が有るならデータシート見なよ。
USARTとSPIは違わないけどI2CはUSIってモジュールを利用して「実現可能」ってレベル。

>>556
ビルド1417は環境依存だがVSの挙動がおかしくなる。
更にICEのファームアップデートを強制するくせに、
そのアップデート自体ができないという爆弾付きだったんだ。

デバイスについては、今後まるっきり新規のデバイスならISPやめるんだろうかね。
debugWIREはハマる人が多いし。
PDIならUSBasp対応してるから、UPDIもそのうち出てくるんじゃないの?
0560774ワット発電中さん
垢版 |
2017/10/25(水) 08:37:36.09ID:Sl6cWZn+
861a、強力な85だと思えば使いやすいけど
2313の代わりに…と思うと使いにくい
0562774ワット発電中さん
垢版 |
2017/10/25(水) 10:27:40.75ID:KwVRIoNB
暇だったのでArduinoISPをLPC11U35に移植してみた、需要ある?
次は、pickit3かUSB-Blaster移植しょうと思う。
0567774ワット発電中さん
垢版 |
2017/10/26(木) 20:52:31.20ID:l0Bk4QXj
>>562
秋月で最近出したボードありますね
githubあたりで公開よろ
0568774ワット発電中さん
垢版 |
2017/10/27(金) 05:41:55.43ID:vefJLHwh
秋月に50円の8pinあるだろ。250円の28pinあるだろ。

必要なのは100〜150円の20pinなのだよ。
0570774ワット発電中さん
垢版 |
2017/10/27(金) 08:18:19.75ID:aLR7/lKw
20pinも14pinまでAitendoにはある。

300milや20pinのLPC1114もあるのでmega88V150円を20pinにすれば良い
0571774ワット発電中さん
垢版 |
2017/10/27(金) 08:57:43.54ID:ZnCMnmM1
シリアル付とADC付きの20pinが欲しい訳で
もう新しく作らなくていいからmega328を20pinDIPパッケージに詰め込んでくれと
0574774ワット発電中さん
垢版 |
2017/10/27(金) 10:53:47.22ID:zalpVaJN
DIP無いか・・・
0578774ワット発電中さん
垢版 |
2017/10/28(土) 13:42:47.34ID:gNLiGOy9
data8<7-0> にdata32<31-00>の中のdata32<07-00>を抜き出して代入したい

data8 = data32 % 256 ;

と書いてもコンパイラが素直に推論してくれません
キャリー処理のコードっぽいものをつけてきやがります
どうしたらいいでしょうか?
0579774ワット発電中さん
垢版 |
2017/10/28(土) 13:55:43.31ID:gNLiGOy9
付け忘れた;
C言語です
0581774ワット発電中さん
垢版 |
2017/10/28(土) 16:03:48.64ID:gNLiGOy9
%256でOKみたいです
構造体にアクセスするためのインデックス計算の呪文を勘違いしたかも
お騒がせしました
0583774ワット発電中さん
垢版 |
2017/10/31(火) 11:10:07.12ID:4XxAhhrH
PORTB<0>(<0>はbitを示す)をトグル動作させたいので以下のように書いたのだが

if (( PORTB & 0x01 ) == 0x01 )
{ PORTB &= 0xFE ;
}
else
{ PORTB |= 0x01 ;
}


if (( PORTB & 0x01 ) == 0x01 )
370: 28 9b sbis 0x05, 0 ; 5
372: 02 c0 rjmp .+ ; 0x378 <main+0x288>
{ PORTB &= 0xFE ;
374: 28 98 cbi 0x05, 0 ; 5
376: 10 cf rjmp .-480 ; 0x198 <main+0xa8>
}
else
{ PORTB |= 0x01 ;
378: 28 9a sbi 0x05, 0 ; 5
37a: 0e cf rjmp .-484 ; 0x198 <main+0xa8>


わいのif文を使う稚拙な文章力によると冗長なrjmpが付いてしまう
〜をつかって簡潔に表記できる気がするので
もっと素敵な表記方法があれば教えてください
0584774ワット発電中さん
垢版 |
2017/10/31(火) 11:18:58.72ID:Rm4sqPNR
C言語なら1行
PORTB ^= 0x01;
アセンブラはコンパイル出力見なされ。
0585774ワット発電中さん
垢版 |
2017/10/31(火) 11:23:58.25ID:icCGIk6W
前の質問もそうだが
アセンブラを気にするのになぜか論理演算に対する理解がゼロ。
0586774ワット発電中さん
垢版 |
2017/10/31(火) 11:29:12.89ID:4XxAhhrH
ありがとうございまする
そういやXORってなものがありましたね
発想できなかったわいやばいかもw
0588774ワット発電中さん
垢版 |
2017/10/31(火) 12:00:46.42ID:Rm4sqPNR
PINB=0x01;
でもいけるデバイスはあるね。
出来ないのもあるから要注意だけど。
0589774ワット発電中さん
垢版 |
2017/10/31(火) 12:39:07.43ID:6qZ9xlwT
PINB |=0x01;
にしないと…
ところでAVRでトグルアクションできない
デバイスってあるの?
0592774ワット発電中さん
垢版 |
2017/10/31(火) 12:48:59.03ID:Rm4sqPNR
って、俺じゃなかったか。
ちょっと古めのやつには無いんだよ。
mega64とかね。
0593774ワット発電中さん
垢版 |
2017/10/31(火) 12:58:03.41ID:zOA11G11
アンカ付ければよかったな、>>588 のが正しい と言いたかった
PINB |=0x01; <= これだと不要なヤツまでトグってしまう可能性がある(PINB依存)

勿論、いけるデバイスでの話ね
0596774ワット発電中さん
垢版 |
2017/11/01(水) 11:32:35.24ID:yyUVc5sJ
知るのが面倒なんだろう
知ってたら、PINB=0x01; の方が簡単だと言うことは誰でも解かる

下らん事をいちいち書くな、カス
0597774ワット発電中さん
垢版 |
2017/11/01(水) 14:50:42.62ID:t+zbSMHx
PINB=0x01 で出力用PortBのbit0が反転するというのは少し意味が不適切だと思うけど
アセンブラの sbi PINB,0 から来てるのかな
0598774ワット発電中さん
垢版 |
2017/11/01(水) 16:00:44.94ID:PIMhFGJU
>>593
PINB |= 0x01; でコンパイラが吐くコード
sbi PINB,0x00

PINB = 0x01; でコンパイラが吐くコード
ldi tmp,0x01
out PINB,tmp
0600774ワット発電中さん
垢版 |
2017/11/01(水) 16:20:04.19ID:t+zbSMHx
>>598
どちらも同じ結果になる?

>>599
素直に文字列を読むと「入力ポートBに01を設定」に見える
動作内容の「出力ポートのビット0を反転」とは異なる
0601774ワット発電中さん
垢版 |
2017/11/01(水) 16:27:06.47ID:ZMNck5d6
>>600
だから新しいデバイスは
「入力ポートBに01を設定」すると
出力ポートのビット0が反転するんだってば。
0602774ワット発電中さん
垢版 |
2017/11/01(水) 16:51:46.36ID:t+zbSMHx
アセンブラのニーモニックを実際の動作内容に合わせて
「sbi PInB,0」をたとえば「tbo PortB,0」(toggle bit of output port)とでも
しておいてくれれば分りやすかったのに、と思った
0603774ワット発電中さん
垢版 |
2017/11/01(水) 16:53:43.97ID:tPfINzji
最適化レベルに依存するんで、Cでは記述しない。
デバッグ時に-o0たまに使うからなあ。
0604774ワット発電中さん
垢版 |
2017/11/01(水) 16:56:06.08ID:t+zbSMHx
もしかしてニーモニックはCPUで決る固有のもので変更できないと思っている?
マシンコードはその通りで変更できないけど、ニーモニックはどうにでもなるよ。
0605774ワット発電中さん
垢版 |
2017/11/01(水) 16:59:15.38ID:t+zbSMHx
追加
ニーモニックを変更したらアセンブラも変更しないといけない
0606774ワット発電中さん
垢版 |
2017/11/01(水) 17:10:48.54ID:t+zbSMHx
ゴメン、追加2
たとえば(マシンコードは適当)
 旧アセンブラ sbi PInB,0 から マシンコード$1234を生成
 新アセンブラ tbo PortB,0 から マシンコード$1234を生成
(これで終わりにします)
0607774ワット発電中さん
垢版 |
2017/11/01(水) 17:28:20.11ID:ZMNck5d6
知らなかったなら「知りませんでした。半年ROMります」って言えばいいことなのに。
0609774ワット発電中さん
垢版 |
2017/11/01(水) 17:51:01.74ID:/UIxZizR
>>577
ファイル頂きました。ありがとう。

lpc11u35といえば、
keil pro版があるとcmsis-dapのバイナリ作成できる

買えんから、バイナリほしい
0611774ワット発電中さん
垢版 |
2017/11/01(水) 20:51:28.88ID:1U+CJ0Oi
cmsis-dapの最新版はDAPLinkに変わりました。バイナリはgithubのリリースにあります。
0612774ワット発電中さん
垢版 |
2017/11/02(木) 01:28:36.58ID:ibgLvi8d
>>600
はぁ?
データシートにわかりやすく解説してあるのに
自分の勝手な思い込みを一般化するとかキモい
0616774ワット発電中さん
垢版 |
2017/11/02(木) 18:53:23.22ID:HwzfYxql
>PINB |= 0x01; でコンパイラが吐くコード
>sbi PINB,0x00

そうか。コンパイラって賢いのだな…

でも、6つのビットを反転するときに、
PINB |= 0x3F;
はどうなるんだろう。
sbiを6回繰り返すのだろうか。
0621774ワット発電中さん
垢版 |
2017/11/03(金) 07:04:53.43ID:7lCWLG1o
>>614
記述は PINB |= 0x01 でも動作内容は PORTB |= 0x01 とはこれ如何に?

答え 1枚でも千べいと言うが如し、1個でも万こと言うが如し
うむ、上品なAVRスレにふさわしくない下品さだw
0622774ワット発電中さん
垢版 |
2017/11/03(金) 08:22:00.75ID:Ep1t0oTJ
PINx反転機能は入力設定+プルアップ→出力設定+0出力の
ダイレクト遷移に利用できるのではなかろうかとw
0623774ワット発電中さん
垢版 |
2017/11/03(金) 09:08:36.19ID:bhG9MRzE
>>618です。
職場のPCにしか入れてなかったので自宅のPCに最新のAVR Studioをインストールして確認してみたよ。
時間が掛かりそうだったので昨夜は寝た。


吐き出された.sはレジスタ名になってないので、置き換えた。

(1)まずは

PINB |= 1;

sbi PINB,0

おー。確かに。


(2)複数ビットへのORは、というと
PINB |= 0x2A;

in r24,PINB
ori r24,0x2A
out PINB,r24

これは予想通り。 指定ビットの反転とは違うよね。


(3)普通に代入
PINB = 0x2A;

ldi r25,0x2A
out PINB,r25

>>614さん本人はわかった上で書いていると思うのだけど、
>>614を見た他の人で、1ビットだけ以外のケースでも |= の方が良いのか、って思う人がいるとまずいかな。
0626774ワット発電中さん
垢版 |
2017/11/03(金) 10:58:57.76ID:bhG9MRzE
出力になっているポートBのビット0 が 1 であるとき、
PINB|=0x01 を実行すると、
結果が 1 になる。

と考えているとか、かな? >>621
0627774ワット発電中さん
垢版 |
2017/11/03(金) 11:24:24.32ID:5ykj4mKn
cで書くのにsbiやcbiを意図的に使いたいなら、アセンブラマクロにすべきだよ。
Arduinoのdegitalwriteみたいに1ビット単位でしか指定できない関数にする手もあるが、
誰かが書いたように最適化レベルによっては必ずしもsbiやcbiになるとは限らない。
ピントグルなんてハード依存の変な機能なんだから・・・・
0628774ワット発電中さん
垢版 |
2017/11/03(金) 11:43:07.12ID:Despvf9h
正確なタイミングが必要なら最初からその部分はアセンブラで書くでしょ。
LED制御程度ならCで適当に買いときゃいいよ。
0629774ワット発電中さん
垢版 |
2017/11/03(金) 11:48:33.29ID:Ep1t0oTJ
>>622
は出力設定のときのみPORTxの書き込みは外部端子に反映されるという前提条件がつくが
0630774ワット発電中さん
垢版 |
2017/11/03(金) 13:05:07.38ID:7lCWLG1o
曖昧さがイヤなら、不安ならアセンブラで書けばいいだけの話しだな。

そもそも、「入力のビットをセットすると出力のビットが反転する」
というCPUの資料の説明に無理がある。
オリジナルのCPUに、ビット値反転機能を無効コード領域に新たに割り当てたときに、
手抜き(資料に上記の文章を追加するだけ)をしなければこんな事にならなかったのに。
羽田飛行場で札幌行きに乗れば沖縄に着きますよ、と言われても困るけどw
残念ながらアセンブラやコンパイラを自作しないかぎり、受け入れるしかない・・・
0632774ワット発電中さん
垢版 |
2017/11/03(金) 14:15:10.77ID:5ykj4mKn
入力オンリーだったレジスタに、出力したらビット反転する機能を後付けしたんだよ。
0634774ワット発電中さん
垢版 |
2017/11/03(金) 15:57:08.18ID:KLNUa99K
>>632
正確じゃないな。入力レジスタのアドレスへのwrite に 出力レジスタの反転を割り当てた。
0635774ワット発電中さん
垢版 |
2017/11/03(金) 16:04:14.36ID:bhG9MRzE
この場合、入力レジスタというハードウェアは存在しないですよね…
0637774ワット発電中さん
垢版 |
2017/11/03(金) 16:25:35.87ID:bhG9MRzE
もしシンクロナイザを入力レジスタだとするなら、より正確なのは>>634ですね。
0638774ワット発電中さん
垢版 |
2017/11/03(金) 18:08:26.06ID:ocusGWbc
未だにやってんのか…
「ボクちゃんいい事、考えちゃった!」
■ このスレッドは過去ログ倉庫に格納されています

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