X



トップページ電気・電子
1002コメント298KB

AVRマイコン総合スレ Part37

■ このスレッドは過去ログ倉庫に格納されています
0001774ワット発電中さん 転載ダメ
垢版 |
2016/02/10(水) 01:38:42.26ID:kLm1nPXV
個人でも手軽に使える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マイコン総合スレ Part36(c)2ch.net
http://wc2014.2ch.net/test/read.cgi/denki/1445006186/

テンプレみたいなものは以上です
0003774ワット発電中さん
垢版 |
2016/02/11(木) 01:31:03.41ID:ZJD2idTP
前スレtiny13で400KHzのI2Cスレーブを作るには
・9.6MHzの場合1us9.6サイクルの猶予がある
・400KHz = HiLowそれぞれ1.25us
ではあるが、I2Cの場合は
・マスターのHighホールド最短時間 = 0.6us
・マスターのLowホールド最短時間 = 1..3us
というのがある
・とにかくHiを検出してLowエッジを得る処理をインラインアセンブラでも使ってノーウエイトでがんばる
・SCL側でLowエッジを得たら、すかさずポートを出力Lowにしてクロックストレッチに持ち込む
・何か処理をする場合はこのストレッチ状態の合間に行う
・割り込み許可している暇は無い
こんな感じですわ
0004774ワット発電中さん
垢版 |
2016/02/11(木) 01:44:54.75ID:ZJD2idTP
ややストレッチ状態に限れば割り込み許可もできる
がそもそもストレッチに持ち込めるかはマスターのバス使用頻度に左右されるのと
あまり引き伸ばすと他のデバイスの通信にモロに影響するので控えめにやる
よってできることはADC取り込みやPWM出力とか軽い処理に限られるだろう
0005774ワット発電中さん
垢版 |
2016/02/11(木) 01:50:45.04ID:ZJD2idTP
ちなみに16bitタイマー付きのtiny10ならサーボも2chだがmega並に制御できる(8bitタイマーしかないtiny13では無理)
tiny85も8bitタイマーだけどこっちはUSIで何でもできるので事情がだいぶ違ってくる
0007774ワット発電中さん
垢版 |
2016/02/11(木) 14:22:20.84ID:ZJD2idTP
>>6
わざわざ独自通信でもするのかな?
俺はI2Cにはこだわるね
1つに既存のバスにそのままぶら下がる事
それとマスター側は上のスレーブよりずっと簡単に資源を使わずに増やせる事
スレーブ側もバス速度を100Kbpsに落とせるなら何でもあり
要するに実装が楽なんだよ
0008774ワット発電中さん
垢版 |
2016/02/11(木) 14:36:18.88ID:XLVu0lMd
素人が作ったような危なっかしいプロトコルですぐハングアップするから嫌だ
0009774ワット発電中さん
垢版 |
2016/02/11(木) 14:41:17.80ID:ZJD2idTP
それと意外と大きいのがクロック源が適当でも動くことだね
内蔵RCでも特に調整なしで400Kbps通信を達成できる事
校正が必要な用途でも後からマスタから受けられる事
これが仮にUARTやそのモドキだと最初に校正パケットなんてのが必要になってくる
0011774ワット発電中さん
垢版 |
2016/02/11(木) 15:18:06.32ID:ZJD2idTP
数レスだと落ちるらしいから30ぐらいまでこのネタでいくか
俺も最初はI2Cには懐疑的で色々検討したけど
そこそこの速度でtinyで実用に耐えるプロトコルなんて他にないんだよね
0012774ワット発電中さん
垢版 |
2016/02/11(木) 15:29:46.56ID:ZJD2idTP
ちなみにtiny85や861、2313のUSI付きtinyはI2Cスレーブをほぼ無負荷で実装できる
これはUSIの機能で自動でストレッチ状態にしてくれるからだね
逆にUARTはHWで持ってる2313の例外を除いてtiny全体で事情はほぼ変わらない
0013774ワット発電中さん
垢版 |
2016/02/11(木) 16:24:45.13ID:2rBHrj/w
実際にストレッチなんか使ってるデバイスは皆無だろ
I2Cの一番糞な仕様だと思う
0014774ワット発電中さん
垢版 |
2016/02/11(木) 17:25:29.32ID:bodYe1W3
> USI付きtinyはI2Cスレーブをほぼ無負荷で実装できる

それなら、tiny13の方をI2Cのマスターにして
一定間隔でADCの値を送る、というやり方が良いのでは?
0015774ワット発電中さん
垢版 |
2016/02/11(木) 18:03:29.68ID:bodYe1W3
14の書き忘れを追加

tiny2313をI2Cのスレーブにする
という事です。
0016774ワット発電中さん
垢版 |
2016/02/11(木) 18:28:54.27ID:CszwzY7t
俺だったらtiny2313+tiny13止めてmega328にする
貴女と私は一心同体、なら遠距離よりも悲劇を生む可能性が少ない
0018774ワット発電中さん
垢版 |
2016/02/11(木) 18:41:35.02ID:ZJD2idTP
>>13
I2Cの価値はむしろストレッチだよ
megaのTWIやtinyのUSIのI2C応用もストレッチ前提の機能だよ
割り込みを処理するのが遅かろうがちゃんと通信が維持されるのはこのストレッチのおかげ
これが無かったらマイコンがスレーブになったりマルチマスターなんてそもそもできない
0020774ワット発電中さん
垢版 |
2016/02/11(木) 19:29:33.45ID:ZJD2idTP
>>16
前スレによるとmegaを使うほどのプログラムじゃないらしいのね
そこに他のtinyがあったらスルーされる筆頭のtiny13が列挙されてて
思わずあっとなったわけで
0021774ワット発電中さん
垢版 |
2016/02/12(金) 07:07:00.23ID:8N7MysBv
>>20
megaではプログラム領域が余ってもったいないからtiny2313?
そんなメリットはデメリットに比べて小さ過ぎる。
tiny2313+tiny13は思考実験的には面白いかもしれないが。
0022774ワット発電中さん
垢版 |
2016/02/12(金) 12:25:52.79ID:fXUNFoE+
前スレ989
>ADCと16bitのタイマカウンタで位相基準PWMモードを使いたい・・・。
>しかしmegaを使うほどのプログラムじゃないし、attiny2313にADCがあれば解決したのになあ
0023774ワット発電中さん
垢版 |
2016/02/12(金) 14:30:06.85ID:tqPafssT
>>22
mega 使うほどのプログラムじゃないってのが意味わからない。

64byteのプログラムでもmega使っていいんだぜ?
tiny261A とかでもいいし。
0024774ワット発電中さん
垢版 |
2016/02/12(金) 22:01:22.09ID:KiUdUAJY
ク〇が複数 噛み付いてきたな
2ちゃんにつかりすぎじゃねーの?w
0025774ワット発電中さん
垢版 |
2016/02/14(日) 14:15:26.21ID:pWvb6x6w
AtmelStudioをインストールせずにAVR ISP mk2を使いたいのですが、
方法をご存知の方いらっしゃいますか?

AVR ISP mk2のドライバや、書き込みプログラムのatprogram.exeが必要だと思うのですが。
単体でダウンロードできるものなんでしょうか?
0026774ワット発電中さん
垢版 |
2016/02/14(日) 16:34:41.36ID:ZvwTMVOf
>>25
以前はAVRCommandLineToolsと言う書込みプログラムだけを落とせたのですが
今は無いようなのでAtmelStudioから抜き出すしかないと思います。

FreeのAtmelStudioをインストールしないことが前提なら
AVRdudeでも使ったらどうですか。
002825
垢版 |
2016/02/15(月) 22:14:32.59ID:2MG1RjZU
>>26, 27
ありがとうございます。
試してみます。
0029774ワット発電中さん
垢版 |
2016/02/22(月) 09:11:37.09ID:V6p3wa15
attiny861とattiny841が安く手に入るところってどこですか?
200円以下で買えると助かるんだけど…
0030774ワット発電中さん
垢版 |
2016/02/23(火) 00:44:06.95ID:72BuNO4E
質問失礼します.
先日購入したAVR ISP mk2で,atmega328p-puにプログラムを書き込んだのですが動作しません.
AtmelStudio6.2を使用して,Lチカのプログラムを書き込みました.
Device ProgrammingのMemoriesから書き込んで,
Erasing device... OK
Programming Flash...OK
Verifying Flash...OK というメッセージも出ましたが,ledが点きませんでした.
思い当たる節として,最初にAVR ISP mk2を使おうとするとファームウェアの更新が要求されるみたいですが,行った記憶がありません.
ファームウェアの確認のためDevice ProgrammingのTool informationの欄を開こうとすると,
「Property not found: MajorFirmwareVersionOnDisk」 というエラーが出ました.
ファームウェアが古いのかもしれないと思い,以下のサイトの手順通りにやってみましたが10.のコマンドを実行した所で
「Failed parsing zip file for images」と出て実行できませんでした.
http://garamoba.eshizuoka.jp/e1124571.html

何か原因が思いつく方はいらっしゃいませんでしょうか.
違うマイコンにしても動かず,AtmelStudio7は起動せず,4はAVR ISP mk2を認識せず,途方に暮れています.
些細な事でも,ヒントだけでも良いので,どうかよろしくお願いします.
0031774ワット発電中さん
垢版 |
2016/02/23(火) 01:09:57.65ID:f28l/Dpd
>>30
OSは何?
AVR ISP刺した状態でデバイスマネージャーにちゃんと表示されてる?
AVRstadioいろいろ入れてるけど1度全部アンインストールして6.2だけインストールしてみたらどう?
ぐらいしかおもいつかねぇ。
0032774ワット発電中さん
垢版 |
2016/02/23(火) 06:35:18.15ID:3VREwJLo
zip fileを実際展開してみて壊れてないかチェックしてみる。
というかProgram Filesに置いていいのか? windows vista以降だと普通にコピペだと違うところに保存それるぞ。
管理者権限でコピーするとかVirtualStoreを無効化してからやり直せばいけるかも。
0033774ワット発電中さん
垢版 |
2016/02/23(火) 08:41:28.29ID:Jr8u31ws
> Erasing device... OK
> Programming Flash...OK
> Verifying Flash...OK

デバイスの認識から消去、書き込み、ベリファイ全部成功してるんだから
ファームのバグか配線ミス以外の何物でもない
0037774ワット発電中さん
垢版 |
2016/02/24(水) 12:22:46.01ID:RtpBPTfO
シリアル通信は半2重、調歩同期式を出してくれないかな。
そしたら1ピンで済む。
内蔵OSCの精度が問題になるかもしれないが。
0042774ワット発電中さん
垢版 |
2016/02/24(水) 23:28:11.66ID:e3X/3lK8
>>36
SRAM32Byte、EEPROMなし、16bitタイマー1本、書き込みTPIでレジスタ半分16本のコアがAVR8L
要するにこれはattiny10のピン拡張版だな
UARTはまあ欲しいっちゃ欲しかったけど今更だな
それとこれを使うにしてもAtmelがちゃんとしたAVR-Toolchainを出してくれるのかどうか
最悪定義だけ頂いてgccはソースビルドを考えた方がいいかもしれない
0046774ワット発電中さん
垢版 |
2016/02/24(水) 23:59:23.61ID:e3X/3lK8
>>44
>別にToolchainはATMELが作ってるわけじゃないし。
知らなかったわそんなの
一体どこが作ってるの
0047774ワット発電中さん
垢版 |
2016/02/25(木) 00:05:21.04ID:z1nMyy1s
Toolchain最新版は3.5.0か
AtmelStudio7に入ってるのがこれと同じだと期待できないんだよな
0048774ワット発電中さん
垢版 |
2016/02/25(木) 00:07:32.75ID:z1nMyy1s
それにしてもUp to 12 MIPS at 12MHzと書いてるのに
内蔵RC8MHzってちょっとどうなの
外部クロック供給したりOSCCAL調整しろってことなの
0049774ワット発電中さん
垢版 |
2016/02/25(木) 06:53:30.70ID:LiAENmmk
時計ICみたいに水晶内蔵させれば精度出るのにな。
価格大幅アップ必須だw
005030
垢版 |
2016/02/26(金) 01:10:21.35ID:0FhhlM3F
>>31
>>32
>>33
ありがとうございました.やっと動きました!
ツールバーからavrisp mk2のファームウェアアップデートができないのはatmel studio6.2だけということを知りませんでした.
6.0を入れてアップデートしたんですがファームウェアが1.11から上がらなかったので,4とドライバを入れなおしてアップデートしたら動きました.
原因をファームウェアに絞れたのはとても助かりました.本当にありがとうございました.
0053774ワット発電中さん
垢版 |
2016/02/26(金) 21:38:06.00ID:/lQrU2tv
>>52
FW1.11/1.15のAVRISPmkIIで試してみました。
6.2無印(build 1153)だと初回は失敗することが多いです。
でもUSBプラグを刺しなおしてリトライすると成功します。

sp2とか7使えば問題ないだろうにと思います。
0054774ワット発電中さん
垢版 |
2016/02/26(金) 21:57:20.01ID:YRIWZcFb
失敗することはあっても深刻な状態になることは稀ってことよね。
海外サイトでも問題になっている気配はないし。

状況からしてbuild1563(sp2)も試してなきゃおかしいし、>>33が指摘している通り
一度は書き込みに成功しているのに根拠もなくライターのせいにしてる。
初心者が右往左往しただけなのに6.2が悪者にされちゃってるかわいそうな話。
0055774ワット発電中さん
垢版 |
2016/02/28(日) 00:05:33.03ID:/bc09g43
>>54
リリースノートではファームアプデ中に止まる(SP2修正済み)
コミュサイトでは見えない報告(ツール削除USBドライバ再インスコ)

以上です
0056774ワット発電中さん
垢版 |
2016/02/28(日) 03:12:26.63ID:Xwg4j0yk
arduino化したattinyで質問があるのですがこちらでいいでしょうか?
スレ違いだったらすみません

症状
・arduino-ISPから9.6MHzの設定でtiny13にblinkスケッチを書き込んだところ、LEDが点滅せずに点灯したままになります
・loop()内のdigitalwrite()を全てコメントアウトしてスケッチを書き込むとLEDは消灯したままになります
これはどういう状態でしょうか?

環境
・windows10
・arduino-ISP化したarduino Uno
・arduinoIDE1.6.7にcore13及びattinyライブラリ(85用)を追加

ちなみに同じ回路で同じblinkスケッチをtiny85に書き込んだ場合はLEDがきちんと点滅します
0057774ワット発電中さん
垢版 |
2016/02/28(日) 05:09:32.61ID:GdFjIhwL
>>56
そのblinkの書き込みサイズは確認した?
13はFlashが1024ByteしかないからArduinoのIDEで作るにしても
スケッチはAVR的に書かないとblinkすら厳しいんじゃないか
tiny85なら動くのはそんな理由だろう
例えば下みたいにdigitalWriteは使わずにDDRBとPORTBレジスタに直接書くとかなり小さくなる
void setup() {
//pinMode(0, OUTPUT);
DDRB = 1; // PB0 OUTPUT
}

void loop() {
//digitalWrite(0, HIGH);
PORTB |= 1; // PB0 HIGH
delay(1000);
//digitalWrite(0, LOW);
PORTB &= ~1; // PB0 LOW
delay(1000);
}
0058774ワット発電中さん
垢版 |
2016/02/28(日) 05:24:06.92ID:S+rojV5z
>>56
ちょっと環境は違うがArduino1.0.5でkosakalabにあるhardware.zipで
試したらtiny13/85ともちゃんとBlinkした。 Hexサイズは384バイトだった。

1.6.7とcore13でも試そうとしているが何か面倒そうなので後でまたやる。
0059774ワット発電中さん
垢版 |
2016/02/28(日) 13:46:26.60ID:Xwg4j0yk
皆さんレスありがとうございます
>>57
特に小さくする工夫はしてませんが書き込みサイズは384bytesでした
core13のwiring_digital.cの中身を覗いてみたところ、教えて頂いたのと同じようにレジスタを直接弄っていたのでそれで節約出来てるみたいです
>>58
試して頂きありがとうございます
同じサイズなのが面白いですね
もうちょっと1.6.7で動かせる方法を探りつつ1.0.5でも試してみたいと思います
006058
垢版 |
2016/02/28(日) 18:11:07.71ID:S+rojV5z
1.6.7とcore13_022.zipを使ってTiny13AでBlinkを確認できました。

Hexサイズは350バイトになった。
■ このスレッドは過去ログ倉庫に格納されています

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