1 :
774ワット発電中さん :
2010/03/06(土) 23:32:07 ID:aRS20fto _____
/ /|
/ ( ゚∀゚) /.∠フ 個人でも手軽に使える
/ /.∠フ || . Atmelの8-bit RISCマイクロプロセッサを
/ __ o/.∠フ || 中心に語るスレッドです。
∠| ̄ ̄凵 ̄ ̄|∠フ || *AAは「AVR H8 etc. マイコン総合スレ Part3」からいただきました。
.|| |_____|/||
Atmel AVR 8-Bit RISC
http://www.atmel.com/products/avr/
いつまで待っても立たないようだったので立てました
乙!
>1 乙 褒美にこれをあげよう つ Tiny2313
Xmegaに手を出した人はいるかな? まだ高くて手がでないけど面白そう
ごめん。間違って同名スレ立ててしまった。 もうすわけない。
10 :
774ワット発電中さん :2010/03/07(日) 18:56:36 ID:WqYjkCEN
とりあえずこっちが目立つようにあげておこう
11 :
774ワット発電中さん :2010/03/07(日) 19:05:37 ID:qaXSi6eD
>>9 ドンマイ、削除人に依頼してくださいな
あげ
12 :
9 :2010/03/07(日) 19:30:51 ID:ag1QXYQ/
すまん。よくわかんないけど削除依頼出した。
13 :
1 :2010/03/07(日) 21:04:42 ID:WqYjkCEN
xmegaはJTAGICEで使えるからいいね
mega系なら大抵はJTAGあるだろ… ピン数使うし使いたいとは思わないが。
AT90USBKEYについて質問なのですがボードの写真を見るとポート引き出しの ピッチ幅が狭いように見えるのですが具体的な幅とか分かれば教えてください。 JTAGに比べるとかなり小さく見えるのですが。。。
>>18 こっこれは恥ずかしい。。。
丁寧に教えていただきありがとうございます。
あんまり見ないなと思ってたら千石とかで普通にピンヘッダ売ってました。今度買ってチャレンジしたいと思います。
AVRWRTってまだmega328対応してないのね orz...
fuse bit は正しいのか?
>>22 PINnを書き込むとPORTnの値が反転になる仕様ですね。
AT90Sシリーズでは使えませんし、
PORTB ^= _BV(PB0); とするのが普通だと思います。
ああ、XOR使う手があったのね
>>22 2313のデータシートに
Toggling the Pin
Writing a logic one to PINxn toggles the value of PORTxn, independent on the value of
DDRxn. Note that the SBI instruction can be used to toggle one single bit in a port.
と書いてあった、
PINxに書き込むとビットを立てておいたピンのPORTの値が反転するようだね。
それがDDRで出力に設定してあれば、ポートがパタパタすると。
これが基本テクニックかどうかは知らん
あう、調べているまに既に回答が(^^;
>>24 さん
リロードせずに回答してしまい済みません。
PINxで出力変更する方法は「PORTxで文字検索して全部確認した」ときに
見落としてしまうのでお勧めできないですよね。
レスありがとうございます。 なるほど、やはりそういう機能があったんですね。 私もあまり特定のデバイス特有の裏技を使うのは好きではないので、 たぶん使わないと思います。
ちなみに、デバイスを atmega8 にするとポートはパタパタしませんでした。シミュレーションですけど。 tiny シリーズ限定かな?
なんでデータシート読まないんだろう・・・ AVRのトグルアクションなんて普通に使う機能だしデータシートにもハッキリ書いてあるのに・・・
必ずこういうレスくれる輩がいますね。 まあ、そう言われるとそうなんですが、まさかポートにそんな変な機能があるとは思わないし、 ポートの機能なんか共通だろう(番号はともかく)と思って、mega8 のデータシートばかり見てましたよ。 で、日本語訳読んでると言ったら英語の最新版読めとくるんでしょうが、やっぱり最初は 日本語訳見て感じをつかまないと。
ここは質問者の前提無視で自分のいいたいこと言いたい人達ばかりだからね お気の毒に思います がんばって下さい
>ポートの機能なんか共通だろう(番号はともかく)と思って、mega8 のデータシートばかり見てましたよ。
データシートも読まないでそれはいくらなんでもないだろうよ
さすがにmega8は古いよ
日本語訳か英語か以前に 関係ないデータシート読んでどれでも同じだろうとか思ってるのが変 それで何の言い訳してんのやら
あぁスマンスマン 俺様が想定しない機能=変な機能 そんな考えの人に何言っても無駄だったね
>ポートの機能なんか共通だろう またまたご冗談を
つーか2chなんだしちょっとしたことでも聞いてよくね?
聞きたきゃ聞けばいい、答えが出るかどうかは別だけど トグルの件に関しては日本語訳の方にも書いてあるぞ
1レジスタ1サイクルでマスクも考慮せずに反転できるから クロック生成みたいな処理はコード量が半分ぐらいになる
>>44 なるほど、2313のソフトクロックSPIなんかに使えるな
>>39 どっかの酷いインターネッツにマニュアルもろくに見もしないでネットの記事だけあてにして
「USARTの動かし方数か月間わからなかった!」とかほざいてたアホな教育者のこと思い出した…
数か月もねばったのはすごいなw
UART関係の設定レジスタに設定可能な全ての組み合わせをプログラムで生成 し、総当りで書くような人海戦術的なやり方でさえ、数ヶ月も掛かるどこ ろか、数時間で動かせる気がする。 肝心の設定値を生成するプログラムがバグってたり、結線がクロスとスト レートで逆だったりしたらムリだけど。
デバッグの難しさは、どこが間違いか分からない所にある 2010 オレ
AVRマイコンってどこで作ってるんだろう 手持ちの644pにはTAIWANって書いてあるけど他も台湾なのかな?
FATFSを使いたいと考えています。makefileが付属しているので、WINAVRを インストールして、コマンドプロンプトからmakeすると問題なくビルドできるのですが、 AVR Stuidoからどうやってビルドすれば良いのか全くわかりません。 AVR Stuidoでソースレベルデバッグしたいのですが。 ヒントがのっているサイトは無いでしょうか。
「AVR Stuido 使い方」でググるとか、普通やれるはずだけど。
>>50 いろいろなところのFABで作ってるらしい。韓国もある。
winAVR入れると、新規プロジェクトでgnuCを作れたはずだけど。 空のプロジェクト作って、そこにファイル追加したらいいんじゃね?
ありがとう。 前回、どうしても分からなかったんだけど、もう一度がんばってみます。 できたら報告します。
>>55 makeもいいけど、サンプルプロジェクトをダウンロードして
そこのファイルを全部プロジェクトに追加してコンパイルすれば普通に通る
おまいらマイコンは仕事で使ってるだけ? 趣味でやってる奴は何作ってる?
>>56 それ、やったんですけどうまくいかなくて。
シンボルが解決できない?とかいうエラーがでてしまいます。
よく分かっている人なら一瞬で解決できるようなことがだと思うんですが・・・。
誰かに見てもらうか スクリーンショットを上げるとか 試行錯誤してみるとか もうちょっと努力が必要だと思う 俺もなんも教えてもらえずに現場投入されて 3年経ってようやく大体のものが作れるようになったレベル
>>58 とりあえず、チップの種類をサンプルと同じにすればコンパイル通ると思う
チップの種類が変わると当然足の数も変わるしレジスタや割込みも変わる
あとエラーは全文無いとどんなシンボルなのかとか分からないよ
>>58 メッセージコピペで貼れよ・・・
こういう世界にいるわけだしそれくらいの事もしないでってのもあれだぜ
AVRは神のような日本語翻訳データシートがあるから 楽だと思うぞ。本家より見やすいというのは本当素晴らしいな。 何よりEEPROMを内臓してるのが俺には有難い。
A/D のあるデバイスが欲しいんだけど、主力製品(?)ぽい tiny2313 に A/ Dはない、 tiny13A はピンが少なすぎる、mege88 シリーズは新規開発にはおすすめできないときたもんだ。 もしかして AVR 始めるには時期が悪い?
日本語版は確かに見やすいけど、意味不明な翻訳が多いので、原本を見て確認することが多い。
>>63 なんでそんな古いやつばかり見てる?
(tiny2313は現行品で安いから使っているやつはいるが)
ATMega88P/168P/328Pとかはどうよ
>>63 tinyだと26の後継で261とか無かったっけか
てか、88シリーズは新規開発ダメなの知らんかった
一体何を使えと
>てか、88シリーズは新規開発ダメなの知らんかった P付きに移行しろと
新しいのは88PAやね 秋月は安いけど新しいのが無いな、古いから安いんだろうけど
>>66 ATMELは型番最後のサフィックスがPとかPAとかAとか結構マチマチで
どれが新しいのか判りにくいので、迷ったら本家で確認。
Mega88系は48PA/88PA/168PA/328Pが同世代だったりする。
かと思えば、Mega128系はMega128Aが最新だったり。
趣味or使い方の勉強で使うんなら別に多少古くたっていいじゃん。 mega88系の無印とP/PAの違いは省電力機能の有無くらいじゃないの?
>>68 328だっけな、秋月で異様に安いやつ。
あれはROMの量が値段の割に半端無いからプログラムで楽できそう。
とりあえず無難にそれ選んでおいて、その後ダウンサイズするといいと思う
秋月の328は確か32kのクロック駆動に問題があるんじゃなかったっけか それさえ無視する用途なら安すぎワロタなので愛用してる でも32kも使う用途って少ないなw
秋月の激安328Pで、クロック精度重要なもの作ろうとしてるんだけど… 何が問題なのかな。回避方法とかあるの?
これか 34.4 Errata ATmega328P 34.4.3 Rev B ? Unstable 32 kHz Oscillator 1. Unstable 32 kHz Oscillator The 32 kHz oscillator does not work as system clock. The 32 kHz oscillator used as asynchronous timer is inaccurate. Problem Fix/ Workaround None
>>74 データシートのerataによるとRev. A, Rev. Bは
32kHz発振回路が不安定
・システムクロックとして動作しない。非同期タイマーとして使用すると不正確になる。
・対処法:なし
って書いてあるね。まぁ、事実上32kHz発振回路は使えないと思った方が・・・
(このerataにエラーがあって、ACMEビットをセットとアナログマルチプレクサが落ちる件も
「Unstable 32 kHz Oscillator」になっているのはご愛嬌w・・・erataのページにエラー入れるなよww)
ああびっくりした。32kBと32kHz混乱した。 水晶使ってるから大丈夫ってことだよね。 安心して眠れそう。THX
>>74 >>76 erataにRevが書いてあるが、手元のデバイスがどのRevなのかは
どのように確認したらいいんだろう?
デバイスから読み出せるの?
どこかにdate-codeとの対応表とかがあるの?
たいていチップの後ろに書いてありますよ 文字がつらつらと並んでるけど末尾のアルファベットがRevコード
>>79 >文字がつらつらと並んでるけど末尾のアルファベットがRevコード
手元のCHIPにはそんなの書いてないな〜
もしかして ATMEGA88 ATMEGA88P ATMEGA88PA の P,PAの意味?
それはRevではなく、品番の一部だから・・
ところで、秋月で売ってるmega88Pは32KHzの問題はないという認識でおk?
なぜにデータシートのeratumを見ない?
>>81 >手元のCHIPにはそんなの書いてないな〜
ICの裏側ですよ
エラッタにエラッタあるみたいだしねえ ま32k水晶なんてmegaで使うことはないから どうでもいいけど データシートに書いておきながらテストしてねーんだもんなあ
シューティングゲーム作ろうと思うのですがどのマイコンがいいですかね?
試作段階だと安定してたけど実際の生産だと個体差で不具合って所か?
>>85 エラッタの嵐で商品とは思えないものを販売するMicoChipよりはかなりマシ
>>84 >ICの裏側ですよ
見落としてました。
一応裏側(腹)も見てたんですけど、何も書いてないように見えてました。
コメントで改めて見直してみると、レーザーマーキングで書いてあります。
ありがとうございました。
レーザーマーキング厄介だよな コーティングで埋められちゃうと自動検査装置で読めねぇ
自動検査装置どころか肉眼の性能が最近やばい まだ30代なのに・・・
LEDのライト当てるとクッキリ見えるよ
ルーペとライトは必須だな
それを使えば俺の電子工作余命が10年くらい延びるかも
なんか最近ネタ切れだ 何か作りがいのあるものはないものか
ポストに何か届いたらメールに通知するやつ作ってくれ
PICで組もうと思ってたんだが・・・ 簡単なサーバーをAVRで作って、出先から家電製品を制御する。 家電製品とのインタフェースは赤外線。要するにリモコン。 学習リモコンとTCP/IPスタック、HTTPプロトコルを実装すればいけそう。
AVRでイーサネットの機能内蔵した奴ってありましたっけ?
>>103 残念ながら現行のAVR(mega)とXmegaマイコン単体でLAN内蔵(MACのみを含む)
はないですね。ARM系のシリーズにはあったかもしれません。
でも、ARM系でLAN付きなら、TIに買収されたLuminary Microのやつが、内蔵
ROM/RAMが大いし、内蔵シリアルもPCと同じ16550コンパチだからなぁ。
mega64/128のI/Oポートを2つ半潰して外部にバス出し、373/573と外付け
SRAMとLANコントローラを付けたら、コスト的にかなり微妙。
>>100 なんか、もう凄いとか、超絶とか、ありえねぇって感じのライタ
無線ライタ
じゃあBluetoothライタでも作ってみるか
俺は328Pで熱電対温度計作ることにした 多桁の補正演算が必要だからatmega向きだろ 作ってもはんだごての先っぽの温度測るぐらいしか使い途ないけどね
103AT でやってみる
PICエミュレータでも作れ
炊飯器の制御回路自作して、ノーマルよりうまく炊けるようにする いや、ヒーター含めて自作がかっこいいな
CPLD上のAVRクローンでも
AVRのIPコアか・・・ 是非頂きたいな。PICのIPより使いやすそうだ。
2313を100個つないでなんかやるとか言ってたのは実行したのか?
>>112 炊飯器のソース見てみたが以外に複雑な処理してて驚いたわ
本日AVRマイコンデビューしました 某動画をきっかけに始めたのですが とりあえず基礎的な操作とLED8個のが順番に点滅する所まではできました。 次は何を作ったらいいんでしょうか? というかC言語も今日から始めたのでさっぱりなのですが何か勉強になるようなものがありましたら お願いいたします
LEDがあるなら格子状に並べてダイナミック表示で絵でも出してみるとか 俺はLEDチカチカのあとはUARTでテキストをPCに送って それとタイマを組み合わせてRTCもどきを作った
データシートにのってる機能、一個づつ試していったら? A/DがのってるならA/D変換させたり、PWMでもわーんってLED光らせたり
PICと違って、電子工作入門者向けの本がないのは痛いな。。。
やっぱ1機能ずつ小物を製作しながら使い方覚えて行くのが王道だよなぁ とりあえずLED点灯させたら、スイッチ付けてスイッチと連動させてみたり タイマ割込みで点滅させてみたりとか あとはPWMで輝度調整もいいね UARTでPCとつないでPCから点滅指示とか アナログ入力値をAD変換して、それをLEDの輝度を対応させるとか スリープしてスイッチで復帰とか 面倒なのは通信関係の機能でデバッグも大変だけど それ以外はLEDとスイッチだけで結構遊べる気がする
>>116 何を制御してるのか教えて。
温度プロファイル的なものだけ?
124 :
774ワット発電中さん :2010/03/21(日) 19:08:42 ID:eQj8p/qz
初心者の質問で申し訳ないのですが、ATmega88と、ATmega88pでは、インクルードファイルは同じなのでしょうか?
125 :
774ワット発電中さん :2010/03/21(日) 19:35:41 ID:eQj8p/qz
タイマがスタートする瞬間は、初期値(CTCだと比較値)をセットした瞬間ですか? それともタイマ割り込みを許可した瞬間ですか?
分周期をセットした瞬間
127 :
774ワット発電中さん :2010/03/22(月) 00:13:55 ID:MyoMdJXn
はじめまして 今までPICの12や16をアセンブラでやってた程度の者ですが AVRにも興味が湧いてきました。 ここで初歩的な質問させていただいても答えていただけますか? 「オマエのくるところじゃ無い」という事であれば素直に去ります。 レスください。
おまえに教えることはもう何もない
AVRしか使った事ないんだけど、他のマイコンの経験があれば AVRは使いやすくて楽勝!って感じだったりするんだろうか。
んなことない。 AVRも他のマイコンもどれも同じように使いやすい(PICを除いて)。 あ、Cレベルの話ね。アセンブラレベルでは知らん。
>>130 は、129の何を否定しているんでしょうか?
バイク用のデジタルタコメーターを作ってみた 雨でやられましたとさ
>>132 バイクの回路みたいに、筐体に収めた後シリコンシーラントで埋めときゃいいんじゃ?
>>133 バイク用の防水パテでしっかりやったつもりなんだがなあ
多分湿気でやられたんだと思う
水自体は進入してなかったが液晶がショートしてたからな
>>134 パテってそれで箱を囲っただけとか?
たぶん素人がやるんだったらシリコンシーラントで全部埋めちゃうのが一番なんだろうな
振動にも強くなるし
シリコンシーラントって銅腐食しない?
中に湿度センサー入れとけば精神安定剤になるかも
AVRじゃないけど、GPS表示器を作って14年程バイクに設置してた。 初期に水晶発振子の周波数が狂ったらしく通信がうまくいかなっかったのと 操作スイッチの接触不良ぐらいしか、トラブルなかったなぁ。 水晶はバイクの振動でやられたらしく半年でイカれてたが、 わざと配線を長くしてスポンジでくるんで取り付けたら以後トラブルなし。 ケースは防水性が全く無いアルミケースをシリコンでシールしてただけが問題無し。 ただ完全密閉じゃなくて、水抜き用にケースの隅に1.5mm程の穴を開けてた。
139 :
774ワット発電中さん :2010/03/22(月) 10:11:18 ID:MyoMdJXn
>>127 です。
質問させてください。
@ 書き込み用ライターはまずは安価に製作出来そうなRS232C(Dsub9pin)用の物に
しようと思いますが、お勧めの物をお教えください。
A 上記に対応した書き込みソフトと入手法、操作法のサイトをお教えください。
B PICの場合、アセンブラソフトにてアセンブラ命令語からHEX機械語に変換し、
書き込みソフトを使ってライターから書き込みをしていましたがAVRも同じ手順で
良いでしょうか?
C PICの場合アセンブラソフトはメーカーから出ていましたがAVRも同様でしょうか?
D 初心者向けのAVRの型式をお教えください。
E お勧めのサイト、初心者の相手をしてくれそうな管理人さんが運営しているサイト等
ご存知であればお教えください。
以上 わかる範囲で結構です。お教えください。
(自分でも調べましたが ある基準に達している人を前提にしたサイトばかりで初心者の自分では
難解でわかりませんでした)
PICも挫折したんじゃね? AVRライターはAE-UM232Rが万能・鉄板だと思う そのままUSBシリアルになるし 8PINデバイス使うんでもない限り専用ライタなんて揃える必要ない
>>139 1.AVRISPmkIIを使うべし。ライタ作りが目的じゃないなら純正を買え。
できればJTAGICEmkIIが望ましい。高いけど。
2.純正のAVRstudio4で書ける。入手は公式。使い方は直ぐわかる。
3.Cで書いてコンパイルして出来たROMイメージを書き込むだけ。
4.そう
5.mega324 (全部入りだから一通り汎用機能はすべて試せる。まじおすすめ)
6.他所に迷惑かけんな
>>142 >5.mega324 (全部入りだから一通り汎用機能はすべて試せる。まじおすすめ)
秋月の644pの方が安くね?
tiny2313なんすけど、フューズバイトに書き込んだ値は プログラムから参照できないんでしょうか。 具体的には、8分周プリスケール(CKDIV8)のプログラム有無と クロックソース(CKSEL3-0)が、内部クロックの8MHzか4MHzかそれ以外か が分かれば助かります。 CKDIV8は、リセット直後にCLKPRに設定された値から判別つきそうなんですが、 CKSELはプログラムから判別するには、どのIOレジスタを参照すれば、よいでしょうか。
>145 データシートに ソフトウェアからのヒューズビットとロックビットの読み出し というそのまんまな項がある。
>>146 ありゃ、本当だ。フラッシュメモリの章に....マジすまん。
IOレジスタばかりに目が行っていたようです。
なんにせよ助かりました。thx!
>>144 mega164,324,644はROM容量だけの違いだから、644pならなおよしだよ。
クロックソースの判別をしても AVRはプログラム中で内臓RCと外部OSCの切り替えを ルネサスのように出来ないから、何に使うのかと思ったり。 CKDIV8をセットしてても、分周期の初期設定が1/8になるだけで 1/1に再設定したらまた8Mに戻るよ。
クロック調べてウェイトを調整するとか
>>151 たしか違ったと思うけど、普通はコンパイルオプションでチップ名を与えてやれば
ヘッダファイルが勝手に適切なやつを読むでしょ
io.hを読めとか書いとけばいいのでは?
>>124 別。picoPower用のレジスタしか違いはないけど。
シグネチャバイトも別。というか先にコンパイラを書け。
>>151 iom88.hとiom88p.hがあるから別ファイル。
ヘッダファイルの場所は(WinAVRのインストールフォルダ)/avr/include/avr
>>152 のやつは、プロジェクトのオプション→Deviceで使うチップを選んで、
ソースの冒頭に #include <avr/io.h> と書けばよろし。
コンパイラを書くってなんぞ。
>>154 コンパイラに何を使ってるのか書けって意味じゃないか?
自分はIARしかつかってないから、winAVRだと同じ立ったりするのかもしれないと思った。 レジスタは9割同じだからそういうこともあるかなと考えただけ。
ANSI-Cみたいな標準があるわけじゃないから、コンパイラやバージョンを
示さないと、的外れな回答になる可能性が高いわな。 標準以外のヘッダ
ファイル名なんて、それこそファイルを区別するためだけの違いでしか
ないし。
> プロジェクトのオプション→Deviceで使うチップを選んで、
> ソースの冒頭に #include <avr/io.h> と書けばよろし。
というやり方も、WinAVRでMAKEファイル使ってる可能性だってあるから、
必ずしも正解とは言えない。質問者に逆切れされても困るしな。
>>150 外部発振か内部オシレータか判っても、外付け水晶の周波数までは判ら
ないのでは? 最大16MHzでも12.288MHzで動かしたりするし。
>>157 きっと、外部クロック入力か水晶以外が指定されていたら
「USBヲ ツカウニハ セイド ガ タリマセン!!」とメッセージを出すに違いない。
>>151 です。
AVRStudioで、アセンブラで書いています。
たとえば、ATmega88の場合、
/AVRTools/AvrAssembler/Appnotesというフォルダに
m88defというファイルがあるので、これがインクルードファイルだろうと予想ができるのですが、
同じフォルダにはATmega88pに対応するであろう、m88pdefのようなものはありません。
しかし、
.include"m88pdef.inc"とコマンドをうっても、エラーは出ません。
元のファイルがないのにエラーが出ないというのも変だな、と思っているのですが・・・。
また、インクルードファイルはどこかからかダウンロードできたりするのでしょうか?
>>159 自分も初心者なので詳しくは知らないのだが、assembler1はもうメンテ
されていないのでは? AvrAssembler2/Appnotesの下なら
m88Adef.inc, m88def.inc, m88PAdef.inc, m88Pdef.incがあるよ
ProjectメニューのAssembler Optionsでどっちを使ってるか確認しては?
俺もインストしてみた。 winAVRの使い方よくわからん。 誰か教えて・・・elfってなに妖精 とりあえず<C:\Program Files\Atmel\AVR Tools\AvrAssembler2\Appnotes> にレジスタ定義ファイルらしきものがあるんで、ここにパスが通ってるのでは。
便乗して教えてほしいのですが、winAVRで セグメントで名前を与えた領域にメモリを配置する方法と スタックのサイズと開始番地を決める方法を教えてくれませんか?
・・・
>>162 プロジェクトのオプションのメモリセッティングから色々できる
>>161 elfは、AVR限定ではなくgnuデバッガのシンボル形式ですな。でも、
シンボルデバッグなんてやらんので詳しくは知らん。(w
デバイス定義のヘッダは、別に付いてくるヤツを使わず、自分で書いても
ええのんで。
>>162 > セグメントで名前を与えた領域にメモリを配置する方法と
ATMELの統合開発環境「AVR Studio 4.0」を使っているとして...
まず、適当なプロジェクトを作成した後、メニューから「Project」
-「Configuration Options」で「(プロジェクト名) Project Option」
ダイアログで、左側のリボンから「Memory Setting」を選んで、
「Memory Segments」の「Add」ボタンで追加。
> スタックのサイズと開始番地を決める方法を教えてくれませんか?
「Memory Segments」を選ぶまでは同じで、「Stack Setting」の
「Specify Initial Stack Address」をチェックして、右のエディット
ボックスにスタックの初期アドレスを指定。
スタック領域のサイズは指定不可。(一般的にはDebug用ライブラリ
では、関数呼び出し時にヒープの使用量と比較するチェックルーチン
を呼ぶ処理が勝手に入る)
AVR Studioを使わず、makeを使っているなら、たぶんリンカのドキュメント
のオプションの項目に記述があるかと。
分かりました。IARのように領域のサイズを決める必要がないようで。 デフォルトでRAMENDから積み上がると判ったのでもういいです。
>>165 サンキューです。
IARではリンカ設定ファイルにメモリセグメントに名前を与えると
たとえば 0x1000-0x2000のFlashに"CONTDATA"という名前を与えると
__flash unsigned char table[100]@"CONSTDATA" = {初期化};
または
__flash unsigned char temp@0x9FF; と書くと絶対番地設定
__eepromだとEEPROMに配置してくれたりします。
のように書けるんですが GCCでは別の書き方が必要のようですね。
スタックの消費量の自動計算もしてくれると助かるけれど、
これは0でRAMを初期化してから書き換わる範囲をチェックするしかないですね。
セグメント配置は、Memory Settingに登録したセグメント名で、ソース中 の変数に属性を付ければいける気がする。 H8用のgcc(KPIT)ではやった ことがあるけど、AVRはメモリ自体少ないのでやろうとしたことがない。 AVRで使えるかどうか知らないけど、gccスレでgcc用の関数単位でスタック 消費量を計算するプラグインだか、ユーティリティだかを見た気がする。 マップファイルかリストファイルに出力されるのだったかも。
169 :
168 :2010/03/23(火) 08:24:00 ID:2xBONa58
>>167 AVR Wikiの雑談ログに詳しい説明があったので貼っておきます
「外部RAM - TREX (2006年03月30日 00時54分46秒)」
ttp://avrwiki.jpn.ph/wiki.cgi?page=%BB%A8%C3%CC1#p11 > avr-gccを使うのですよね?使用するメモリの配置によって設定の仕方が変わり
> ます(.dataセクション/.bssセクション/スタック領域/ヒープ領域の配置)。
> セクションの定義は [Project]->[Configuration Options] の [Memory Settings].
> [Memory Segments]で指定します。スタックも同じ画面で指定できます。ヒープ
> 領域を外部にするのであれば [Custom Options]->[Linker Options]で__heap_start
> や__heap_endのシンボルの値設定が必要となります
> (例えば、-Wl,--defsym=__heap_start=0x802000,
> --defsym=__heap_end=0x803fff)。またheapは使用せずに
> 単純にバッファとして使うだけ等の場合は、例えば
> [Memory Settings]で .xdata=0x801100と設定して
> プログラム内で
>
> char buffer[256] __attribute__ ((section (".xdata")));
>
> とすればbufferは外部メモリに配置されます。(.xdataはgccで使用して
> いない適当なセクション名)ただしこの場合はgccのスタートアップルー
> チンで初期化されません。
あれ? heapやstackに外部RAM使用の場合は 外部RAM関連レジスタ初期化って何処に書くんだっけ?
Hidaspx経由の赤外線リモコン送信、学習リモコン ほぼ完成したので記念カキコ。
>>132 自分は初心者なのでまだまだそこまではいきませんが、いずれ同様のものを作りたいと思ってます。
パルスの検出とカウントの仕方どんなふうにしたかアイディアだけでも教えてもらえませんか?
加速度センサーでできる
回転数ってオルタネーターの出力(交流系)から取れないの? やろうとしてたのにバイクぶっ壊してできなくなっちゃった
どっちにしろ、電源の取り方とショートには気をつけろよww
>>172 点火パルス測ってるだけだよ
すんごく単純
at90usbkeyでいろいろやってとてもよかったのでそろそろきちんとしたライター欲しいなと考えてます。 純正で最も安いAVRISP mkIIを買おうと思っていたのですが、少し予算を足すだけでJTAGデバッグ可能な AVR DRAGONというものがよさそうな気がしてきました。ただ情報があまりないのが不安です。 使っている人がいましたら使い心地を教えていただけるとありがたいです。
何だかんだで純正が良いよ マイナーなのだとトラブルが増えるだけだし あの価格でJTAGデバッグ可な辺り他でトラブルが出そう
GPSモジュールからのデータをLCDに表示させるだけって機能を2313でやってたがプログラムメモリもSRAMも足らん ついに放置されてたATmega328の出番がやってきたようだなhahaha
>>177 その点火パルスはどうとるんだよっていう話じゃね?
オシロでみたことある人なら面倒って分かると思うけど
>>180 純正じゃないコピーものや独自のライターは避けるた方が賢明だろうという意味
>>181 2313から328に変えたらメモリが広すぎて迷子になるぜ
もとい、今度は余りすぎて不安になるぜ
こんなに豊富にメモリあって何に使えばいいんだろ。 DSPとかオーディオ帯域ならADのサンプリングレート足りるのか?
足りなくて困るよりはいいと思う
>>186 世間のエンジニアは貧乏性だから、性能+αまで無駄な機能を詰め込むのだ
ハードウェアの進歩に合わせて無駄を追加してきたソフトウェアの歴史が証明してる
詰め込みも、性能−αまでなら皆幸せなのに・・・
>>182 コードにコイル巻きつけて出てきたEを矩形波にしてサイクル測るだけ
某HPに書いてあったのをそのままやってみた
速度計は難しいけどタコメータは笑うほど簡単
イカリングもたのしいよ
みなさんどうもありがとうございます。
>>174 ピックアップコイルの出力を整形して外部割り込みで取り込むんですね。波形整形のあたりがまだよくわかりませんがとても参考になります。
>>176 気をつけます
>>177 ,182,188
プラグコードから電磁誘導で取り込んだんですね。どこから取るにせよちゃんとやるにはオシロがいりそうです…。
>>189 まだ先の話ですががんばります
>>191 横やりレスだけど、
>>174 みたいな信号を取り出すなら
>>174 のオペアンプの回路図はちょっとまずい。
オペアンプをコンパレータとして使って、なおかつオペアンプに供給する電圧をAVRマイコンと同じに
しておかないと、AVRマイコンが壊れるかもよ?
これぐらいの波形なら、ダイオード1本とツェナー1本でAVRにぶっ込めば何とかなるんでは?
>>192 電源電圧以外にも、ゲイン調整が入力側の抵抗を可変してたり、ツッコミ所が
多い回路ですね。 コンパレータというか、一応100kΩで負帰還を掛けてある
ので、一応はアンプかな。
まぁ、微弱入力のリニア増幅しているわけじゃないのので、動けばいいと
いった感じか?
プラグコードに数回巻いて拾った信号はレベルが低く、マイコンのポート
でロジック入力として受けるには電圧増幅は必要だと思いますが、5V単一
電源で動作するOPアンプで十分かと。 1Vを超える程度の振幅があれば、
オープンコレクタによるレベルシフタでもいけそう。
あるいは、5Vに比べてしきい値の低い3.3V動作のマイコンを使うとか。
注意点としては、ポート入力に適当な定数のCRフィルタを付けるのと、過電圧
入力でマイコンやOPアンプが壊れないよう、逆向き直列のツェナーDiを、入力
〜GND間に入れておくくらいで桶か?
>>192 >>183 >174のオペアンプの回路図ってあくまで「擬似信号を作るジグを製作」
マイコンに入れる信号は、これより後のページの波形整形のところで
ダイオードクランプ+シュミットバッファーの構成にしてる。
きわめて正常、全然問題なし。
195 :
192 :2010/03/27(土) 10:19:26 ID:JjBWnbRC
ピックアップコイルの出力って、高回転時に100Vくらい出てた気がするぞ、対GNDで
自作のピックアップだからドレだけ出るかはお楽しみだろ
I2CとSPIどっちが好き? 個人的にはSPIのが簡単で好きなんだけど、バスに沢山ぶら下げるとツラい・・・ ネット見てるとI2Cのが人気な感じ AVRのI2Cも更に速いモードで動きゃいいんだけどなぁ
線が2本で済むっていうのは魅力だなぁ・・・
適材適所としか。
2本と、アース線で3本必要
2本で通信するならデータ線は1本じゃなきゃだめ。 差動だとGNDなしでも一応通信できた。
2本と、アース線と、クロック線で4本必要
そこで非同期ですよ
速度が100倍くらい違うからね。用途からして全く違う。 100kbps以上の通信ICならSPI以外考えられないけど、 ICの機能設定やごく小容量のデータ通信ならI2Cで十分。 オレはSPI派かな。信号駆動をプルアップに頼るI2Cはどうも好きになれない。
SPIにしろI2Cにしろスレーブ側もマイコンだと電子工作として楽しくない 面倒すぎて
209 :
774ワット発電中さん :2010/03/28(日) 06:09:20 ID:o4rSTSPs
面倒というか難しいのに挑戦するのがいいんじゃないか
210 :
774ワット発電中さん :2010/03/28(日) 06:47:40 ID:KdsEOn7S
質問です。 2313でアセンブラで書いてます。 R32以上使いたいとき SRAMの領域を使えばよいのですか? 命令はどう書けばよいですか? .DEF TM1 = 0x60 ではだめでした。 親切な方 どうか教えてください。
>>205 どっかの会社の規格はつかいたくない
オープンじゃないと
>>210 SRAMのアクセスにはXレジスタでアドレスを指定する
.equ TM1 = SRAM_START + 0
clr XH
; write
ldi XL, TM1
ldi Rnn, <値>
st X, Rnn
; read
ldi XL, TM1
ld Rnn, X
その使い方ならインデックスを使わなくてもlds/sts でいいのでは。どのみちレジスタと同じに使えるわけではないけど
214 :
774ワット発電中さん :2010/03/28(日) 13:57:15 ID:KdsEOn7S
>>212 ありがとうございます。
TM1、TM2、TM3を0x60〜62へ設定しました。
R=26の内容が 0x60、0x61、0x62と変化し
それぞれの数値のwrite,read共出来ました。
またまた質問です。
@0x60等の数値はシュミレーターには表示されないのでしょうか。
Arcall先で行うとretでプログラムの先頭へ飛んでしまいます。
もしヒントがありましたらお教えください。
(TM1〜3をR=20付近に設定すれば問題ありませんでした)
Bデバッグでプレークポイントへ到着する時間が長いのですがこんな物なんでしょうか。
Cプロセッサー欄のレジスタは00010001という表記にはならないですよねえ。
親切な方どうかお教えください。
215 :
774ワット発電中さん :2010/03/28(日) 15:16:09 ID:KdsEOn7S
>>214 です。
うろうろして申し訳ありません。
A、B解決しました。
シュミレーターの使い方の問題(かも?)でした。
@、Cのアドバイスと何卒よろしくお願いいたします。
(1)View-MemoryでDataを選択 (4)View-Registerで右クリック->Binary
217 :
774ワット発電中さん :2010/03/30(火) 23:17:52 ID:rVUvuB1u
>>216 ありがとうございました。
確認しました。バッチリであります。
これで大変見通しが良くなりました。
AVRプログラム歴4日目の新米です。(朝から晩までやってるわけではありませんが)
今後ともよろしくお願い致します。
3.3⇔5の双方向・非反転のレベルシフトをしたいんだけど DIPパッケージで手ごろなチップが見当たらない で、ふと思いついたんだけどAVR自身の電源電圧を、自分で切り替えとかってやっても問題無いかな? そったら、SDカードとの通信は3.3V、LCDは5Vとかダイナミックに切り替えできて回路すっきり 経験者がいたらコメントお願いします
>>218 そりゃ無茶だ。
LCDなら・・・と言うかTTLレベルなら3.3vでも十分のはずだから、3.3v駆動にするとか、
抵抗をかませるとかした方がいい。
>>218 問題ないんじゃないの。やってみたら。回路構成に無駄が多い気もするけど。
どっかに安い有機ELパネルないかな?
ヤフオクで流れてるよ
>>221 coconetっていうか液晶工房とかにあるけど。
高解像度はコントローラ無いとね〜
コントローラ内臓だとSHとかになるのかな?
データシート日本語翻訳のHEROさんのところが。。。 どうにかならないものか。。。
これはキツいな・・・ 一式3000円くらいなら金払って購入できるけど 月額3万と言われるとオレはちょっと無理 残念だけど仕方ない 善意で今まで貴重な公開してくれていたから大感謝
これはむしろAVRユーザの激減を招くだけではないのか。 本来、アトメルジャパンが日本語訳を出すか支援すればいい気もするが。 しかし、いきなりここまで高圧的なページを作る作者も大人気ない。 「これ以後のアップデートは有料ページだよん」でいいんじゃねえの? 多分皆ルネサスに流れると思うぜ。俺もそうすることにした。 あよならアトメル。
日本語訳がないからやらないなんて厨なこといわないほうがいいよ 英語版あれば十分
また上から目線か。 あれば便利だろうが。公式版よりも色つきで体裁も見やすいのに。 そういう玄人気取りの意見しないほうがいいよ、俺もプロだかた言うけど。
オリジナルで分からないところ日本語でよく確認させてもらいました。今まで本当にありがとうございました。 CCライセンスとかで翻訳を公開することってできないのかな? ちょっとずつでもWikiとかに翻訳版を書いていけば役に立つと思うんだ。
俺も勉強させてもらったから感謝してる。 でも3万は無理だ。 今は8ビットから16ビットへの過渡期だから そろそろAVRのアーキテクチャは苦しくなってきたし 資料は全部捨てて、後は今使ってる分のリピートだけにするわ 新規採用することはない。 危機感感じるならアトメルが何とかすることだ。 著者には良い仕事の縁があることを祈ってるよ。
極端から極端だな この業界特有の現象なのか
電機と半導体はブレが激しいと思う そこで働く人間も同じだけど でもちょっと今回のはちゃぶ台返しみたいで気分は悪いな
見てきた。ナンダカナ〜。結局のところ善意の押し売りだったと。 GNU一般やWebブラウザにも言えるけど、最初から適正な対価を提示・請求 して、自身で受け取る必要がないと思えば、慈善団体に丸ごと寄付するなど していれば市場での競争原理が働くのに、無料で公開するから、結果として 他の有料(優良)サービスが生まれる芽をつぶしてしまう。 個人的には、IT業界の冷え込みの一因は、リーマンショックの影響だけで なく、GNU等の偽善的無料サービスが生み出した人為的なものも含まれると 思っている。 そもそも、ATMELから正式に許可を取ってたのか知らないけど、もし許諾なし で他人の著作物を翻訳しておいて著作権を主張しているなら、まるで同人誌 の二次創作的ノリだよ。 で、いざ金に困ったから金払えって、他人に法律の講釈たれる前に、本人が 人としてどうなのかねぇ? まぁ、いいけどさっ。
>>234 賛否はあるが少なくとも押し売りでは無いだろ
GNUソフトもなぁ。成功しているのはほんの一部であとは糞の山。 優れた製品は有償ソフト・ライブラリに多いけど、やはりピンキリ。 客にデバッグさせるようなのもあるし(w
エイプリルフールだからだよね??? HEROさんの告知では >元々直接閲覧のみで保持を認めていませんが、利用規定に反して該当資料を保持している場合は、速やかに該当資料を消去してください。 というのが書いてあるけど、どこかに書いてあったのかな?知らなかった。 「利用規定詳細」の中には記述がないんだけど。 個人的な閲覧ならダウンロードも可みたいなことかいてあるけど・・・
まあ12時までが4月馬鹿の有効期間だから午後には直っている と、思いたい。
>>234 少なくともかなり早い段階から色々なチップのデータシートを翻訳してたから
無断じゃなくて協力関係にはあっただろうとおもうよ。
売却先がアトメルだったらいいのにね。つーか雇ってやれよ。データシート翻訳要員として。
データシートに限定しなくても、WEBの日本語化も含めた翻訳要員で売り込めないかね ところで、Atmel日本支社って代理店営業だけなの? 日本で少しでも市場開拓する気があるのか、MICROCHIPのサイトでも見て猛省してほしい
見てきたけど、残念なことだな。 それはともかく、気になることはいくつかある。 二次著作物だからアトメルとの取り決めがあったはず。たしか商業利用禁止とか。それは自分自身も守らないといけないのではないかな。 売るなら売るで、アトメルとちゃんと話しておいたほうが良い。 あと、一度配布したものの利用規定をあとで変えることはできない。ただし、改版して違う利用規定にするなら話は別。 あと著作権にも制限はあるから。個人利用とか大学図書館での保存のためのコピーとか、教育目的の利用とか。 アトメルへの売却というのが一番良いと思うけど。無理なら商業利用できる翻訳権を獲得して企業への販売とか。
実はエイプリルフールネタとかw
そうだったら見事な釣り針
つーか金になってなかったのか IPAみたいな助成金受けるような仕組みはないなのかね
あらまだ直ってなかったか 月30kでの利用と言うことはいくらで売るきなんだろうな。 社会が悪いから自分が不幸だと言う考えからでたっぽいけど、 正直残念だな。
貧すれば鈍するとはまさにこのこと 余裕無くなってこの有様よ
AVRでテレビのリモコン作ったんですけど 本物のリモコンって電池で何年も持つじゃないですか マイコンで作ったものはそんなに持たないですよね?
本物はボタン押してるとき以外はスリープ状態
スリープってどうやるの?
寝る
ポート入力の割り込みを許可に設定した上で スリープさせるコマンド実行してボタンが押されたら割り込みが発生して スリープ状態から復帰してダミーの割り込み処理やったあとに 通常状態に復帰してリモコンの動作するとかじゃねーの AVRではスリープ機能使ったことないからよくわからん
>249 どのMCUかによって微妙に違うけどデータシートのPower Management and Sleep Modes みたいなセクションがrからそこを読んでみればやり方はわかると思うよ。
AVRのスリープ機能は段階がありすぎてむかつく 使いたくない プンプン
スリープもしかりだが、動作電圧、クロックもできるだけ最低にするべし。 計算するとびっくりするぐらい差があるよん。
2313のフューズビットのエラッタはやばいな。スリープ絡みの
257 :
774ワット発電中さん :2010/04/01(木) 22:24:51 ID:CpMhWpx4
>>254 に貼られている所の資料を持っていると請求書が来るって事なのかな?
横のものを縦に直して、後出しの請求書ってのは ありえないな。カスラックレベル。
HEROさんどうしちゃったのかな(´・ω・`) 色々書いているけど、心が荒んでいるような感じだ。 4/2の今でもそのままだから、エイプリルフールじゃなさそう。 なんかでも、善意で公開してくれていたのをこんな事書き倒して有料化してしまうのは、今まで 無応援だけど感謝しつつ見ていた私のような人まで嫌悪感を与えてしまう。それとも嫌悪を抱く 私が変なのかな?
お金があるうちは、余裕を持ってられるけど 無くなれば、なりふり構ってられないだろうな 貧乏になるのは怖い。
メーカが出している無償オンライン資料の翻訳版が、出版社から有料の 紙書籍として市販されるケースはあるようなので、それはそれでアリかな。 訳があると概要を掴むのに便利だし、とっつきやすいから、書店にあれば 買うと思う。 それでも原文を読んでおく必要がある、という状況はあまり変わらない。
なんか大人げない対応だよなぁ。 まぁ、2chごときに呼応している時点でもうアレだけど。 でも、こういう豹変ぶりはハード・ソフト関連の有志には珍しくない展開だな。
まぁ色々あるって事は分かるけど、大人げないというのも否めなくはある
これだから半角カナを使う人間を信じることが出来なくなるんだよね。
出版社からまとめて出してくれるのは助かるね ついでに添削もしてくれると有難い。 AVRコア自体は枯れてきてるから、いいタイミングじゃないの 重複するレジスタの説明を省けば 普通の厚みに収まると思うよ。
>>265 なぜか、そうなんだよな。心が狭いから字も狭いのかしらん。
>20年近くに渡って技術情報の提供を行ってきましたが、 >現状ではこの先の生活が成り立たなくなり、 >また、関係方面の協力も得られず、 >本格的な求職(就職)を目指さざる得ない状況となりました。 今までどうやって食いつないできてたんだろう? バナー広告を設置した上で、BBSで翻訳リクエストを受けて 日々更新・公開していればHit数稼げると思うんだが。
バイク便やら仕事を転々としながらも ブログを毎日更新してくれるような人もいるのに もうちょっと元気がほしいところだ 無理強いするつもりはないから 止めるならやめればよし。 金寄越せってのはどうにもおかしい。
同情するなら金をくれ いたってスリランカ いやセイロンでございます
技術文書の翻訳って、かなり需要あると思うけどな 翻訳業って年齢あんま関係なさそうだし ちゃんと就活すれば良い所入れるんじゃないかな
せっかくここまでやってきたんだから、3万で→誰も使わない なんて努力が無に帰るようなことにならないよう、しかるべき所に渡して欲しい
273 :
774ワット発電中さん :2010/04/02(金) 17:09:08 ID:qzjCm+oq
月30kというのは「絶対こんな奴いない」という事が前提だろ。仕事で 言えば「お断り見積もり」みたいなもんで。
従って、同情もしないし金もやらん。 てか、あそこのデータシートが有って良かったと思った経験が無いからどうでもいい。
金の切れ目が縁の切れ目
>>274 どうでも良いならなぜそういう発言するかね。
窮地のときのこういう対応は、恨みとして残るものなんだよ。
俺はありがたかった。視覚的な配慮もあって、ナナメ読みできるし。
権利を売ったりしないで、ダウンロード販売とかでなんとかならないものか。
持ってると有料になるデータ全部セットをうpってみて
>>276 >>241 でも指摘されているけど、ATMELの許諾無しに商用は無理かと。
翻訳権を安価で得て、同人販売のルートに乗せるのは可能だったと思うが、
追い詰められ具合を見るに、中の人にそんな対応は無理だったと思う。
余裕が無くなったということはわかった、そして自暴自棄するという流れも理解した。 成果物はもうどうでもよくなったのだろう、おつかれさま。 個人的にはスイッチを切り替えて欲しかったところだが、片切スイッチだったようだ。
金になる算段が付いたから後始末を開始したんじゃなくて、 これから金にしようと思ったのでとりあえず邪魔になりそうな要因の排除を始めたんだな 方法や認識はすごく間違ってるし、買ってくれるとこも現れてないのに
AVRから日本語データシートなくなったのか、ほかのマイコンを使うかな
こりゃ下手にAVRを勧められなくなっちゃったな 今後はarduinoみたいなしょぼい用途でしか見かけなくなるのか
ATMELの本社あたりからクレームがついて「勝手に翻訳してんじゃねーよ, やるなら金払え」みたいな事を言われてお怒りの有償化というなら なんとなく納得できたり
AVRを初心者に勧める理由がまた1つ減った 今の俺ならためらいなくR8Cを勧める。 理系の堅物は追い詰められるとすぐに暴走するな 社会性に問題があるんじゃないか。
本厄ねーと 使えないやつらは消えろ
選民意識丸出しの厨がきた
>>285 好奇心に目を輝かせて必死にがんばる中学一年生にそれが言えるか?
別に厨房がAVRで電子工作できなくなっても構わんと思うかもしれんが
結局そういう裾野が狭くなって、草の根レベルの活動が衰退するのは
長い目で見れば大きな打撃だと思う
AVRもArduinoも解説ページなり書籍なりは、沢山あるから厨房の入門者レベルの資料は大丈夫じゃないか?
とりあえずあーだこーだ言わないで、代替のデータシート翻訳版作るっていう人はいないのかな 他力本願で申し訳ないんだけれど、データシート作るって言うなら申し訳程度に協力する 確かに高校の英語+専門用語さえあれば英語データシートはほぼ理解できるんだけど 英語を読むと言う苦労を趣味に費やしたくないのは本音
別に電子工作する中学生は減らないけどな PIC勢力がさらに増えるだけで βvsVHSみたいな、いい物なのに流行らないもどかしさを さらに加速する動きだから過剰反応している
>>289 ノシ
世間の需要と自分の実益(そのチップにたいする関心度)が
バランスとれるなら、ある程度続けられると思う。
一番、日本語化の需要があるのって、どのデータシートですかね。
アトメルは日本市場プライオリティ低いのかね
>>291 ATTiny2313とATMega168あたりが入手性もよく日本でよく使われているんじゃないんでしょうか
これらをベースにしてあとは機能とかレジスタの違いとかを記述していけば大丈夫ではないかと
こういうのをデータベース化して参照することが出来れば本家のデータシートよりよっぽど使い勝手が
よくなると思う
>>292 アトメルは日本には興味なさそうだな
中国とかそのあたりが好きそうだ
>>287 英語嫌いでもいいけど 日本語じゃないといやだという発想はだめのもと
毎日のようにやってれば わかるよ。
マニュアルがないから くれといったら
ホイと渡されたときにフランス語だったのにはまいったが・・
はい苦労自慢きましたー
こんなPICスレにいられるかっ
>>293 把握。
自分ではarduinoしか使ったことないので、週明けくらいから
ATmega168(doc2545.pdf)あたりをボチボチやってみます。
では俺はAVRのデータシート検索用システムをいろいろ検討してみます 現行Wikiに載せてもいいけれどほかに使いやすい仕様書のシステムとかある? PDFだとお手軽に見れないんだよね……
>>287 同意。
慣れてる人にとっては、データシート内で注目すべき点が分かってるから別に言語は問わない。
問題はそうじゃない人、特に経験のない人にとっては日本語になってるってのは大変敷居を下げるものだし
>>300 言ってる事が矛盾してないか?
慣れてない人間は日本語で読んだってチンプンカンプンだぞ。日本語だから敷居が下がるという
のはあんまり正しくない。
それよりも「とりあえずココを読め」的な抜粋(Summaryじゃなくて・・・あれは、チップ選択の時の
参考だから)があれば良い。本当の初心者にとっては、この抜粋が母国語であれば最高なんだけどな
日本語ってだけでだいぶと読みやすいが それだけじゃダメなのか?
303 :
774ワット発電中さん :2010/04/03(土) 18:02:52 ID:R3qRnhWb
3万/月ってイヤラシイなwww
>>299 チップ毎に機能一覧がでて、その機能を選ぶとレジスタとサンプルコードが出るといいな。
あとできればブートローダを一緒につくらないか。
mega88のようなリセットベクタを移動できるタイプ用と
tinyのようなできない用の2つで。俺はアセンブラできないから、手伝ってほしい。
>>304 そんな感じのを想定している
やるならWebフレームワークかCMSで作りこまないと
余裕が出来たらやるかな
>>305 既存のPDFを共同で翻訳していくならそれでいいと思う
そこからメタデータに結び付けていくのは難しいかと
できればオフラインでも使えるといいな
オンラインでいいわ。常に最新版になると期待して。 ただ印刷はできるようにしてほしい。印刷禁止だと面倒。
オフラインのデータシートは凄い金額になるからなぁ
オンラインで全員で編集できたら営業妨害だとか言って消したり嘘書いたりして荒らされそうな予感
まあ徹底バックアップは必要だろうな でないと悲惨なことになるorz
ID必須にして、全バージョンに戻せるようにしとけばいい それより、図はどうするんだ
こういう時こそAVR-Wikiを活用すべきだな ちょっと考えてみる
だいたいこの手の事は取りまとめ役がいないと収拾つかなくなるんだよね
こうなったら日本のAVRの権威に頼むしかないな・・!
316 :
774ワット発電中さん :2010/04/04(日) 20:28:13 ID:o2Ul9EYv
英語と日本語だったら日本語のが読む労力少ないのは当たり前だしなぁ
>>316 そう?英語が達者なわけじゃないけど、マニュアルやデータシートに限って言えば、
書き方がパターン化されている分、英語の方が読むの楽だなぁ・・・
日本語の場合、訳者のレベルによっては酷いのがあるし。(結局原文見ないと
意味不明とか・・・)
tiny2313でメモリが足りなくなったのでmega328使い始めた すごい、空きメモリが減らない。標準ライブラリ関数とか普通に使える。なんだこれ
>>317 そう。その点では国産デバイスは時間の節約になる。最初から日本語で書かれて
いるから意味が通じにくい部分が少ない。
ネットで公開されてるのだと、マウスオーバーで原文が出たりするな 単語をカタカナにするだけにするか、日本語の定訳があるかのガイドラインが要る どっちかというと、不必要に日本語化し過ぎて意味不明になる 例: 直列プログラミング
>>318 さぁ早く浮動小数点で三角関数を使って計算してLCDに表示してみるんだ!
323 :
774ワット発電中さん :2010/04/04(日) 23:25:11 ID:2fUyyfx4
324 :
291 :2010/04/05(月) 00:23:56 ID:3nNz7sWY
>>321 > 単語をカタカナにするだけにするか、日本語の定訳があるかのガイドラインが要る
そうなんですよね。
ちょっと今日の空き時間に、わかりやすそうなI/Oポート(13章)とタイマー(14章)をみてみたんだけど、
いざ日本語にするとなると、結構迷う用語はいっぱいありますね。
読者の立場に立って、カタカナと意訳とどっちがわかりやすいかとか・・・
技術翻訳の正しい工程としては、まず用語集作りを念入りにやってから、翻訳者に作業分担して
粗訳→推敲→校正と進むんだろうけど、個人的な興味も勝って、泥縄的にやってみる。
一応、後の修正のこと考えて、翻訳用語集(簡単な辞書みたいなもん)は作っておきますね。
今日はとりあえず、寝ます。ノシ
そのうち誰かさんが翻訳したものが紙媒体になって出版される という筋書きだろ?
PICの本を読み込んで、マイコンとはこういうものかと理解した上で AVRのデータシートを読むとよく判る
AVR使ってからルネサスのR8Cを使ったら 実に細かく制御できることに感心。 同時にAVRのシンプルな構造にも感心した。 どっちを勧めるかといわれれば、日本人にならルネサスだな Hewの無償体験版は高性能だから
329 :
774ワット発電中さん :2010/04/05(月) 21:53:25 ID:aHRJDEL2
AVR推してる人ってちょっと変な人が多いしね
マイコン入門者にはどこにでも売ってて簡単に買えることが重要だと思う。 PICとAVRしか選択肢がないのでは。
>>330 それは賛同できないな。
購入できるところが少なくても、買えるのならば問題はない。
それより大切なことは、知りたいことを調べやすいことだな。
>>330 ルネサスのICなんてどこでも買える
それに下手にチップだけ手に入れても
周辺の電源やらを手で作ったら
余程なれた人でないと高くつくよ
オレは「始めるならAVRがいいよ」、なんて言ったことはないな。 「AVRならこんな楽しいものが作れるよ」、とは言ってるけど。
つまりDIPのAVRでArduino最高って事だw
マイコンを使った電子工作という世界が楽しいのであって、 PICを使うかAVRを使うかは瑣末な差でしかない 仮想の初心者に敢えてAVRを勧める積極的な理由は何か
>>335 本当に1から始めなければならない初心者だと言うのなら、
それこそ学研Japaninoの様なトレーニングキットを薦めるだろ。
JapaninoがMega168だから薦める訳じゃないよww
自分330だが、なるほどな。 ちょっと視野が狭かったかもしれない。
>>335 レジスタやRAMが多くて、EEPROMもあって
アセンブラもCも環境が無料で用意できて、アーキテクチャが簡単
外部部品も極端にいえばVCCとGNDさえ配線すれば動くし
それとhero氏のデータシートも参考にできると書きたかったが
それは選択肢から落ちたな
むしろavrを進めない理由がない
PICはROMとRAMが細切れなのが勧められないんだよなぁ AVRはヒューズの設定ミスったら使えなくなる罠が初心者泣かせだし
>>340 初心者の導入教育ではヒューズを書き換えさせない(ヒューズの書き換えを教えない)
AVRやPICはRAM上のコードを実行できないんだよな JITコンパイルみたいなことができない
>>342 それがデメリットになったことがある? ないよな。言ってみただけだよな。
H8なんかは、フラッシュの書き込み保証回数が少ない(100回とか) よって RAM上で実行できないと開発中にCPUチップを何度も交換する羽目に
>JITコンパイルみたいなことができない そんなことはない。100万回くらいJITコンパイル出来る。 コードの差し替えはそんなに回数要らない。 ダウンロードはシリアルかUSBで可能。 プロファイリングはホストPCのエミュレータでやったほうが良い。
>>343 外部バスにRAM付けてもほとんど意味がない
>>345 フラッシュ書いてる間に電源落ちたら動作保障できないし
そもそもRAMに比べて遅すぎる
寿命も確実に縮む
RAM上で実行できた方がいいに決まってるだろアホ
H8とかスレ違い
>>346 RAM(データメモリ)上のデータをコードとみなして実行できることの
デメリットを考えたことある?そうすればAVRの合理性が理解できると
思うんだけど・・・
>>344 実際のところ、1件の開発に100回も書き換えないで済むだろう。
同じデバイスを色んな作品に使いまわして 「10種類の作品を作ったけど所有している
デバイスは1個だけ」 とか、そんなことないよな。
350 :
774ワット発電中さん :2010/04/07(水) 11:52:14 ID:62DKhXBa
そうなんだけど利用者の心理からいってその差は大きいよね とくに学習者にとって大きい(きっと自分はいろいろ試行錯誤するだろうと思って) また買えばいいのに、たいした出費や手間でもないのに いっぱい使える方が良いなとか思っちゃう でマイクロソフトなんかがアカデミック版を安価に供給してることからもわかるように 現在の学習者のシェアは将来の市場のシェアを予言することになる 海外でAVRがヒットしたのは学習や開発環境の用意さ とかのおかげだと思う
デバッグのためにアーキテクチャを変えるとか本末転倒だな
>H8なんかは、フラッシュの書き込み保証回数が少ない(100回とか) 書き換えていくと駄目になるかというのは確率的に決まるような 部分もあるのだけど,国内はお客さんとなる側の品質保証がかなり うるさいところが多くて,回数をうたうとその回数を完全に満たす ことを要求されることもあって,社内での規定もかなり厳しいんで 数値は相当控えめ。 公称値がやたらと多い海外メーカ品と比べても実力値では大差 なかったりする。
大学に書き換え限度で死んだH8何個かあったな
355 :
291 :2010/04/07(水) 23:32:55 ID:DALkzpeH
>>326 これ、注文しました。(近くの図書館で借りようかと思ったけどなかったorz)
用語・訳語の参考にしてみます。情報どうも。
中間報告:
適度な難易度のタイマー/カウンター0の章(14章)を半分位、粗訳しました。
今は、べたテキストで翻訳文を書いています。
週末には、テキストかPDFで公開できるといいな、という感じです。
明日は、比較的時間取れそうなので、一気に進めたい。次は、13章ポートに行く予定。
この二つが、一番使いでのありそうな章なので、翻訳品質や使い勝手のフィードバックを
もらった上で、その次からは文書の頭からガリガリ行ってみようかと考え中。
5年前に90S2313と90S8535に大ハマリしたものの仕事やらで中断してしまい、 5年ぶりにこの世界に戻り、浦島状態でスペックだけ見てMEGA88買ってきました。 さぁ日本語マニュアルみて楽しむぜ! と思ったら翻訳の作者がヘソ曲げちゃったのか、これは残念だ・・・ たたかれるのを承知の上で・・・どうかお願いですから、 どなたか、mega系を固めてUPお願いできませんでしょうか。 本当に日本語マニュアルは有難かったので、ないと悲しいです
AVR 導入しようか検討してて購入寸前までいってたけど、今回の件で思いとどまった。 でも USB ホストつきで入手が容易なのは AVR だろうしなあ。悩むところ。
358 :
774ワット発電中さん :2010/04/08(木) 12:42:56 ID:C0D3dyls
>>353 すごいな。さすが大学。
輸出仕様で、SHからAVR32に切り替えたが、命令の直交性は同じぐらいだね。
むしろ使いやすいかもしれん。
AVR32を解り易く語ってくれ
360 :
774ワット発電中さん :2010/04/08(木) 22:09:33 ID:/W3se2iN
おーい
お茶
>>359 熱くかい。冷ややかにかい。www
使用しているのは、AT32UC3A3256だが、魅力を関しているのは48QFPだな。
32ビット系で少ピンは少ない。
クロックは60MHzだが、実行サイクルは1、2。 DIV命令で今回はかなり助かった。
ARMの条件命令のようなコンパイラ特殊機能はないが、そのかわり素直で解りやすい。SH相当だ。
デバッグは、AVRmkUでOK、コンパイラ、デバッガーを含めた開発環境が無料というのが魅力。
フレームワークに関してSHは論外だが、ARMのようにどのスタイルを選択するかなんて悩む必要もなく
(Atmelだけだから当然か)Eclipse環境で使用ペリフェラルを自由に追加削除できるのも魅力だ。
かなり開発環境に力を入れているようだが、前回のMICROCHIP買収劇以降、ちと熱が冷めているようだ。
ま、使ってみた感じは悪くはないが、SAM3Uも販売開始になる事だし、Atmelが軸足をどこにもっていくかで
状況は変わるだろう。
個人的には、SAM3UのハイスピードUSBとDMAに魅力を感じている。
>>362 続き
軸足の話は、AP7000の二の舞になるかの話。
フレームワークの使い勝手は、開発環境のなかでピカイチでないかな?
Eclipseが嫌いな人も多いようだから人それぞれだろうが。
当然クセもある。
RTCのDS3234に接続したのだか、SPIのCSコントロールに悩まされ、バースト転送を
あきらめた経緯がある。
//-----------------------------------------------------------------------------
// disassert CS after transfer data.
// single transfer only.
static void cs_disassert(void)
{
DS_SPI->CSR0.csnaat = 1;
}
他には、多ピン限定だが、外部メモリアクセスが楽なのも良い。
ATMeaga8515の流れだ。ATmega8515は、MKY40では御世話になった。
まぁ概してAVRの流れを汲んだ使いやすいMPUだ。一度使ってみてくれ。
>>363 あっとそれから、このスレで日本語マニュアルが話題になっているようだが、
AVR32では、和訳の期待はできない。
最新のマイコンを使用する者は、それが障壁ではどうにもならないと心得よ。
俺のAVR32開発環境は、英語版Windowsに入っているぐらいだから、
押して知るべし。
>>365 マウスのボタンをクリックしてみりゃわかるよ
って意味じゃない?
締め切りが迫ってきて初めて真面目に調べるって意味じゃない?
駅のホームで…(以下略
AVR32はいいな。あとは値段の問題。 XMEGAもやすけりゃ量産で使いたいんだが アトメルジャパンは売る気がぜんぜんないらしい。 設計で採用しなきゃ、自然に機種消滅したら終わるんだが わかってんだろうか
アトメルジャパンのやる気のなさは異常
ほんとだ、「アトメルジャパン」でググっても全然活動している情報が出てこないね
今USBの使えるPICに習熟して、AVRライターを作る準備をしてるとこ
>>372 昔と違うんだからPICにせよ、AVRにせよ、メーカの純正ライター買うほうが手っ取り早いと思うんだけどなぁ
翻訳の件、Atmelに確認しました?
はあ?
AVRのpickit2相当って何?
>>376 AVRISPmkII かなー 秋月でも売っているし(4000円)
俺もAVR始めるとき328p 644p tiny2313限定のライタをPICで作ったぞ なぜならそういうことが好きだから
初心者にライタ作りは薦めないな。最初でやる気なくす。
メーカ製ライタはデカくていや。 おれのは、USBメモリサイズ。
>>374 いちおうATMELに「あんたのとこの著作物利用してこういうことしてる奴が居るんだが」
みたいな内容でメール投げといた。あとはATMELがどう動くかだね。
いまHEROのページ見直したら4/1に時と比べて余計に敵増やすような文章に変わってるな…
・半角カナの積極的使用について
>>380 メーカー製ライタは外黒人サイズ。
俺のはポークビッツ
まで読んだ。
ふるいPC探してきてパラレルとかCOMに繋ぐしょぼいライター作るが王道じゃね? そしてLED点滅させるのとかつくって飽きる がんばりやさんは小さいナイトフラッシャーとかラーメンタイマーつくるくらいまで行く、そして飽きる
385 :
291 :2010/04/10(土) 10:21:09 ID:cCVCL63v
>>374 今新しく翻訳しているのについては、リファレンスとして、ある程度軌道にのったところで、アトメルに連絡してみようかな、と思います。
なんにもないところで、許諾の返事くれ、っていっても難しいだろうから。
アトメル側に著作権・決定権がある(けど、内容についての保証はしない)ことを前提に、
二次著作物としての無償での公開許諾(というかお目こぼし)をなんとかもらえないかと考えていますが、
どう判断されるかはなんとも。
ユーザーが増えるんだから禁止にするほうがどうかしてる
お目こぼしすることをオフィシャルに示すなんてことは絶対にあり得ない 何も言わずにやるのが吉 うっかりつつくとはっきり禁止されるのがオチ
そうすね。とりあえずやっちまって、ビジネス上のめんどくさいことは後から考える。
一応仕事でつかってるから、そこそこ何か書けるけど この手の情報って、使う側が傲慢であることが多いのは昔からだしな hero氏に突貫した馬鹿は視ねといいたい でも、いきなり公開を止めるってのは大人気ないな 放置して以後更新分は全部別でやります のほうがいいとおもうわ 全部CDに焼いてくれるなら買うし 3万じゃ買わないがな
幾らなんでも以前のを消さないと云々ってのは無理だろ そもそもダウンロード禁止とか書いてあった? これが通るならグーグル先生から幾らでも金引っ張れる
AVR32の使い分けの立ち位置を知るために、SH-2、ARM7と比較して語ってもらえると嬉しいかも
>>385 情報そのものは著作物でははない。翻訳だと著作物になる。自分の表現にしてしまえば自由にできるようになって良いと思うのだがどうだろう。
許諾が必要だと、いつか今回のようになる可能性もあるし。
>>393 AVR32自体はCortex-M類似。
Uファミリはメモリ管理もMPUでCortex-Mを意識してる。
特にATMELのCortex-M3ファミリは充実度がまだこれからと言う事もあって
Cortex-Mより上位の位置付けかと。
ATMELのARMなSAMより周辺が色々付いてお得なのが売りだろうけど
製品的にもARM7より高速でARM9よりお手軽、MAC付きも安いよ!
という事で。
確認して損はないと思う。。。 もしかしたら、奇跡が起きてリンクはってくれたりしたりして。。。
公認してしまうと何かあったときAtmelにも責任が及びかねないで公認することはまずない ただし不利益を被る要素は何もないので、文句を言ってくることもまずない 黙ってやるのが一番だと思うが・・・
>>394 >情報そのものは著作物でははない。翻訳だと著作物になる。
>自分の表現にしてしまえば自由にできるようになって良いと思う
例えば、CQ出版社からトランジスタ規格表が発売されているが、
載っているデータ(耐圧・電流・速度等)そのものは著作物ではない。
但し、あの表の構成や分類はCQ出版社が編集したもので、
編集著作物となる。
然らば、章構成も変えず翻訳しただけのアレは二次創作物と同様に、
オリジナルの著作権を侵害していると訴えられるリスクがある訳で…
(ATMELロゴはもろアウトだと思われ…)
ロゴを外し、本当に「自分の表現」で書き綴るとこまでやらないと
グレーゾーンから飛び出すのは無理だが、労力的に採りえる選択肢は
>>398 だね
>>397 Any other distribution to third parties is strictly prohibited unless you obtain the prior written consent of Atmel.
あなたがアトメルの文書による事前承諾を得ないなら、第三者へのいかなる他の分配も厳密に禁止されます。
だから、確認すれば「承諾すればok、さもなくばNG」という明快な回答が来るだけ
承諾を得る方法については、普通に契約なので、多分すごく面倒だし、
個人に対して承諾なんかしない
ある意味敷居が高い方が、変な人(含みナシ)が増えなくて良いと言えば良いんだけれど そのスレッショルドでの問題点がモロにHERO氏の問題点でもあるんだよな。(送り手受け手双方で) ATMELの日本法人が仕事をすれば、解決という話ではあるのだが。 まぁ今更無理か
>>395 すげえ分かりやすかった。へーかなり興味深いな。
CortexMを意識してるのは結構つかいやすそう
>>400 その前のセンテンスが抜けてる
You may distribute free copies of the documentation available at this website
only to customers and prospective customers of Atmel's products.
あなた達はこのウェブサイトにあるドキュメントを自由に配布してよい
ただし、Atmel製品の顧客もしくは顧客になる見込みのある者に対してのみ
「Any other third parties」はAtmel製品顧客以外の、って意味では
誤 ×Any other third parties 正 〇Any other distribution to third parties
そのまんま丸ごとコピーして興味ある人に渡すことだけが許可されている You may not modify in any way any of the Materials contained herein あなたはいかなる方法でもここに含まれたMaterialsのいずれも変更できません。 modifyには当然翻訳も含まれる
再配布はオリジナルに限るってことですね。 しかし、HEROさんの利用規定に「現在、原作著作権者との取り決めによって、 再配布、営利目的または類する行為での使用、二次使用は禁止されております。 」 と書かれている。なぜ、本家は再配布を許可して、2次には許可されなかったのかが気になる。
もうどうでもいいよ、さよなら
感情論やらはさておき、仮にAtmelから非公式なりで承諾を得ていたとしても、 『レディオテクニカ有志による 翻訳版』とあるので、もし業務時間内にやった 作業の成果物であれば、法的には翻訳物の著作権者はレディオテクニカが保持 していると判断されるかもしれない。 また、会社が関与や権利を放棄しても、少なくとも「有志」が複数なら、取り 分でもめる可能性があるし、実際に分担作業でタッチした文書毎に著作権を主張 してくる可能性がある。 そして、もっとも問題なのが、誰がHEROってペンネームで活動していたのか 世間的には周知されていないので、成り済ましの危険はおろか、たとえ本人 でも、それが本当か確認する手段がない。
409 :
774ワット発電中さん :2010/04/11(日) 16:37:28 ID:R6xm2G3N
マイクロチップ テクノロジー ジャパン 株式会社 ⇒ Webあり アトメルジャパン株式会社⇒ Web無し。 勝負あり!!
410 :
291 :2010/04/11(日) 17:19:30 ID:NScvkEES
補足。いちばん、下に小さい広告がでちゃいますが、 今借りている無料レンタルサーバー屋さんによる自動挿入なのでご勘弁。 どこかもっといい場所あったら教えてください。
414 :
sage :2010/04/11(日) 22:26:25 ID:cGBASXP+
>410 キレイですね。HTMLのほうが見やすくて好きです。 ただ、本文では「102ページを参照してください」のように 参照先をページ番号で指定してますが、 そこはどうやって解決するんだろう。
ハイパーリンクでアンカー指定すればよかろ。
今日から2313で遊んでるとこ スイッチとLED付けてみた プルアップ抵抗要らんかったのかー
417 :
774ワット発電中さん :2010/04/12(月) 20:37:36 ID:xpOIDE1+
俺も昨日から秋月で買った一番やすいやつtiny13aで遊んでんだけどwinAVRって最適化で時間稼ぎの馬鹿ループを消すのな 最適化だから消しても良いんだけどそれが立ち上げたときのデフォの設定ってのはどうなの こういうもんなの? 短いソースなのにLEDが点滅しなくてめっちゃ悩んだ
419 :
774ワット発電中さん :2010/04/12(月) 20:48:40 ID:MzWUst3l
いやGCCが最適化で無駄ループ消すのは知ってるよ 俺が言いたいのは 何もそのオプションにして置かなくても良いだろ マイコンの開発なんだから って話だよ それも強固に主張してるわけではなく 「それともそんなもんなのかねぇ」 くらいでw
マイコンだからこそ最適化してもらわないとプログラム領域が足りなくなるんだが ・無駄っぽいけど意味があるかもしれないから残して大きなバイナリに ・無駄っぽいのは明示的に示さないと消して小さなバイナリに どっちが良いかは人それぞれかも知れないけど、少なくとも作者は後者を選んだだけじゃね
オプションで抑止すれば
時間稼ぎ用ループのカウンタ変数にvolatileを付けておけばいいんじゃね
423 :
419 :2010/04/12(月) 21:15:22 ID:QxeEX2u0
>420-422 みなさまのご意見まさに正論 私が間違っておりました スレ汚し申し訳有りませんでした
組み込みは始めたばっかりかな? PC アプリじゃ volatile なんてまず使わんしねえ。
C言語においてGCCはおそらく最も最強なコンパイラだと信じてる。
Web系やPCアプリじゃ許されても、組み込みでvolatile知らないのは許され んだろ。volatile指定してるのに最適化でループ消したら、gccでも何でも 叩いていい。
>>423 まぁそうイジけるなよ
と言うのも、自分も最初同じ理由でハマッたから叩けないw
とりあえず #define nop __asm__ volatile("nop") で省略されないNOPを定義しとくと便利
あと、割込みでピンを読み込んで、メインループで処理しようと思った時に言うこと効かなかったのも困った
結局
>>424 が言うように volatile なんて知らねーよ・・・ってことだった
組み込みなりの面白さはあると思うよ
住人も組み込みなりの人種が多いけど
429 :
774ワット発電中さん :2010/04/12(月) 23:42:57 ID:MZi8OaQR
>>426 割り込みでフラグ立つのをループで待つときも
volatile必須ですよね。
Wikiの「ここからはじめよう」は上から全部読んでおいたほうがいい。 ただ、古い情報と新しい情報が混ざっているので鵜呑みにはしない方がいい。軽く怪我するからw
割り込み待ちとかwait関数とかはRTMで多少は解決するので WinAVRとかAVR Studioとかで簡単なRTMを標準サポートして欲しいとか思わなくもない。
winavr無くてもavr studioでgccが選べるけど、winavrは何の為に入れるの?
avr studioにはプラグインは入ってても gcc本体ははいってないんだぜ
volatile と言えば、Delay用関数に付けなくてハマったことがある
>>427 単なるバグなのか、例によって gcc が勝手な拡大解釈で実装されている
可能性もあるけど、volatile とconst を併用した場合の挙動って、案外
言語仕様上は未定義だったりしないのかな?
#define HOGE_STAT_REG (*(volatile const char *)0x12345678)
なんて定義をして ステータスレジスタ等、Read Only レジスタへの書き込み
コードを書くとエラーを出す気を利かせたつもりが、肝心のステータスレジ
スタ読み出しで最適化の禁止が無視される可能性があると。
自分では直接書かなくても、コンパイラ添付のレジスタマクロ定義で使われ
る可能性があるから使うヘッダに目を通したほうがいいね。
436 :
774ワット発電中さん :2010/04/13(火) 09:37:24 ID:cHOqW9iB
ヴァラタルって発音するが、脳内ではボラタイルと言っているw
>>427 volatileの使い方がまちがってるような
>>437 volatile はNVRAM(Non Volatile RAM == 不揮発性RAM)の「V」と同じで、要は
自分のコードで書き込まなくても、変数値が変化する可能性があることをコン
パイラに知らせるための修飾子。
だから、割込処理ルーチンや別スレッドなど、自分のコードが関知しない
プログラムで書き換えられる変数だけでなく、メモリ空間上にマップされた
SIOの受信完了フラグや、外部I/Oポートの状態を読むポート入力レジスタ
などに対しても、volatile修飾子を使うし、これらのレジスタは読取専用
で書き込みできないので、誤ったコードを書かないよう、同時にconst修飾
子を併用する使い方は現実のプログラミングとしてはありうる。
#define HOGE_STAT_REG (*(volatile const char *)0x12345678)
と定義しておけば、
HOGE_STAT_REG=0x55; /* 値(0x55)を読取専用レジスタに書き込む */
というコードは、コンパイル時にエラーではじかれる。 constを付けずに、
#define HOGE_STAT_REG (*(volatile char *)0x12345678)
と定義したら、上記のコードはエラーにはならないが、実際のハードウェア
では期待通りには動かない。(書き込みできない)
なんだ、オンライン統合開発環境GoogleAVRが出たのかと思った・・・
>>423 汎用コンパイラからすれば、コンパイラがコンパイルしたプログラム以外で勝手に変数変えられるとか
思っても見てないことだからそれが当たり前。
PWMでLEDでももやもやさせようと思って調べ始めたら、 思った以上に複雑だった 0Aだけ特別扱い?
そんなに複雑じゃなかったような気がするけど、0Aってことは第3世代のAVR? せめてチップ名うp
>>442 ぜんぜん複雑じゃないとおもうけど
タイマー1を高速PWMモードで出力ポートにLEDつないで
OCR1Aの値を、カウンターリセットの時にちょっとずつ増やしたり減らしたりすればいい。
tiny2313辺りでTOPがOCR0AになるPWM系モード(Mode5/7)でOC0AからPWM出力しようと したとか?
2313なんだけどね TOPをFFにしてdutyを0Aで決める設定はあったような まだ読んでるだけでコードすら書いてないんだけど コンペアレジスタは2つあるから、タイミングはてきとーでいい筈だと認識してた まあ、対象がLEDだからズレてもいいんだけど
447 :
774ワット発電中さん :2010/04/15(木) 11:51:55 ID:yzJnzXFu
もやもやLEDはやったことないなー。 Fast PWM ModeでDCDCコンバータでしか使ってないな。 他のモードも試したけど、どう違うのって感じw
448 :
774ワット発電中さん :2010/04/15(木) 20:08:22 ID:AtBkSe4I
AVR Studioのエディタには タグジャンプついてないんですか?
winavrで配列のインデックスの変数にchar型を使うと コンパイルでwarningが出るけど、出ないようにできる? とりあえずは(int)付けてる
>>449 どんな警告か出るのか知らないけど、charだからではなくunsigned (値は
0以上)だからではなく、signed(負の値をとりうる)だからでは?
char cBuf[10]='0123456789';
char nIndex;
char cData;
nIndex=-1;
cData=Buf[nIndex];
みたいに。
みたいに、というか無茶苦茶だな 酔っ払いか?
2313ってタイマーにエラッタあったっけ。
>>447 基本的にはFastPWMで問題ないのだけれど、モータとかの場合は位相が狂うと困ることがある。
FusePWMでは比を変えても位相が狂わないようになっている。
>>448 タグジャンプはあったような気がする。むしろ、行番号が表示できないorz
エラーメッセージダブルクリックで飛べるのになぜなんだ。。。
454 :
774ワット発電中さん :2010/04/15(木) 22:58:05 ID:moKyeiKo
>>450 signedどうたらの話ならint型もunsigned明示しなきゃだめってことだろ。
コンパイラとしてはインデックスは整数型想定してるんだから
型が違うとwarning吐き出すのは正しい。
castするなりコンパイルオプションでwarningレベル変えればいいだけ。
実際みんなchar使ってるでしょ? 我慢してるかキャストしてるか抑制してるの?
warning出るのってそんなに嫌?理由がハッキリしていて、実害の無いことがわかっているんだったら、 気にすること無いと思うんだけど・・・
直さないといけないwarningが埋もれるから
458 :
774ワット発電中さん :2010/04/16(金) 00:20:28 ID:3q2wXvHn
warningを ワーニングとかウォーニングとかって書かないあたり、 みんな対応が大人なんだな、と思うw
459 :
774ワット発電中さん :2010/04/16(金) 01:22:08 ID:Ikqc6alQ
たかがプログラムになに我慢するんだか。 キャストがいやならint使えよ。
ウォーズニアック
>>457 warning 番号を指定して、出す出さないを指定すればいいよ。
警告を気にしてたらWordで文書なんか書けネェ・・・ と、逝ってみるテスト
463 :
774ワット発電中さん :2010/04/16(金) 09:58:48 ID:IeexDDM9
>>454 charって整数型じゃないの? short や longは?
464 :
774ワット発電中さん :2010/04/16(金) 10:53:38 ID:dvoOOPt3
ああ、PWMはモーターだとHブリッジが貫通とかあるからか。 少しくらい大丈夫?w
昔、ICE200でデバッグ中にブレークボタンを押したら 偶然、最悪のアドレスで停止し、HブリッジのFETパッケージが破裂したことがある。 ハード処理とソフト処理の切り分けの大切さを学んだ
>>463 (一般的な、ただの)整数型 って意味だろ。汲んでやれよ。
467 :
291 :2010/04/16(金) 15:51:45 ID:ewMLAwhK
解消できない理由を説明できないwarningが一つでもあると 品質管理で不合格になる…と言って怒られたことがある。 初心者向けの書籍に書くまでもないレベルの常識だそうな。
winavrって文字列の扱いって特殊なの? char buf[17] = {'a', 'b', 'c', 0}; みたいにして print(buf); と渡すと通るけど、 print("abc"); みたいなことをすると、うまく動かないどころか暴走する
>>468 Linuxカーネルとかwarningだらけの奴は製品に積めないな…
>>469 まず、そのprintなる関数を疑えよw
せめてプロトタイプ宣言ぐらい晒せ。
ついでにprint(PTR("abc"))だとどうなる?
実はprint()ではそのポインタを使ってなくても暴走するのだ void dummy(char *buf) { sub(); sub(); } みたいな関数をdummy("test") みたいに呼ぶと、 2回目のsub()を呼んだところで暴走する 訳が判らん
>>471 それだとsub()の中身を疑うべきだな。
まぁchar *をuint8_tに代えてみるとかあるかもしれないが。
仮に、char *が駄目だとすると
string.hの関数全滅になってる筈だぞwww
>>471 一応、void dummy(const char *buf)で宣言してみる価値はあるかも知れんが。
後、メモリ使いすぎでスタック等を破壊している可能性もあるな。
破戒!
sub()では(っていうかdummy()自体が)ポインタにノータッチなんだから、 sub()側に原因があると思えない でも本当に無罪かどうか月曜に試してみる
環境すら書いてないけど、tiny13A辺りのRAMが貧弱なやつだと、 ちょっとした関数呼び出しすらまずいことになるよ。 RAMが潤沢なmega328pや644p辺りで試した方がいいね。 あと壁があるとすればprog_charの扱いかな。 まあ最初はがんばれとしか。
まさにそのへんなんだけどね ターゲットは2313で、関数を呼び出した瞬間に暴走するあたりから、 スタック絡みっぽい雰囲気はすごくあるんだけど、 そのへんってコンパイラがきっちり管理してくれないの? 呼び出しの段数は main -> print -> putc -> send -> send4 -> _delay_us で5段くらい 多過ぎ? _delay_usは呼び出しじゃなくて展開だっけ
479 :
774ワット発電中さん :2010/04/17(土) 09:04:17 ID:tDSFiUC3
avr-gccで使えたかどうか知らないけど、gccって関数毎のスタック消費量 を計算してくれるオプションかツールってなかったっけ? 案外、割込許可 のタイミングや、割込処理がマズくて死んでいるとかないの? 普通は、もっと簡単で確実に動く処理だけで固めた無限ループを廻して通信 モジュールをデバッグして切り分けとかすると思うけど。 例えば、 for(;;) putc('A'); とか char c; c='A'; for(;;) { putc(c++); if(c>'Z') c='A'; }
char buf[17] = {'a', 'b', 'c', 0}; print(buf); と print("abc"); だと,文字データが置かれてる場所が違ったりするからな
482 :
774ワット発電中さん :2010/04/17(土) 10:28:58 ID:KDBPgG10
なんだかんだいって実はそのprintやsubがおかしかったですに一票 avrstudioのシュミレーションでスタックオーバーフローとか わからんもんなの?
>>478 スタックが溢れると、静的変数やヒープに確保したメモリ領域が壊れるから、
不可解な動作をするようにみえるよ。
C言語はメモリ管理についてはプログラマ任せだから自分でやるしかない。
以前ATtiny2313で作ったものにstatic変数を少々多めに使ったものがあるけど、
関数呼び出しの階層は2段階以下に制限してた。
(ローカル変数をあまり使わない関数でも3段階くらい)
プログラム領域が無駄になるけど静的関数にして呼び出し階層を減らしたりとか。
ちなみにそのプログラムはchar型の静的変数をあと4つくらい追加すると
動作がおかしくなるのでもう拡張できない。
シミュレーションでどんな風にスタックを使うのか調べてみないとな 単に戻りアドレスを記録するだけじゃなくて、他にもいろいろ保存してそう 変数も大して使ってないから領域は有り余ってる筈なのに
485 :
774ワット発電中さん :2010/04/17(土) 13:16:08 ID:tDSFiUC3
>>483 そういうのって、コンパイラやライブラリのバージョンを変えたら、
もうダメポになったりしない?
>>485 だめになるからバージョン指定付き。makefileのコメントに書いてる。
WinAVRのバージョンを上げてないのでまだビルドできるはずだけど、
書き込むときにはテスト済みのhexファイルしか使ってない。
というか、ソースファイルの中に開発環境の情報をコメントしておくのが
普通じゃない? AVRに限らず、PC用のプログラムでもそうしてるけど。
>>484 ATtiny2313のメモリは、128byteしかないからね。
スタックに使える量=128 - 静的変数すべて
ローカル変数はスタックに置かれるから、main関数と
mainから呼び出した各階層の関数内ローカル変数分減算。
(実際はレジスタに置かれるけど、その分のレジスタがスタックに
退避されるから同じ)
それから、呼び出した関数1つごとに、引き数の変数分+α
レジスタが退避されたはず。どの範囲だったか思い出せないけど、
関数を呼び出すごとに必ず退避されるレジスタがいくつかあるんだ。
あとは戻り先のアドレスね。
実際はレジスタ上に割り当てられたままの変数もあるから
もう少し使えるんだけど、上のは大ざっぱな計算だからね。
2313はメモリを節約する書き方をしないとすぐに空きがなくなるよ。
>>478 正確なところは.init3でRAMをデバッグ文字で埋めて、
実行時にRAMを全てダンプしてみれば判る。
関数毎のスタック消費量は.lssファイルで見積もれる。
最低限スタック消費量は見積もれないと、
少メモリのAVRでまともなプログラムは作れない。
重要なのはgccの出力結果を確認すること。
ノウハウとしては、可能であればインライン修飾子を付けて
関数呼び出しによるメモリ消費量を減らしたり、
ローカル変数を使わず、変数は可能な限り外に追い出すとか、
スタートアップを自作するとか、ライブラリ化は避けて
マクロ化するとか、昔のローテクが有効なんだよね・・。
AVRのアセンブラは簡単だからすぐ覚えられると思うよ。
最初はpushやcallの数を数えてけばいい。
>487
レジスタがスタックに退避されるのは、
基本的にローカル変数が関数を跨ぐ場合だけだよ。
何も考えずに書くとほとんどの場合当てはまるけどね。
なるほどー なんかわくわくしてきたぞ つか、プログラム用のメモリとスタック用のメモリの大きさを決める設計段階では、 あんまりC言語の使用は意識してなかったのかな 適当にコンパイルしてみればバランスがおかしいことに気付いただろうに SRAMをだいじに、のモードでソース全体を見直してみる
てか、組み込み用CPUのファームを、特にCみたいなコンパイラを使って PC用プログラムを書く流儀で書いたら破綻するのは当たり前・・・
>>468 常識だね。
なんか具体例がどっかで示されてたが普通に
問題があるプログラムでもWARNING1つでコンパイル通ってしまってたからやばい
>>488 ローカル変数を外に追い出すのはどうだろう
スタックはともかくプログラムメモリサイズも速度も不利では?
>>490 そかな
そうじゃない組み込み用の方が圧倒的多数な気がするけど
mega328pすげーな ChanさんのFatFsがフルスペックで楽勝で動く こんなんあると音楽プレーヤーとか作りたくなってしまう ちっちゃくて軽くて少ないピンでドライブできる液晶モジュール無いかな?
i2cのLCDがストロベリーリナックスにあった気がする。
AVRってどこの国のマイコン?
AVRWRTが何時のマニかmega328pに対応してる。アップデートヽ(´ー`)ノマンセー
>>492 初期ののマイコンだと、ローカル変数の方がクロックがかかった
グローバル変数にしておけばアドレス固定で読み書きできるが、
スタックを使うとスタックポインタの操作の分だけ重いようだ
AVRはどっちも2クロックっぽいから、スピードは変わらないと思う
>>499 まぁ何度もスタックに逃げてるようなのは外部に追い出せば効率いいだろうし
レジスタ占有してるようなのは逆効果だし
ケースバイケース、もしくはアセンブラで書けってことかな
bluetoothを使ってPCからAVRの制御なんか手軽に出来ないかなと調べ中で 安く簡単に出来るようなこと紹介しているサイトないですかね
avrwrt、もうバージョンアップされないのかと 半分あきらめていましたがこれはうれしいですね。
>>499 AVRの場合、レジスタが多いからローカル変数にしておくと
RAMを使わない場合が多いよ
まあリーフ関数ならね
シミュレートしてみると、変数がinvalid locationだらけで、見るからに異常だった 原因は、deviceが違ってた atmega128になってた そんなんで中途半端に動いて、ちょっと追加したら暴走するという 微妙な不具合になる方がむしろ不思議
I/Oレジスタのアドレスやレジスタのビット割り当て、割り込みベクタなどに 下位互換性がある部分しか使っていなければ、ごく普通かと。 実デバイスならメモリ容量不足になるコード量でも、mega128なら余裕が あるから、リンク時(実際はlssだっけ)にもエラーにもならない。 328p指定のコードでも、ROM使用量16K以下でRAM使用量1KB以下なら、168で も動く。
変数のSRAMへの割り付けは互換性が無いみたいで、 一つだけ使ってたグローバル変数のアドレスは異常だった それでも何故か動いてた その後にコード中に文字列を埋め込んでさらにSRAMを使うと暴走
ところで、なんでtinyシリーズってtiny2313にしかUARTないんだろう。 逆に、なんでtiny2313だけADがないのか不思議。 それに、tiny8313はなんで出さないんだろう。出たら馬鹿売れなのに。 tiny4313は名前だけで売ってないのはなんでだろう。別にいらないけど。 tiny8313ならRAM512ByteでSDカード使えるのに。
aitendoは通販で、実店舗はCoCoNet液晶工房の名前だったな。 一応訂正。
511 :
96 :2010/04/20(火) 17:21:32 ID:LPgmH/3H
2313いきなり飽きてきた PIC16Fあたりにない特徴って何だろう とりあえずスピードかな
16Fと比べたらもっともあるだろ。。。 つられてしまったorz
CSTNだから見難いよ
マイクロスコップ?
>>511 45倍の方買ったよ。半田ブリッジのチェックとかにいいかもしれない
518 :
96 :2010/04/21(水) 19:46:33 ID:Vo7a6V3m
>>517 スコップの使い心地はどうですか?LED照明の角度とか。
519 :
291 :2010/04/21(水) 20:03:43 ID:op6/SmKa
これって、アキバの店頭で売ってる? 金曜あたりにいってみるかな。
平日休みだったりするから 営業時間だけは確認した方がいいよ
mega168pをやっているのですがPWMが取り出せなくて困っています。 以下のプログラムを動かしています。しかし、実際にはポートからの信号がでません。 Low出力になってしまいます。タイマー1で普通の割り込み(CTC)はできたのでPWMだけがだめです。 アドバイスよろしくお願いいたします。 /* TARGET:atmega168p Clock:8Mhz */ #include <avr/io.h> #include <avr/interrupt.h> int main(void) { DDRB = 0xFF; DDRC = 0xFF; DDRD = 0xFF; PORTB = 0xFF; PORTC = 0xFF; PORTD = 0xFF; /*Timer1 fusePWM mode8*/ TCCR1B = _BV(CS12)|_BV(WGM13); /* クロックソースを256分周 */ TCCR1A = _BV(COM1B1)|_BV(COM1A1);/* PWMをピンから取り出す */ ICR1 = 0x00FF; for(;;){ } return 0; }
OCR1A = 0x007F OCR1B = 0x007F で試してみるとかな
>>521 あれ、PINレジスタってデフォルト入力になってなかったっけ。
PWMするときは出力にした記憶があるが勘違い?
>>524 >あれ、PINレジスタってデフォルト入力になってなかったっけ。
この表現もおかしいけど・・・
>DDRx = 0xff;
で出力に設定してますよ。
>>467 お疲れ様です
なかなかいいですね。できれば表が図でないとうれしかったのですが。
527 :
526 :2010/04/22(木) 17:55:18 ID:EAkrUW0Z
>>291 仕事ではmega88を使ってます。コストパフォーマンスが良いので。
最初に訳の候補にしたのは良いセレクトだと思います。
特殊な周辺装置はないと考えたら、あとはmega164/324/644pと
高速PLLを持ってるtiny261/461/861なんかが翻訳にはいいんじゃないでしょか
Hero氏もあまりやっていなかった事に取り掛かるなら
アプリケーションノートの翻訳と移植がいいんじゃないかと思います。
仕事で使うマイコンってどれくらいの値段で仕入れてるもんなの? digikeyと同じくらい?
5年以上前の経験だが、Atmelは、5000以下だとどの代理店に頼んでも 秋月の半値以下にもならず、わりと高い印象。 ほかのチップなら、秋葉原価格の2割、3割くらいで入手できたが。
中国は何でもあり
528 それは秘密です
>>522-525 アドバイスありがとうございます。
今日は別のことをやっていたので明日検証させていただきます。
ダンボール肉まんに通じたものがあるな
大体だな、上海万博会場入り口の所にある建物、どう見たってビッグサイ(ry
原文よく見てないけど、動か無いから分解してみたら コアが入ってなかったって感じ? リフローはんだの濡れ特性試験用のダミーICが流出したとかだったりして
マーキングだけ変えて、他のICのバッタもんも作ってるんだろうな・・・こわいこわい
539 :
521 :2010/04/23(金) 21:41:36 ID:RJUn6jgG
まず、PWMはOCR1AでTOP値を決定するためモードを9に設定しました。 そしたら、波形が出ました。よくわかりませんが、モード8はだめみたいです。どうもありがとうございました。
インベーダーが大ブームのとき、AY-3-8910がないがために製品を出荷できず、 そのとき8910の偽造品を製造した人は、あとでバレて東京湾に沈められた
541 :
774ワット発電中さん :2010/04/24(土) 04:05:37 ID:O02QP4yJ
ok
プラスチックを溶かしてみたら、ただの銅の板がでてきた。ってことかな。 売ってるページのRelated Productsに 本物の328が並んでるのがなんとも言えないな
543 :
291 :2010/04/24(土) 09:43:55 ID:Q/u1jHrv
>>526 時間が取れたら直してみます。
ご意見どうもありがとうございます。
今週は、いろいろと時間が無くて更新なしです。
来週はできるかな。
>>291 氏、お疲れ様です!
影ながら応援しています。AVR Wikiもなんとか使いやすくしたいですね
545 :
774ワット発電中さん :2010/04/26(月) 23:22:09 ID:652IxHto
マイコン初心者です。 先日、千石電商でポケットAVRプログラマというライタを買ったのですが、 グーグル等で使い方を調べても、よくわからなくて困っています。 ドライバはダウンロードして設定もすんだのですが、肝心の書き込み方が わかりません。 AVRstudio、WinAVRはインストールしてありますが、 ポケットAVRプログラマは使えないのでしょうか。 ポケットAVRプログラマでの書き込みかたを教えていただけると助かります。 よろしくお願いします。
よくわからないものを何故買うのか
そんなレスはいらねえんだよ 質問者が困ってるんだから教えてやれ
549 :
774ワット発電中さん :2010/04/26(月) 23:58:27 ID:652IxHto
>>545 ここは読んだのですが、結局ところ
どうしてもわからなくてこちらで質問することにしました。
>>547 もともと純正品を買うつもりだったのですが、値段の安さにつられて
買ってしまいました(ToT)
せっかく買ったのだから、しっかり使いたいです。
どうかよろしくお願いします
よくわからんががんばれ。俺はmkII買っちゃったが、がんばれ。超がんばれ
わかりません、わかりません、って書いても、なにをやったらうまくいかなかったのか、 どこでつまずいたのか、質問者が書かない限りどうしようもないだろ。 それすら書けないような状態で、公共の掲示板に質問を出すことは 迷惑になることを自覚したほうがいい。
552 :
774ワット発電中さん :2010/04/27(火) 00:42:17 ID:5Q8R+NU2
すみません。 もう少し具体的には、 ・AVRstudio、WinAVRなどでポケットAVRプログラマを使う設定ができない ・どのような設定の仕方をすれば使えるようになるのか、はたまた、 他にソフトが必要なのかがわからず身動きがとれない といった感じで、検索等をしても解決策が見つからず、 失礼とは思いつつこちらで質問したしだいです。 自分はこういったところで質問するのは初めてなので、 おかしなところがあれば注意をしてくれるとたすかります
何を試して「設定ができない」という結論になったのか ひととおりの設定を開いてみたのか 全部書いてみろ。 どうせ面倒だからなどの理由で全部試してないんだろ
>>549 > To use this programmer, attach to a Windows machine and install the drivers listed below.
> Open a command prompt. Assuming WinAVR (and therefore AVRDUDE) have been installed, type:
> avrdude -c usbtiny -B 1 -patmega328 -U flash:w:main.hex
このぐらいは試してみたんだよな?
>といった感じで、検索等をしても解決策が見つからず、
前例踏襲しか出来ないレベルなのに新しいものに手を出して
俺様の想像したとおりに動かないとか,前例が見つからないから
使えませんなんて言われてもな。
今後のこともあるし,前例がたくさんあるものを買い直
したほうが良いんじゃねぇの?
千石サイトに「メーカサイト」リンクがあって,
その先のメーカサイトで
>>554 の指摘のように目立つように
きちんと書いてあるものさえ読まないというのでは話にならんな.
多分、「ライティングのソフト」というものがあることを知らないんだと思う。 AVRDUDEが何か分かっていないから、書いてあっても何のことか分からない。 そういうレベルの初心者なんだろう。
>>540 インベーダーはSN76477だったような。
558 :
774ワット発電中さん :2010/04/27(火) 23:28:50 ID:5Q8R+NU2
<<545です。 やはり純正を買おうと思います。 ご迷惑おかけしました。
>545 >546のサイトに >Based on Dick Steefland's USBtiny and Limor Fried's USBtinyISP. と書いてあり、さらにリンク先USBtinyISPのサイトにSTK500 Compatibilityと書いてある。 AVR Studioで書き込めるっぽいし、試してみたらどうだ? AVR Studioの[Con]や[AVR]のアイコンで[STK500 or AVRISP]を選択。 Portはとりあえず[Auto]で。ダメならCOM番号を順次試す。 もちろん書き込むべきhexファイルとターゲットのAVRは用意できてるよな。
でもこの手の分野って入るのが一番大変だよね。
ポケットAVRプログラマは他の人が書いているように コマンドプロンプトから avrdude -c usbtiny -B 1 -patmega328 -U flash:w:main.hex みたいな感じで書き込む。 ハード的にはHIDaspxと同じくTiny2313だけでUSBしているのでSTK500互換は むずかしいと思うけど。
562 :
774ワット発電中さん :2010/04/28(水) 07:48:49 ID:QQBIJikK
>>560 PICと違って、アトメルがジャップを相手にしないからな
書き込み端子に ISP と JTAG がありますが、メリット、デメリットはあるのでしょうか。
>>563 JTAGの方が使うピンが多いっすよね。
ピンの配列は秋月が正解な気がする
ISPはほとんどのデバイスでサポートしている書き込み方式。6ピン JTAGはデバッグすることを目的としている。書き込みもできる。あまり対応デバイスが多くないのと10ピンがデメリット。 基本ISPでおk。JTAGで遊んでみたいなら純正でAVR dragonというのがあるからググってみて。
V-USBを328P-PUで動かせている人いる?
2313-20PUで動いたんだけど、コード量が溢れたので手元にあった328Pに
差し替えてみたところ動作しない。
AVRStudio + WinAVR + AVRDUDEの環境で、
コンフィグのDevice指定を2313から328Pへ変更してコンパイルした(エラーなし。)
ピンを一致し直して、hexファイルのFTDI BitBangでの書き込みまではうまくいった。
ttp://hp.vector.co.jp/authors/VA000177/html/2009-10.html#af0e7fb1 >#define USB_INTR_VECTOR INT0_vect
コンパイル時エラーは変わらず出ないが、不明なデバイスとしてWindowsから認識される。
v-usb 328-pでぐぐる
>>568 V-USB 328Pでググったら先のページが出て、
usbconfig.hにある
#endif /* __usbconfig_h_included__ */
の直前に、
#define USB_INTR_VECTOR INT0_vect
を追記したのだが、それ以外にもあるってこと?
ググって出てくる
ttp://avrwiki.jpn.ph/wiki.cgi?page=%BB%A8%C3%CC5#p5 のiom328p.hの書き換えでは、
#define INT0_vect _VECTOR(1) /* External Interrupt Request 0 */
が見つからなかった。
これのコメントを見ると、代替案としてusbconfig.hへの追記を提案してる。
570 :
774ワット発電中さん :2010/04/30(金) 21:39:47 ID:6tjIUYxH
>>569 328P(20MHz)+VUSBでちゃんと動いてますよ。 USB信号の配線(D+/D-)とI/O
ピンの割り当てとusbconfig.hの定義はちゃんとあってます?
うちは、PD3(D-)とPD2(D+)に割り当てているんで以下の通り。プルアップ
は1.5KΩで3.3V Reg出力へ直結。
#define USB_CFG_PORT_IOPORTNAME D
#define USB_CFG_DMINUS_BIT 3
#define USB_CFG_DPLUS_BIT 2
クロックがデフォルトの12MHzじゃない場合、usbconfig.hの定義を変更
しないとダメ。
#define USB_CFG_CLOCK_KHZ 20000 // 20MHz
(or)
#define USB_CFG_CLOCK_KHZ (F_CPU/1000)
それと、出荷時状態では、動作クロックが内部発振になっているので、
まずはヒューズの設定から変えないと。
「#define USB_INTR_VECTOR INT0_vect 」は、SIG_INTERRUPT0が328Pの
ヘッダで定義されていないため必要ですが、あくまでINT0外部割込(328P
の場合はPD2)をUSBのD+に割り当てている場合。
別のピンに割り当てたら、割り込みベクタも変更する必要があります。
例えばD+をPD3にした場合は「#define USB_INTR_VECTOR INT1_vect 」等。
他にもソースや定数を変更しないとダメかも。
>>570 レスありがとう。動いてますか。
USB D+ -> PD2と接続
USB D- -> PD3と接続
#define USB_CFG_IOPORTNAME D
#define USB_CFG_DMINUS_BIT 3
#define USB_CFG_DPLUS_BIT 2
ですね。
2313も328Pも12MHzのクリスタル使用しています。
Arduinoに乗ってたのを外したのでヒューズは、
h:DA l:FF e:05
です。
これだと8MHz以上のクリスタルを使えるはず。
>「#define USB_INTR_VECTOR INT0_vect 」は、SIG_INTERRUPT0が328Pの
>ヘッダで定義されていないため必要ですが、あくまでINT0外部割込(328P
>の場合はPD2)をUSBのD+に割り当てている場合。
ピンはあっているようです。
2313で動いていて328Pで駄目なので、
何か手違いを起こしているのかもしれません。
動作していると聞けたので、もうちょっと粘ってみます。
ISP端子にJTAG-ICE MarkIIをつないでステップ実行等のデバッグはできますか? それともJTAG端子のみ可能でしょうか。
ISPはかきこみだけ、JTAGは別。 JTAGがついているAVRにはISPは別についている。 リセット端子をつかっデバッグするのがdebug-wireだがやたら不安定 正直mega88のdebug-wireは使用に耐えない
ttp://vusb.wikidot.com/troubleshooting >8.- Don't compile for 'P' series chips - There is an issue in the driver where some interrupt tables are named in a way that isn't compatible with chips that have a 'p' after their name - i.e. ATmega168p, ATmega3280.
>This is tricky, since the code will compile, but just won't work.
>However, the 'p' series chips are binary compatible with their non-'p' cousins, so if you're working with an ATmega168p, compile for a regular ATmega168.
>The ATmega328p has no non-p variant, but it's binary-compatible with the ATmega168, so compile for the ATmega168.
Pと名前に付くチップは正常にコンパイルできたように見えるが実際には動かず、
この場合は、Pが付いていないチップとしてコンパイルすればよい。
ただし、328PにおいてはPがないチップがないのでバイナリ互換の168としてコンパイルを行うこと。
と読める(と読みたい。)
ええと、AVR StudioのExternal Dependenciesには
iom168.hがあるので168としてコンパイルされたと思うが、
はやり不明なデバイスとなる。
575 :
774ワット発電中さん :2010/05/01(土) 12:46:35 ID:qiD/oouc
>>574 DEVICE=mega168(pなし)であれば、動くバイナリが生成されるし、DEVICE=mega168p
でも「#define USB_INTR_VECTOR INT0_vect 」さえ定義すれば、ちゃんと動くバイ
ナリが生成される。 生成されたバイナリは、どちらもクロック周波数が同じなら
328pに書いても動く。VUSBのリファレンスプロジェクト「PowerSwitch(2008-02-28)」
で確認済み。
依存するヘッダを追っていけば判るけど、実際に使われるヘッダは、
#include <avr/io.h> の中でDEVICE=xxxxxの定義によって選択され、
DEVICE=mega168 ......... iom168.h
DEVICE=mega168p ......... iom168p.h
DEVICE=mega328p ......... iom328p.h
になる。「iom168.h」は、更に「iomx8.h」をincludeしていて、この中で、
#define INT0_vect _VECTOR(1)
#define SIG_INTERRUPT0 _VECTOR(1)
の双方が定義されているが、「iom168p.h」と「iom328p.h」では「iomx8.h」
をincludeしておらず、それぞれのヘッダ中で直接、
#define INT0_vect _VECTOR(1)
のみが定義されているだけで、SIG_INTERRUPT0が定義されていない。
AVRStudioでAVR-GCCを使っています。 16ビット定数を8ビットレジスタ2つに上位、下位それぞれ書き込みたいのですが、 定数の上位や下位8ビットのみを取得するマクロは定義されていないのでしょうか。 アセンブラだとhigh()やlow()があるのですが、Cではどのように書けばいいのでしょうか。
(定数
>>8 )&0xff とか 定数&0xff とかじゃないの
レスありがとうございます。 調べたところ、16bitレジスタは16bitの即値代入ができるようです。 TCNT1やOCR1Aなどは、TCNT1L、TCNT1Hに分割せず、 TCNT1 = 10000; のように書いてよいのですね。
むしろそう書いた方が、保障されるのでおすすめです。
>>572 Debug-wireはあれはおまけに近いかななんて思う。
ISP,JTAG,Debug-wireはすべて別物です。マーク2がそれぞれ対応してるというだけです。
ISPは書き込むためのもの、JTAGはデバッグするためのもので書き込みもできる、Debug-wireはリセット端子だけで何茶ってデバッグができるというもの。
R8Cはほとんど同じ値段なのにE8aエミュレータの機能が debug-wire以下のコストで実用的 AVRを見限る1つの理由がこれだな俺にとっては
日本語でおk
そんなに安いのかとおもったらけっこうするじゃん < E8a
R8Cは、E8aを使わなくても、UARTで HEWを使ってROMコードのデバッグができる。 モニターも自動的に書き込んでくれるんで、シリアルケーブルさえあればデバッグできる。 他のCPUでROMコードをICEなしにデバッグできるのははあまり聞かないんで、個人的には ポイントが高いと思うんだが。 R8Cに限らず国内のCPUはライブラリーがあまりないのがネックだが。
R8CとAVR 8Bitって競合しないと思うんだが・・・
R8は知らないが、H8はx86より後発なのにトレース機能(シングルステップ 割込)すら持っていないから、モニタを書く気がおきなかった。 基本的に1命令実行毎に割り込みを発生できる機能さえCPUに用意されて いれば、あとはブレークポイントとか、逆アセンブル付きトレースとか、 ソフト的に追加できるんで。ただ、モニタにそんな機能付けても、これ までデバッグに活用したことは一度もないが。(w 組込系ソフトの場合、大抵はリアルタイム応答が重視されるんで、デバッガ のブレークやトレースが使えない場合が多い。通過ポイントや、内部状態で 異なるASCII文字を1文字だけコンソールに出すとか、ソフトの動作を止めず、 極力実行時間に影響を与えない方法でデバッグするしかない。 ルネサスの将来はR8含めて混沌としているから、新規に使う気になれん。
JTAG-ICE MarkIIを使ってATMEGA64にプログラムをISPで書き込んだんですが、えらい長い時間(3分くらい??) かかりました。こんなもんでしょうか? もっと早いプログラマはあるのでしょうか。
>>587 USB使ってる?
AVRstudio使っているのあら、書き込み時間調整スライダがあるはずだが。
はい、USBで接続しています。 > AVRstudio使っているのあら、書き込み時間調整スライダがあるはずだが。 おー、それには気づきませんでした。確認してみます。
システムクロックの4分の1以下に設定すればおk。
正確には 1/4未満だよ。 それと AVRの動作周波数によっては 1/6未満を要求される。 あと、内蔵RC発振駆動の場合、精度が悪いから 例えば、1MHzを鵜呑みにして 水晶発振器由来の 250kHzにすると、動かないことがある(実体験済)。 125kHzなのはそのあたりの理由がある。
593 :
774ワット発電中さん :2010/05/04(火) 14:18:07 ID:3chmm7lH
AVRの純正ライタの赤く光るところがパソコンに接続しても光らないんですがわかる けど原因が分かる人いますか。
594 :
774ワット発電中さん :2010/05/04(火) 14:18:33 ID:qhCABmcA
595 :
774ワット発電中さん :2010/05/04(火) 14:21:27 ID:3chmm7lH
すいません。AVRの純正ライタの赤く光るところがパソコン二接続しても光らないんですが原因が分かる人いますか。
エスパーじゃないんだからさぁ・・・ 今まで動作していたものが動作しなくなったのか、それとも、買ってきたものを始めて使おうとしたら動作しなかったのか、 動作させようとした環境とか・・・ 個人的にはライタが壊れている可能性より、3chmm7lHのコミュニケーション能力(マニュアルやデータシートを読むのも コミュニケーションだよ)不足が原因である可能性に100tiny
100tinyってたった9000円だろ
9000Yenはでかいよぉ
Wiki落ちてる?
>>594 久しぶりに使ってみるかと 2313 でボード組んでみた。
PCも買い換えたから AVR studio を入れて ISP のチェックをしようと
思ったら、2313 なんて、対応してなかった。orz
とりあえず、IC ソケットを使ってたから良かったものの、
Tiny2313 を買いに秋月まで行くのも面倒だなぁ・・・
なんか、おもしろいことないかなぁ・・・。
AVRで、IDE-HDDをUSBのマスストレージに変換するような回路&サンプルってありますか? ATAバスの研究をしたいだけなので、AVRチップ問わず、転送速度も問わずです。 EZUSBには、まんまなサンプル回路がありましたが、 AVRは探し出せませんでした。
604 :
774ワット発電中さん :2010/05/05(水) 14:31:22 ID:PyWyynoH
>ATAバスの研究をしたいだけなので だったら別にAVRでやらなくてもいいじゃん.
>>603 ありがとうございます。とても参考になりました。
あとでゆっくり見てみます。
>>604 ソースに改変を加えて、HDDやATA機器の動作がどう変化するか調べたいのです。
それをするためには、知らないプラットフォームで右往左往するよりも、
慣れたAVR上でやりたいな、と。
>>605 そういう用途なら、USB変換機能は邪魔になるだけだ。
素直にATAコマンドの挙動をみれるようシリアル接続のモニタを作るべき。
>>602 IDE、例えばChan氏のFatFsをRead ONLYかつPIOモードで動かすだけなら
ReadSector(0x20)だけ使えれば大丈夫だったり。
通常はIdentify(0xec)して使えるモード見てから
SetFeature(0xef)で適切なPIOモード設定してから使うんだけどね…
勿論f_mkfsするならIdentify必要。
それよりも、5VのAVRで適当に動かすだけならともかく
高速になってくると仕様通り終端抵抗いれないと駄目だったり
3.3Vバスバッファでの動作で悩んだりする…
ATmega8でADCを使おうとしているのですが、うまく値が取れません VCCから1kΩの抵抗とBカーブの2kΩの可変抵抗を直列についないで可変抵抗の 真ん中のピンをGNDに落とし、これらの抵抗の間を23ピンに繋いでいます。 23ピンはADC入力1ですので、これをADCで変換し、UARTで読み取りたいです。 ですが、ADCの結果が可変抵抗の値を変えてもいつも"23"で固定されてしまいます。 AVRStudio+WinAVRで書いており、ADC関連のコードをは以下のとおりです。 void adc_init(void) { ADMUX = (2<<REFS0); ADCSRA =(1<<ADEN)|(1<<ADSC)|(1<<ADIE)|(0<<ADPS0); } volatile uint16_t vreg1; SIGNAL(SIG_ADC) { vreg1 = ADC; } int main(void) { char buf[4] = "0000"; sei(); for(;;) { int2str(vreg1,buf); usart_sendStr(buf); for(volatile int j=0;j<10000;j++) { j = j; } } } usart_sendStrとint2strは正しく動作することが確認できています。 また、割り込み無しでフラグを見て動作するタイプも作ってみましたが結果は同じでした。 何が原因なのかご指摘をお願いします。
あと、書き忘れていましたが、Arefは0.1uFのパスコンでGNDにつないでいます。 またAVccはVCCに繋いでいます。
>>608 いきなり二行目おかしくない?
あとUARTはOKなんだよね?
>608 いろいろ努力はしたみたいだが、そもそも23ピンの電圧は測ってみた? ほぼ0V (= 23/1024 * 5V) 一定なら ADCの中の人的には文句いわれる筋合はないぞ。 出力ピン設定で L になってたりしないかなと思うわけで。
>>608 ごめん、UARTはOKなんだね
スマソ・・・
とりあえずビットシフトがおかしい
あと、これだとワンタイムしかA/D変換しないのでは?
>>612 のゆう通りだな。
割り込みのたびにADSCに1立てろ。
おっしゃるとおりでしたorz 割り込みいれるたびにADSCを立てるとちゃんと動くようになりました 助言ありがとうございました
>>575 ありがとう。iom328p.hを見て確認した。
usbconfig.hに、
#define USB_INTR_VECTOR INT0_vect
を追記して328Pとしてコンパイルするよ。
Community ProjectsにあるQuick Launch Keysを2313で作れたが、
これを328Pに換装できていない。
http://denki.world3.net/quicklaunch.html D-、D+のピンの接続ポートや動作クロック12MHzは変えていないが、
その変更がなくても、328Pへ換える時に変更する箇所はあります?
616 :
575 :2010/05/06(木) 08:37:31 ID:Aa0Pj2rK
>>615 ダウンロードしたZIPファイルを解凍してAVR Studioでプロジェクトを開き、
AVR Studioの「Project」-「Configuration Options」で、Deviceを「mega328p」
へ変更。手元の328pボードが20MHzだったので、同時にFrequencyを「20000000」
へ変更。 プロジェクトのツリーから「usbcobfig.h」を開いて、
#define USB_INTR_VECTOR INT0_vect
行をファイル終端の「#endif」手前に追加。
以上の変更をした後、「Build」-「Rebuild All」でHEXファイル生成。
Program:1974バイト, Data 60バイト。
これをデバイスに書き込んだところ、ちゃんとHIDデバイスとして認識され
ました。 ヒューズ設定は、Low=0xFF, High=0xDA, Ext=0x05 です。
参考までにAVRGCC(WinAVR)は2008-12-08、AVR Studioは、Ver4.18(Build 692)
です。リンク先の回路は、電源やプルアップを簡略化しているので、それが原因
かもしれません。
うちで動かした328pの環境は、USBから電源を取っていますが、328pはポリ
スイッチ+逆流防止のショットキーDi経由の5V電源で動かし、そこからLDO-
Regで3.3Vを生成して、D-信号を1.5kΩで+3.3Vにプルアップしています。
USBコネクタから引き込んだD+/D-信号には、直列抵抗の代わりに「NZF220DFT1」
というESD保護素子を使ってますが、ここの抵抗は、かなりアバウトでも動き
ます。(前に33Ωと間違えて330Ωを付けたことがありますが動きました)
ttp://www.onsemi.com/pub_link/Collateral/NZF220DFT1-D.PDF
>>608 > char buf[4] = "0000";
誰も指摘してないので一応フォロー。
文字列終端のNUL文字('\x0')を格納する分を含めてbufは最低5バイト必要
です。
さらに言えば、ADMUXレジスタのADLARビットを1にセットすると、ADCレジスタ
から取得するvreg1の値は最大で0xFFC0(10進数で5桁)になるので、後でプロ
グラムを変更してまた悩むより、文字列変換のbufは6バイト以上にしといた
方がいい。
20MHzでビルドすれば普通に動くよ ツエナーは3.3Vで動かせば不要
ビルドっていうか、hexファイルをそのまま焼くつもりなので、 12MHzでも20MHzでも動くようになっているか、という意味です 20MHz動作なら5Vだし、3.3Vなら12MHzなので、ツェナー不要云々の指摘は的外れです
5V動作しているIOにツェナーつけて無理矢理3V化するのは許容できるのに 3.3Vで無理矢理20MHz動作させるのは許容できないのか。
いま回路図見てみたけど結構無茶するなぁw 相手側のUSBドライバも2313も可哀相。 俺なら迷わず3.3Vのレギュレータ入れて2313を3.3V駆動する。
623 :
774ワット発電中さん :2010/05/06(木) 22:48:34 ID:P/gO8Ot+
>>620 素直に市販のライタを買え
senshuさんですらそう言ってる
やっぱそれが王道なんだろうな 水晶が20MHzしかなくて、 12MHzの水晶と3.3Vのツェナーと3.3Vのレギュレータと、 どれを買おうか迷ってるとこ レギュレータだけ買って20MHz駆動するのは、どのくらい無茶なんだろう っていうか、8MHzじゃダメなの?
>>624 fclk < 5.926*Vcc - 6.667 [MHz] ・・・ ( 1.8 < Vcc < 4.5 )
後は自己判断で・・・
>>618 3.3V前後でよければ、とりあえず白色とか青色のLEDをツェナーの代わりに使うのは?
時間軸にうるさい組み込みで、 おまけにセラロックじゃダメなほどシビアだといってるアプリで、 外付けの水晶だけでいけると思う理由が見当たらない
外付けの水晶だろ?
>>620 20MHz(F_CPU=20000000)の設定でビルド(MAKE)されたHEXが既にあればリビルド
の必要はないけど、ソフトでタイミング取ってる関係上、20MHz用と12MHz用
では、バイナリ(HEXファイル)の内容が変わりますよ。
8MHzは遅くてダメ。試したことないけど、確か16MHzは公式にOKだったかと。
usbconfig.h内では、クロックをkHz単位で定義できるようになってるけど、
12MHz〜20MHzの間で中途半端な周波数(例えば12.288MHzとか18.432MHz,
19.200MHzあたり)はどうなんだろ?
tiny2313,mega88,mega168,mega328pで、それぞれAVRは5V動作で、D+/D-は
直列抵抗と3.3Vプルアップのみ、ツェナーなしで動かしているけど、今まで
特にそれで動かなかったことはないです。
ただ、厳密に言えば定格3.3Vのツェナー入れたところで、製品によってツェナー
電圧のばらつきが±1%〜±5%ある上に、そのツェナー電圧で使うには、本来で
あれば一定以上のツェナー電流を流す必要があるんで、かなり気休めな部分も。
3.3Vではなく3.6Vのツェナーを入れているのは、素子のばらつきで下ぶれした
場合に、3.3V以下にクランプされないよう意図した理由があるからでは?
3.3Vで動かしても、AVRのピン自体は、ESD耐性がの保証があるわけではない
ので、単体の汎用ツェナーより、こういうのを入れたほうが...
ttp://www.nxp.com/documents/data_sheet/PESDXL2BT_SER.pdf ttp://www.vishay.com/doc?85824 ブレッドボードや下手糞な引き廻しだと、それが原因で動かない場合もある。
どっちにしろ、何百台、何千台と作るわけじゃないんだろうし、まずは1台
動かしてみろとしか言い様がないな。
631 :
774ワット発電中さん :2010/05/07(金) 07:00:41 ID:NRgNpBRP
>>630 > ブレッドボードや下手糞な引き廻しだと、それが原因で動かない場合もある。
> どっちにしろ、何百台、何千台と作るわけじゃないんだろうし、まずは1台
> 動かしてみろとしか言い様がないな。
それでPCを破壊しちゃ意味無いけどな
マイコン用は安PCで作業しないとなー 俺は超高級PCでマイコンしててPC壊した やられたぜまったく
>>632 PCのポートが心配なら、安いハブをかませばいいのでは? USB2.0
対応なら速度低下もないし。
たぶん壊す香具師は、ツェナー入れようが、3.3Vで動かそうが壊すと
思うなぁ。 事故るヤツは、どんな車を運転しても事故るのと同様。
いちいちPCの裏側に手探りでつなぐのも面倒だし、前面パネルのUSBは
何か落としたり、ケーブルを引っ掛ける心配があるので、直結ポートは
余ってるけど、うちはエレコムのACアダプタ付きのハブを使ってます。
ところで、
>>631 は、何がしたかったんだろう?リンク切れてるし。
PCのGNDはモニターのせいもあって絶縁状況がよろしくないな。 ノートでの作業が一番安心かも
一定時間ウェイトをかけたいのですが、タイマーを全部使ってしまっているので ループで実現したいと思っています。 しかしインラインアセンブラはよくわかりません。 引数にミリ秒単位で時間指定をできるような、ウェイト関数をどなたか作ってください。 AVRはATTiny2313で、クロックは8MHzです。 よろしくお願いします。
>>636 #define F_CPU 8000000UL // CLOCK=8MHz
#include <avr/io.h>
#include <util/delay.h>
int main()
{
for(;;)
{
delay_ms(100); // 100msウェイト
hoge();
}
}
とかでいいのでは?
最初から用意されていたんですね ありがとうございました
int main() { int i; for(i=0;i<100;i++) { delay_ms(1); // 1msウェイト hoge(); } } 長い時間待つ時はこうした方が良いっす
>>639 先生、ウェイト中にhogeいれちゃイカンっすw
それはさて置き、delay_msは正確な時間を計算する為に内部で浮動小数点演算をしていて、引数が変数だと重くなる。
なのでウェイト時間を変えたい時は、1msを定数として与えて自分でループ回すのが良い。
今回の場合は定数だから、
>>636 のでいいんでは?
>>636 必ず動作しているタイマーがあるのなら、
タイマー割り込み処理中にwait用変数カウント処理を入れる(例えばtime++;とか入れとく)という手もあるけど…
で、使うときはtime=0;として希望の値になるまで待機。
AVRで赤外線リモコンの受信機をつくりたいと考えています。 ググるとたくさんのサイトが出てきて、非常に心強いのですが、 どのサイトを参考にすれば悩みます。 おすすめのサイトがあれば推薦してもらえないでしょうか。
メーカーは?
>> 643 リモコンのメーカーはどこでも構いません。 最終的にはパナソニック用に調整することになると思います。
コピペエンジニアか・・・ まさか仕事で使おうってんじゃねぇだろうなぁ
どこまで甘ったれてんのか全く呆れる こんなやつは放っておけ
>>634 世の中のUSBハブのほとんどが、バスパワーかセルフ/バスパワー共用なんで、
途中にかませても保護機能は期待できないよ。
なので、ACアダプターがついているだけでは安心できないよ。
>>636 もう一個ATtinyを用意して外部から割込みで・・・
すまん。疲れてるみたいだ・・・
>>647 エレコム製の「U2H-Q4SCR」って型番の4ポートハブで、CYPRESS製 のCY7C65640
-LFC って型番のUSB Hubコントローラを使っていて、台湾のAIC (Analog
Intergrations Corporation)ってメーカーのAIC1526って型番の過電流・短絡
保護付きハイサイドスイッチがポート毎にちゃんと付いてるヤツ。
4ポートなのに、2.6A出力のSW式ACアダプタが付属していて、USB Hi-speed Certified
のロゴ付き。 現行製品だと外観はこれが比較的近い。
ttp://www2.elecom.co.jp/cable/usb-hub/u2h-g4s2/index.asp 最近はキワモノっぽいUSBハブしかなくて、ジャンクのカゴで見つけた。
上海問屋のヤツとかはダメ。中には分解してみたら、エナメル線みたいな
細いジャンパが飛んでるやつもあった。
>>640 >先生、ウェイト中にhogeいれちゃイカンっすw
アホですまんっすw
こうね。
for(i=0;i<100;i++) { delay_ms(1); } // 1ms * 100 = 100msウェイト
hoge();
...
でも、
>The maximal possible delay is 262.14 ms / F_CPU in MHz.
というふうに、_delay_ms()はクロック周波数に依存して時間の上限があるから、
8MHzで100ms待つ場合は、_delay_ms(100) としてしまうと
実際に100ms待ってくれないはず。どうなるかは知らない。
あ、でも When the user request delay which exceed the maximum possible one, _delay_ms() provides a decreased resolution functionality. とか書いてあるから別に_delay_ms(100) としても別に良いのか。すまんこ。
>>650 まだあったか。(w
確か、今は亡きブレスの店頭でカゴに入れて売られていたのを600〜800円
くらいで買って、わりと具合良さげだったので数個買い足した。
今は、PC切替器の上にマジックテープで2個並べて貼って使ってます。
常時何かの処理を行いながら、同時に一定周期でさらに別のことをやらせたいという 場合は、タイマ割り込み共有(例:1ms周期)でカウントアップするソフト的なタイマを 1本用意すれば、こんな方法でいける。 static volatile uint nTickCount=0; // タイマ割込(1ms)毎にインクリメント(+1) uint GetCurrentTime() { return nTickCount; } void SetTimeOut(int *pStartTime,int *pEndTime,int nTimeOut); BOOL CheckTimeOut(int *pStartTime,int *pEndTime); void SetTimeOut(uint *pStartTime,uint *pEndTime,uint nTimeOut) { *pStartTime=GetCurrentTime(); *pEndTime=(*pStartTime)+nTimeOut; } BOOL CheckTimeOut(int nStartTime,int nEndTime) { uint nCurTime; BOOL bResult; nCurTime=GetCurrentTime(); if(nStartTime<nEndTime) bResult=((nCurTime<nStartTime) || (nEndTime<nCurTime)) ? TRUE:FALSE; else bResult=((nStartTime<nCurTime) && (nCurTime<nEndTime)) ? TRUE:FALSE; return(bResult); } int main() { int nStartTime,nEndTime; for(;;) // 無限Loop { SetTimeOut(&nStartTime,&nEndTime,100); // 100ms時限タイマセット while(!CheckTimeOut(nStartTime,nEndTime)) // 時限タイマ終了Check { hoge_always(); // 常に実行する処理(定期的に戻ってくること) } hoge_100ms(); // 100ms毎に1回実行する処理 } } 誤差は±1ms(割込周期)+hoge_always()の実行時間で、単純にdelay_ms()を使う場合に 比べて、待機中にバックグラウンドで呼び出される関数hoge_always()内部の処理時間 が誤差として積算されないし、hoge_always()の呼出周期がdelay_ms()内部のウェイト で待たされない。
>654 CheckTimeOut() 相当の動作は nTickCount の割り込みハンドラ内にもってくるようにしないと 37ms毎の処理、100ms毎の処理、240ms毎の処理、とか必要になった日には死ぬる。 まあ重箱だが。
SetTimeOutのシグナルをパルス方式で作れば、 定期呼び出し誤差は出るけど全体誤差は出ない。 どの誤差も絶対に許さない、のなら655で。 その代わり割り込み期間が処理ぶん長くなる。 用途により使い分ける。
>>655 タイムアップの判定用変数を呼出側で確保しているんだから、必要なタイマ周期の個数
だけ呼出側で用意すれば、なんら問題ないでしょ?
int main()
{
int nStartTime37ms,nEndTime37ms; // タイマ変数(37ms周期判定用)
int nStartTime100ms,nEndTime100ms; // タイマ変数(100ms周期判定用)
int nStartTime240ms,nEndTime240ms; // タイマ変数(240ms周期判定用)
SetTimeOut(&nStartTime37ms,&nEndTime37ms,37); // 37ms時限タイマセット
SetTimeOut(&nStartTime100ms,&nEndTime100ms,100); // 100ms時限タイマセット
SetTimeOut(&nStartTime240ms,&nEndTime240ms,240); // 240ms時限タイマセット
for(;;) // 無限Loop
{
hoge_always(); // 常に実行する処理(定期的に戻ってくること)
if(CheckTimeOut(nStartTime37ms,nEndTime37ms)) // 37ms時限タイマ終了Check
{
hoge_37ms(); // 37ms毎に1回実行する処理
SetTimeOut(&nStartTime37ms,&nEndTime37ms,37); // 37ms時限タイマ再セット
}
if(CheckTimeOut(nStartTime100ms,nEndTime100ms)) // 100ms時限タイマ終了Check
{
hoge_100ms(); // 100ms毎に1回実行する処理
SetTimeOut(&nStartTime100ms,&nEndTime100ms,100); // 100ms時限タイマ再セット
}
if(CheckTimeOut(nStartTime240ms,nEndTime240ms)) // 240ms時限タイマ終了Check
{
hoge_240ms(); // 240ms毎に1回実行する処理
SetTimeOut(&nStartTime240ms,&nEndTime240ms,240); // 240ms時限タイマ再セット
}
}
}
電源投入後からすべてのタイマ周期の公倍数が成立するタイミングで、個々の関数内部の実行
時間が積算されて後の方の判定で呼び出される関数の遅れが最大になるけど、ハングアップ
したりするようなことにはならない。
また、重箱のスミをつつかれるとアレなんで、自己フォロー...。 if(CheckTimeOut(nStartTime37ms,nEndTime37ms)) // 37ms時限タイマ終了Check { hoge_37ms(); // 37ms毎に1回実行する処理 SetTimeOut(&nStartTime37ms,&nEndTime37ms,37); // 37ms時限タイマ再セット } とするより、 if(CheckTimeOut(nStartTime37ms,nEndTime37ms)) // 37ms時限タイマ終了Check { SetTimeOut(&nStartTime37ms,&nEndTime37ms,37); // 37ms時限タイマ再セット hoge_37ms(); // 37ms毎に1回実行する処理 } としたほうが、hoge_37ms()関数内部の処理時間による誤差は生じないね。
>>654-658 あたり
ん、なんか結構参考になった
ありあり
やっぱ組み込みはタイマの使い方でセンスでるよなぁ
>>657-658 だからそれだとSetTimeOutする度に誤差が累積するでしょ
「きっちり37ms周期」にはならない
>>655-656 はそのことを言ってるんだよ
関数の並べ方の話じゃなくて
>>660 どの部分の誤差を言ってる?
hoge_37ms()や、hoge_100ms()、hoge_240ms()内で1ms以上時間が掛かる
処理を行えば、メインループに戻って判定処理が呼び出されるのが遅れる
分、呼び出し間隔にジッダは発生するが、少なくとも、37ms周期で呼び出す
SetTimeOut()が、100ms周期のSetTimeOut()や、240ms周期のSetTimeOut()の
影響を受けたり、その逆に影響を受けたりはない。
>>655-656 たとえ、CheckTimeOut()相当の処理をタイマ割込ルーチンに埋め込んでも、if()によるフラグ
判定処理がメインルーチン側にある限り、フラグをセットする時間のばらつきがタイマ割込
周期に限りなく最適化されるだけで、hoge_37ms()、hoge_100ms()、hoge_240ms()関数が呼び
出される周期のばらつきは変わらない。
hoge_37ms()、hoge_100ms()、hoge_240ms()関数内部の処理に時間が掛かった場合、関数から
メインループに戻って判定処理が呼び出されるのが遅れるの変わらない。
これを避けるには、関数毎に再突入防止のフラグを設けて、hoge_37ms()、hoge_100ms()、
hoge_240ms()関数をタイマ割込ルーチンから直接呼び出すしかない。
>>662 解説 乙
この手の話、アトミックな話が漏れると迷子が増える。
>>663 低学歴専門卒(wだけど、間違ったこと書いてないよな?
ついでと言ってはナンだけど、例えば、37ms周期、240ms周期で何かやりながら、100ms
周期でPB1のスイッチを監視して、ON('H')だったら、1秒間PD4出力に繋いだLEDを点灯
('H'出力)させるってぇな、ルーキー・オオギリーグ並みのお題に...
void hoge_100ms()
{
int i;
if(PORTB&(1<<PB1))
{
PORTD|= (1<<PD4); // LED点灯(ON)
for(i=0;i<1000;i++) // 1ms×1000回=1秒間待ち
delay_ms(1);
PORTD&=~(1<<PD4); // LED消灯(OFF)
}
}
なんて、やっちゃうのは、いろんな意味でダメだから。(w
一種情報処理を持ってるらしい山崎邦正ならどう回答するのか、非常に興味が
あるところだけど、板尾委員長でなくとも、間違いなくアンテナ0本の回答。
(チャタリング処理に話が及ぶとさらにややこしくなるので省略)
>>663 実を言うと、アトミックな処理に関する重箱のスミは、
uint GetCurrentTime() { return nTickCount; }
の部分は...
uint GetCurrentTime()
{
uint nLastTick;
uchar cSave;
cSave=SREG; // 割込許可状態の保存
cli(); // 割込禁止
nLastTick=nTickCount; // 最新のnTickCount値のコピーを取得
SREG=cSave; // 割込許可状態の復旧
return nLastTick;
}
としないとダメ。
ってなツッコミが入ると期待してた。
実際そうしないと、GetCurrentTime()で、最新のnTickCountの値を取得
している最中に、nTickCountの値が8bitから9bitへ繰上げを伴うインクリ
メントが行われるタイマ割込が発生するとダメだから。(w
まぁ、発生するタイミングはごくまれだけど、起こるとGetCurrentTime()が
間違った値を返してくる。
WINAVRって内部でAS2って変数名などを使っていますか? 変数で宣言が出来ませんでした 違う名前にして解決しましたが、ちょっと気になったので
>>666 デバイスも、OS環境も、コンパイル時に表示されたエラーメッセージも、
何も書かれていませんが、とりあえずWinAVRという前提で...
AVR-GCCをインストールしたフォルダ(標準では、C:\WinAVR-YYYYMMMMDD)下の
「.\avr\include」フォルダ内のヘッダファイル(*.H)を検索すれば、ほとんど
のデバイスでASSRレジスタ関係のビット定義として、「AS2」という定数が
#defineで定義されていることがわかります。
※ YYYYMMMMDDは、インストールしたAVR-GCCのリリース年月日を示す6桁の数字
>>667 ありがとうございます、疑問が解けました
>>662 そのコードは検査から再設定までのタイムラグを
全く考慮してないから累積して誤差が増えてくって言ってるの。
>>658 みたいに処理の前に呼ぶよう順番を変えても同じ。
改善するならCheckTimeOutの比較している場所で
比較した差を次の時間設定に反映して誤差を修正すること。
そうすればジッタが出るものの周期は維持される。
>>669 最適化オプションにもよりますが、CheckTimeOut()の検査から、SetTimeOut()
による再設定までの所要クロックは、多めに見積もっても、50クロック程度に
過ぎません。 それでも実時間にしたら、8MHz動作時で5〜6μ秒に過ぎません。
これに対して、nTickCountはタイマ割り込み処理で勝手にインクリメントされま
すが、分解能は1msですから、CheckTimeOut()が成立してから、再度SetTimeOut()
を呼び出してタイマを再設定するまでの間に比べてはるかに短く、AVRの動作クロ
ックが100kHz以下とか極端に遅い場合を除いて、誤差として影響されませんし、
当然ですが累積もされません。
>>658 で順序を変えているのは、大きな意味があります。
hoge_37ms()とSetTimeOut()関数の順番を入れ替えたのは、hoge_37ms()の
処理を含めたCheckTimeOut()〜SetTimeOut()までの処理時間が1msを超える
と、CheckTimeOut()成立時に比較したnTickCountの値と、次のSetTimeOut()
で取得するnTickCountに差(更新)が生じ、これが誤差となって遅れる要因
となるからです。
他のif()文が成立して、hoge_100ms()や、hoge_240ms()が実行された時、
メインループに戻るのが遅れるため、hoge_37ms()が呼び出されるジッダ
は、はるかに大きく深刻になります。
これを回避するには、
>>662 でも書いたとおり、タイマ割り込みルーチン
での多重割込を許可し、関数毎に再突入防止のフラグを設けて、hoge_37ms()、
hoge_100ms()、 hoge_240ms()関数をタイマ割込ルーチンの中から直接呼び
出すしかありません。
ただ単に、CheckTimeOut()関数相当部分をタイマ割込ルーチンの中に記述
したり、BOOL値のフラグを参照するように記述しても、何の解決にもなりま
せんよ。
μsオーダーのタイミングが気になるんだったら、部分的にでもアセンブラ使おうぜ・・・
まぁ誤差が蓄積するのとしないのは大きな違いなんだけどな もちろん用途による
>>670 まるで理解できてないね。
俺の説明の仕方が悪いのかもしれんけど。
まあどうでもいいや。
>>671 実行クロック速度と処理の内容によっては、hoge_NNms()内をアセンブラで記述
する必要があるかもしれませんが、SetTimeOut()とCheckTimeOut()の中身は、
単純な整数同士の演算と比較処理だけですから、アセンブラで記述したから
といって劇的に早くなるようなものでもありませんし、アセンブラが必要な
状況でもありません。
アセンブラでの記述よりも、一番長いタイマでも240ms周期ですから、タイマ
の周期が最大で255msに制限されますが、nTickCountの型をuint(16bit)から、
uchar(8bit)にする方が、今回の例でははるかに効果的でしょうね。
>>672 誤差が蓄積するかどうかが問題になるケースはありますが、今回の例で誤差
が蓄積するかどうかは、無限ループ内の最長パスの処理時間によって決まり
ます。
すなわちすべてのif()内のCheckTimeOut()が成立し、SetTimeOut()とhoge_XXms
がすべて呼び出される処理時間の合計(正確には、さらにタイマ割込処理ルー
チン1回の実行時間を含む)が、タイマ割込周期(例の場合1ms)を超えない限り、
誤差が蓄積されることはありません。
>>673 どんな教育を受けたのか、この程度の簡単なスケルトンプログラムがなぜ
理解できないのが、まったく理解できませんね。
ケチをつけるから、たとえば8MHzのmega8の場合で、どの部分の処理(遅れ)
が原因で、具体的に何クロックなり何μ秒遅れるのか、数字を出してみては?
>>674 アセンブラ使うのは、早いから・遅いからじゃないんだよ。
クロック数を正確に読まなきゃいけない場合にCとかだと、どこにオーバーヘッドが
出てくるかとか、最適化オプションでどうなるかとかで、実行コード変化して、実
クロック数が読みにくいんだ。その上、困るのがコンパイラのバージョンによって、
これらが変化しちゃう可能性があるし・・・
676 :
655 :2010/05/09(日) 23:37:50 ID:zqFWrpUU
最初に突っ込んだ俺が責任とって解説してみる。 いや実は俺が突っ込んだのは別にそこじゃなかったりするんだけど… SetTimeOut(&nStartTime37ms, &nEndTime37ms,37); // 1 ... CheckTimeOut(nStartTime37ms, nEndTime37ms); // 2 SetTimeOut(&nStartTime37ms, &nEndTime37ms,37); // 3 hoge_37ms(); ... というフローをひらくと、 nStartTime37ms = getCurrentTime(); nEndTime37ms = nStartTime + 37; // 1相当。 ... if(getCurrentTime() > nEndTime37ms ) // 2中のif文成立時 nStartTime37ms = getCurrentTime(); nEndTime37ms = nStartTime + 37; // 3相当。 hoge_37ms(); ... 3 の正しい実行文はもちろん nStartTime37ms = nEndTime37ms; nEndTime37ms = nStartTime37ms + 37; でないといかんよな。
>>675 ID:fxRB9Qel が何を勘違いしてケチをつけているのかは判りかねますが、
そんなクリティカルなレベルの話じゃないです。 それに、AVR-GCCに限
らず、大抵のCコンパイラは、アセンブラのソースコードを吐き出すことが
できます。
実クロックを計算したければ、ステップ数を数えれば済みますし、厳密な
タイミングが要求される部分だけ、Cコンパイラが吐いたアセンブラソース
の一部を手作業で最適化してビルドしたり、インラインアセンブラで書く
なんてことだってできますよ?
コンパイラ使わない人が、コンパイラのバージョン違いの問題を心配しても
杞憂だと思いますが?
>>676 > 3 の正しい実行文はもちろん
> nStartTime37ms = nEndTime37ms; nEndTime37ms = nStartTime37ms + 37;
> でないといかんよな。
理論上はそうだけど、if()内のCheckTimeOut()が成立してから、SetTimeOut()
を呼び出すまでの間が約1ms以上もかかるような、極端に遅いクロックで動い
ていない限り、nTickCountの値が更新されない(割込は発生しない)ことは保証
できるという前提なんだよ。
>>658 で、わざわざ関数の順序を入れ替えたのは、CheckTimeOut()〜
SetTimeOut()間の冗長性をなくし、タイミングを短くして、よりコードの
安全性を高めるため。
仮に、if()が全部成立して、hoge_37ms(), hoge_100ms(), hoge_240ms()、
3つのSetTimeOut()がすべて実行された場合でも、ループ全体が1ms以内で
廻らない場合は、設計段階での要求性能の見積もりと、ハード/ソフトの
バランスに問題がある。
処理能力が要求を満たしていないのだから、いくら割り込みルーチン内で
個々の関数を直接関数を呼ぶように書き換えたところで、毎回の呼び出し
の遅延は少なくなるものの、一定周期で処理落ちが発生することになる。
多重割込を許可していても、イベント発生時にまだ前回のイベント時に
実行した関数が終了していなくて再突入できない。リエントラントに
記述しても、再突入すれば、いずれスタックオーバーフローになる。
事実の軽重は別に問題になってない。 問題になってるのはあくまで理解できてるかどうかだけ。 > を呼び出すまでの間が約1ms以上もかかるような、極端に遅いクロックで動い > ていない限り、nTickCountの値が更新されない(割込は発生しない)ことは保証 >できるという前提なんだよ。 問題にされているのかは理解できたようだから話は終れるね >673
>>678 >nTickCountの値が更新されない(割込は発生しない)
あのな、
CheckTimeOutと、SetTimeOutの間でも割り込みは起きるだろ。
その間にもミリ秒カウンタは更新される可能性があるわけ。
このペアをいちいちcli/seiで囲むか?馬鹿げてるよな。
GetCurrentTimeにしても、ループ中1回呼ぶだけでいいのに
何度も呼んだりしてるし、君のコードは冗長すぎるの。
性能や能力とかの話以前の問題なの。
>>679 いや、理解できてないと確信したよ
疲れるよ
>>679 (==655?)
理解できたとか、理解できてないとか言うレベルではなく、あくまで
事前にそれも含め
>>678 の説明どおり、想定して書いているんだが?
>>655 > CheckTimeOut() 相当の動作は nTickCount の割り込みハンドラ内にもってくるようにしないと
> 37ms毎の処理、100ms毎の処理、240ms毎の処理、とか必要になった日には死ぬる。
CheckTimeOut()相当の処理を割込ルーチンに書かなくても、
>>657 の
コードはちゃんと条件を満たすよ?
それと、繰り返しになるけど、たとえ割込ハンドラ内に判定ルーチンを
移動しても、フラグ判定処理がメインルーチン内にある限り、フラグ
判定の周期はループ内のhoge_XXms()等の処理時間の影響を受けるので、
あくまでフラグ変数が立つタイミングがより正確(プリミティブ)になる
だけで、呼び出しの遅れやジッダは解消されない。
また、ハードの処理性能が足りていない場合、割り込みに埋めても、
処理落ちは避けられない。
>>680 > CheckTimeOutと、SetTimeOutの間でも割り込みは起きるだろ。
> その間にもミリ秒カウンタは更新される可能性があるわけ。
仮にその間の割込が1回発生したとしても、それが繰り返し発生し
うる条件が成立するのは、ループ全体の最長コードがタイマ更新
周期(1ms)で廻らない場合に限られる。
そんな説明もしなきゃならんのか?
> GetCurrentTimeにしても、ループ中1回呼ぶだけでいいのに
> 何度も呼んだりしてるし、君のコードは冗長すぎるの。
汎用関数化してコード量を優先で最適化したらああなる。
速度が優先されるならGetCurrentTime()をループの頭に書いて、
CheckTimeOutTime()の判定をインライン展開してやればいい。
ケチつけるのは、これで最後?
>>678 なんてか他に割り込みを使うと使い物にならないってことかな?
>>682 廻らない場合に限られるって、
hoge関数には何の規定もないんだから、
廻らない場合も考慮の内に入れるだろ
37msecが最短周期なら、ご自分で示した
>>664 のように、hoge関数はその時間を
費やすまで戻ってこないかもしれない
そういうとこまで考えが及んでないのに
汎用も糞もないだろ
685 :
774ワット発電中さん :2010/05/10(月) 21:46:07 ID:sRpDgNI/
http://moon.gmobb.jp/hero/ > 自己中人間は嫌いです。
>
> そもそも上記のような非難/批判を行う人物は自己中心的な人物と思われます。
> その主張は単に自分にとってだけ都合が良いことの羅列です。
> または、他者を攻撃することによって自己の優位性を主張するだけです。
> 気軽に発言できる環境のせいで、このような発言(人物)が増えているのは残念なことです。
> このような人物の存在も、公開中止の遠因です。
はいはい
前提条件というか、動作上の仮定に差があるのに、 それが同一と認識しているとして会話しているような気がする…
上のやりとりを読む気にならないから、 誰か何がどう揉めているのか要約してぷりーず
>>688 お互い違うものを見て、白だ黒だと議論
お互い過ちに気付きつつも、引くに引けず
仕方ないので重箱のスミをツンツン合戦
お題は「タイマ割込みを用いた周期処理における最適コードについて」
前提条件無視して自分のしゃべりたいことをしゃべる それがこのスレの特徴だと思う 他人のレスなんて自分がしゃべりだすきっかけに過ぎない
このスレというより、この板全体でよく見る光景 近視眼的なハード屋が色々突っ込まれて 自分の正当性を保とうと長文で言い訳の応酬を始める
レスを読んでたら何か書きたいことが発生して、 前後の整合性とかは関係なく書きたいことを書く
orz
HERO'S Download
http://moon.gmobb.jp/hero/ 20年近くに渡って技術情報の提供を行ってきましたが、現状ではこの先の生活が成り立たなくなり、また、関係方面の協力も得られず、本格的な求職(就職) を目指さざる得ない状況となりました。
また、求職(就職)期間が長引いた場合に、少しでも長く生き延びるために、資料を第三者に売却する予定です。
そのため、告知日をもって資料の公開を中止し、売却までの間は月額閲覧料3万円での有料にします。
過去ログよめw
な、なんだってー
既出
あの誤訳直訳だらけのデータシートはこの人が作っていたのか 別に公開停止でも英語版読めばいいし、 こんなもんを有料で売ろうとか、頭おかしいんじゃないの?
>>697 中の人がもともと被害妄想に陥りやすいタイプだった上に
仕事首になったのがトリガーになって一気に悪化したのだろうて
貧すれば鈍する
AVR studioでCで書いている時に 実際その関数がどのくらい時間がかかるかってどうやって調べたらいいんでしょうか? 関数単位でアセンブラにしてみるとかできるんですかね? (ステップ数Xクロック ですよね)
>>699 手っ取り早く調べるのは、シミュレータ(AVR Simulator)でブレークポイントを
設定して、デバッグ実行して走らせてみるとか。たぶんプロジェクトのクロック
設定を参照していて、μ秒単位で表示してくれたと思う。
まず、数えたい範囲の開始行にブレークポイントを設定しておいて、デバ
ッグ開始すると、設定したブレークポイントで止まるので、次に終わりの
行にカーソルを移動して、カーソル行まで実行を選ぶと、カーソル行まで
実行したら、またブレークが掛かる。
これなら、自分が書いたコード以外(例えば標準ライブラリ関数内)の範囲
も含めたステップ数も数えてくれるかと。ただ、ハードウェアのフラグ待ち
といった、ループ回数が変化したりする箇所を含むと、面倒かも。
あとは、ロジアナやオシロ、周波数カウンタ等を適当なI/Oポートに繋いで、
時間を測定したい関数等の前後にポートをON/OFFするコードを埋め、無限
ループで繰り返し呼びだすテストコードを焼いた実機で動かしてポートの
ON時間を測定する。
繰り返しパルスになるので、安いアナログオシロでも見える。
なるほど、どうもです
割込み処理を高速化したいので変数を以下のようなレジスタ宣言にしてみました。 register unsigned char gXX asm("r2"); __attribute__ ((naked)) ISR (TIMER1_COMPA_vect) { asm("push r0"); asm("in r0, 0x3f"); asm("push r0"); PORTB = gXX; asm("pop r0"); asm("out 0x3f, r0"); asm("pop r0"); asm("reti"); } この「r2」をプログラムの他のファイルの関数で「使用禁止」と宣言するには どうすれば良いのでしょう?
ほかに考えるべきことがあるだろうに
>>702 そのregister〜宣言をヘッダファイルに書いといて、
ヘッダファイルを全ソースでインクルードさせるだけ
>>704 それはソースでgXX変数の宣言が共有されるだけで、r2への変数の割り当てを
コンパイラへ指示したことにならないのでは?
>>702 仮に自分で全てソースを書く条件であればよくても、標準関数などの内部で
r2を使用している可能性がある(関数の出入り口でPUSH/POPは行う)けど、r2が
何か値を保持している時に割り込みが発生すると、その時点でバグになるの
では?
707 :
702 :2010/05/13(木) 17:05:44 ID:/5nOVme+
コンパイラのオプションで -ffixed-レジスタ名 というのがありました。
素で>704の方法しか知らんかった
コンパイル済みのライブラリは大丈夫なの?
>>709 一般的に、リンカはオブジェクトをメモリセグメント単位に結合して、オブ
ジェクト内の外部参照の未解決シンボルを計算して埋めていくだけだから、
まずダメでしょ。
ライブラリ(.a)は、オブジェクト(.o)の集合でしかない。
全てと言わないけど、最低限使っているライブラリ関数は同じオプションを
付けて再ビルドしないと。自分で書いたコードからは直接呼んでいなくても、
別のライブラリ関数から下請けで呼び出されている可能性もある。
>>702 r2の使用禁止が上手く行ってる前提だけど
push pop要らなくね?
SREG退避レジスタも用意すればin outだけで済む
>>697 俺は右も左も解らずに自称OJTで放り出された新入社員時代に
この人のデータシートがすがれる希望だったから、そんなことはとてもいえない
でもデータは削除しろってことだから、全部消した
いままでありがとう
あ、PORT*にoutするだけならSREG退避も不要か
715 :
774ワット発電中さん :2010/05/16(日) 21:55:30 ID:7ThLxC55
AVRは簡単すぎて話題がないな おまえら最近どうよ?
716 :
774ワット発電中さん :2010/05/16(日) 22:08:22 ID:uZoZIFPX
tiny2313で1秒づつカウントアップしていくコードを以下のように書いたのですが、 これだと3,4分で1秒くらい進んでしまいます。 せめてもう少しマシな精度にしたいのですが(1日で1秒以下くらい)何か改善できる ところ等あったら教えてください。 12Mhzの水晶外付けです。他に水晶は持ってないです。 内部発振でもいろいろ試してみましたが、コレが一番マシだっだので。 volatile uint8_t led; volatile int cnt = 0; #define TCNT0_BOTTOM (256-234); ISR(TIMER0_OVF_vect) { TCNT0 = TCNT0_BOTTOM; cnt++; if (cnt == 50) { cnt = 0; led++; PORTB = led; } } int main(void) PORTB = 0b00000001; DDRB = 0b11111111; led = 0; PORTB = led; TCNT0 = TCNT0_BOTTOM; TCCR0B = 5; TIMSK = _BV(TOIE0); sei(); for (;;){} }
32.768KHzを使うとかは
>>716 TIMER0_OVF_vectじゃなくて、
TIMER0_COMPA_vect使う方法でやれよ。
この方法でも普通の±50ppmの水晶で1日4秒の誤差が出る。
1日1秒差まで抑えるには±11ppm以下の水晶がいる。
本気でやるならRTC内蔵か外付けだな。
>716 の改善の範囲ではこんなかんじ #define TCNT0_BOTTOM (256-125); ... TCNT0 += TCNT0_BOTTOM; // = じゃなく += ... if (cnt == 375) { // 12MHz=375*125*256 ... TCCR0B = 4; // 256分周
ある程度実測して補正値を内蔵すると限界まで精度は上がるけど、 それでも温度依存があるので、大したことない
722 :
716 :2010/05/17(月) 08:57:56 ID:kVHGPSZi
みなさま御親切にどうもありがとうございます。 週末あたりに時間とれたら、718, 720さんのを試してみます。
サーミスタでもつけて温度依存分も合わせて補正かける手もある. RTCに使われるような音叉型は温度依存が結構あるんで,精度得たければ 何らかの方法で温度補償しないとな
電波時計からもらう
秋月の12.8MHzの水晶発振器が精度良かったんだけど終了したんだよな
TB62726 とかのラッチ付きシフトレジスタ LED ドライバがあるよね これを拡張したものを AVR で作りたいんだけど、むずかしいかな? 本来はラッチ信号入れたタイミングで貯めていた 16bit 分のバッファを直接対応したピンに吐き出すよね これを、24bit 受け取れるようにして、それを 8bit ずつに分割 さらに 3 つできた 8bit を PWM に変換して 3 つのピンに吐き出したい 当然、PWM を吐き出している間も裏ではビットがシフトしていって、次のラッチ信号が入るタイミングでデューティー比を更新 ビットはどんどん次の AVR にシフトしていく つなげればつなげただけ増やせる感じ 制御したい LED は RGB のフルカラー LED で、直列に 3 つ配列 はじめは TB62726 使って、それぞれの色に 5 ピンずつ割り当てて値の違う抵抗で電流を制御しようと思ったけど、低電流時の輝度の変化差と高電流時の輝度の変化差が違いすぎて変化にムラができてしまうので断念 ATtiny2313 で 4 つ PWM が吐き出せるみたいだから、上記内容をこれでできるかなと思った次第です
>>727 どこをどう拡張したいのか、何をどうしたいのか、サパーリ判らんケド、
DOUT端子→DIN端子で3個のドライバを芋づる式に繋げばいいんでないの?
そういうことじゃなくて?
> はじめは TB62726 使って、それぞれの色に 5 ピンずつ割り当てて値の
> 違う抵抗で電流を制御しようと思ったけど
TB62726(16出力のうち15本のみ使用)につなぐLED1個(各ピン)毎に、R,G,Bで
異なる電流制限抵抗を入れて、輝度をそろえようとしたのならダメ。
TB62726は単なるNPNオープンコレクタ等と違って、内部に定電流回路を抱え
ているから使い方が間違ってる。 それとも、TB62726の外部に付ける電流
値設定用の抵抗を、ポート出力とフォトCdSか何かで可変にしようとした?
ENABLEピンをPWM制御すれば、輝度の制御は可能だけど、R,G,Bそれぞれに
別にドライバIC(計3個)を使っても、ドライバIC単位で同じ輝度になるから、
個体差のばらつきは除いて、繋いだフルカラーLEDは、全部同じ色合いに
なるよ?
フルカラーLED対応のLEDドライバだと、アノードコモンLED用で9ch出力だけど、
I2Cバスに最大で64個接続できて、出力ピン毎に128段階のPWM制御できる
「TB62779」ってのがあるね。9出力だから、1個でRGBフルカラー3個まで制御
できる。
ttp://www.semicon.toshiba.co.jp/openb2b/websearch/productDetails.jsp?partKey=TB62779FNG I2Cバス対応ではないが、16-ch出力でピン毎のPWM制御が可能な定電流ドラ
イバは、「TB62721」や「TC62D722」ってのがある。しかし、いつのまにか、
TB62706だけじゃなくTB62726も既に東芝のラインナップから消えてるな。
マキシムやTI、Avago(旧HP)あたりにも同様のドライバはある。
書き込み器が要らないマイコンにしてしまっている漏れ
・フルカラー LED を使って、自由に色を表現できる __(輝度云々はこのため、独立して調節できないと色を設定できない) ・繋げれば繋げるだけ増やせる __(何千個とかでも。アドレス指定では、指定できるアドレス分だけしか繋げられない) ・PWM を3ライン独立して自由に設定するには ATtiny2313 では無理 261 なら行ける? ・これ以外に、ワンチップでフルカラー LED の色を自由に変えられる上、次々にシフトさせる方法はあるのか このへんで悩んでます AVR なら解決できるかな
>>732 ラッチ信号はどのようにつなげるんですか?
数珠つなぎ?並列?
並列の場合はつなげる数によってバッファとか入れないと駆動できないかも。
数珠つなぎの場合は若干遅延がはいると思うけど人間には気づかないか。
>>733 一応、本体は
・シリアルデータ→データ入力ピンへ
・同期信号→同期入力ピンへ
・ラッチ信号→ラッチ入力ピンへ
この三つを出力して、受け側の振る舞いは
・同期パルスがHになったタイミングで、データ入力ピンを読み取り内容をバッファに追記
__例:
__バッファの内容が 10111000 10101100 01011100 で、同期パルス入力ピンがHになった時、
__データ入力がHなら 01110001 01011000 10111001←
__データ入力がLなら 01110001 01011000 10111000←
__繰り上がった1は、データ出力ピンに反映して、次の AVR のデータ入力ピンへ
・同期パルスがLになり、再びHになったタイミングで...
・これを 24bit 分繰り返して、最後に同期パルスがLの時にラッチ信号をHに
・このタイミングでバッファの内容を各 PWM のデューティー比に反映
・ラッチ信号がLに落ち、再びはじめに戻る
・以降連続してシフト
ちなみに、同期信号はすべての AVR に並列に接続
同期信号が「Hのタイミングでデータ入力ピンを読み取る AVR」と「Lのタイミングでデータ入力ピンを読み取る AVR」を交互に配置する予定
これで行けるかな?
>>731 >
ttp://www.dotup.org/uploda/www.dotup.org901192.gif > それで、各色に 5bit ずつ割り当てて、こうやって電流調節して色を表現しようとしたの
フルカラーLEDが1個しかないことを、やっと理解した。(w
> ちなみに各色 5 ピンの抵抗は 0.5mA・1mA・2mA・4mA・8mA 流れるように調節してあって、
> 電流値は0.5mA 単位で調節できるようにしてあったの
この抵抗値の計算をどうやってます? 単純にΩの法則で ...
R=VLED(12V)-固定Vf(例えば2V)/電流値
とやっても、TB62726のブロック図を見れば判るけど、出力ピン内部は、カレントミラー
回路相当の定電流回路が入っていますので、外部の負荷がばらついていたり、変化しても、
勝手に定電流化する方向へ働きます。
それと、人間の目の感度は対数(log)で、LEDに限らず素子間の個体差のばらつきがある
上に、明るさと電流値は必ずしも比例しないです。
>
ttp://www.dotup.org/uploda/www.dotup.org901197.gif > なので、シフトビットの振る舞いは残して、ラッチした時の動作はこういうふうに
> したいと漠然に思った
TB62726ではなく、AVR内蔵タイマのPWM出力(OC1A等)を使うということなら可能かと。
>>733 ごめんなさい、ぜんぜん違う話してたw
確かに、数が増えるとキツイかもしれませんね
バッファ入れるっていうのは具体的にどういう事でしょ?
問題なければ数珠つなぎでもいいかな
>>732 > ・PWM を3ライン独立して自由に設定するには ATtiny2313 では無理 261 なら行ける?
ATtiny2313や、もっとピンが少ない8ピンのAVRでも十分可能だと思う。
20MHzのATmega328Pで、タイマ割込を1本だけ使い、ソフトI/OをON/OFFして、フルカラー
LEDのR,G,BをPWM制御で動かしたことはあります。内蔵タイマのPWM機能は使っていません。
人間は、50〜60Hz以上で点滅しているとちらつきが判別できなくなるので、その256倍
の周期(約15kHz≒66.6us周期)のインターバル割込を使い、タイマ割込内で、割込毎に
インクリメントされる8bitのカウンタ変数の値と、R,G,Bそれぞれに割り当てたPWMパルス
幅(0〜255)と比較して、汎用出力に設定したポートをON/OFFしています。
R,G,BのPWM変数は、255から引いた値にすれば、8bitのカウント値が設定されたPWM変数の
値を超えたら対応するポートをONし、カウンタ変数が、オーバーフロー(255→0)する時に、
無条件にR,G,Bを全てOFFするようにしたかと。
デバイス依存のハードウェアリソースは、タイマ1本だけで、あとは66.6us以下の周期の
割込を十分廻せるクロック速度と、コードを格納できるROM容量があればいけるかと。
簡単なコマンドインタプリタを載せて、シリアル(232C)通信経由でホスト側から、
> R=255 ← RのPWM値を255に設定
>
> R? ← 現在のRのPWM値を問い合わせ
> R=255 ← 応答
>
ってな風に、パラメータを設定できるようにした。 最後の状態は、EEPROMに
保存するようにしたらいいかも。
>>732 > ・繋げれば繋げるだけ増やせる
> __(何千個とかでも。アドレス指定では、指定できるアドレス分だけしか繋げられない)
芋づる式なら無制限に増やせるけど、単純なクロックとラッチ信号だけでは、
一部の書き換えでも全てのデータを送る必要があるので、データが貫通するまで
の時間が芋づるの長さに比例する。 それゆえに、輝度や点灯パターンの表示更新
レートは遅くなるよ。 あと、ハード的な仕掛けで自動検出もできるけど、制御
側は、芋づるにぶら下がっている個数を知っている必要がある。
それと、芋づる式でもアドレスを持たせていれば、特定部のみ更新(自分のアド
レスではないデータは華麗にスルー)や、グローバルアドレス指定で、全点灯/
全消灯といった制御もできるので、一長一短。
> ・これ以外に、ワンチップでフルカラー LED の色を自由に変えられる上、次々に
> シフトさせる方法はあるのか
輝度の制御はPWMでやるとして、ケーブルの最大総延長や、ノード間の長さに
よって、通信のフォーマットや物理層の仕様を考える必要があるように思える。
TTLレベルのI2CやSPIでは、さほど距離を伸ばせない。
引き伸ばす芋づる式なら、RS422やRS485準拠にしといた方がなにかと便利。
>>732 LEDの光度調整ぐらいなら本物のPWMじゃなくても、
ポートの各bitをオルタネートさせれば、2313のPORTBの
8bitを丸々LEDの制御に使えたりするんじゃないかね。
デューディ比の生成は101010・・で50%、100100・・で33%とか、
パターンを作成しておいて、それを毎回必要bit分合成して
同じタイミングでセットするだけ。
それとシフトレジスタのスレーブ側でAVRを使う場合、
クロックは汎用ロジックIC程速くはできないよ。
ID:erdIU4Az 確かに、ソフトウェア制御の PWM でも十分そうですね! そのへんは十分検討しよう 同時に全ての LED の動作を開始する必要は今のところ無いので、スタートしてから順番に光ってくれればおkです アドレス云々になってくると、何らかの形でアドレスを指定したユニークなユニットが必要になるので、出来れば避けたい 繋げられる数に制限もでるし なんか、皆さんのおかげで出来そうな気がしてきました シフトレジスタよりも安いICでそれ以上の高機能ICを創り出せちゃうんだからAVRはやめられませんなー
>>740 そうか、なるほど確かに本物の PWM を使う必要はないかもしれないですね
でも、8bit で輝度 8 段階、16bit で 16 段階って、まんま段階が多いほど一回の長さが増えますよね
本体内蔵の 8M で動かしてる場合、実際何段階までは自然に輝度を変えられるんだろう
いちおう流れる速度、ラッチ信号が出てから次のラッチ信号が出るまでの時間が 0.1 秒以内ならいいかなと思ってます
>>741 > 同時に全ての LED の動作を開始する必要は今のところ無いので、スタートして
> から順番に光ってくれればおkです
ソフトで制御するなら、どうにでもなるんで、PWMパラメータ値の書き換え
と、表示への反映を別コマンドにすればいい。
UARTを内蔵したAVRを使って、ノード間の物理層はRS485のマルチドロップに
した方がいいように思うな。 これなら、TxD/RxDと電源/GNDを含めて配線は
4本で、通信速度にもよるけど、最大延長1kmくらいまでいける。
> アドレス云々になってくると、何らかの形でアドレスを指定したユニークな
> ユニットが必要になるので、
ファーム書き込む際に、自動でシリアル振ってくれるISPソフトで、EEPROMなり、
フラッシュの一部に固有アドレス書いておけばいいだけでは? まぁ、シール
を貼るなりして、書いたID番号が判るようにしておかないと、後でパニックに
なるけど。(w
> 出来れば避けたい繋げられる数に制限もでるし
それ以前に、数の制限については、電源廻りをどう解決するかを考えておく
必要があるだろうね。 仮に1ノード当たり30(R,G,B各10mA)〜300mA(R,G,B
各100mA)程度でも、100個繋げば合計で3A〜30Aに、1000個も繋げようもん
なら、合計で30A〜300Aになる。
まさか、ACアダプタを100個,1000個使うとか、1個の電源から芋づる式配線
を伸ばして、電源/GNDにAWG 8(芯線太さ約3.2mmΦ)とかの太い線を使う気じゃ
ないよね?
電源は、シリーズ接続するLEDの順方向降下電圧の和よりやや高めの電圧
を供給し、ノードを制御するAVR周辺の電源は、AVR自身の内蔵PWMで降圧式
SWレギュレータを構成して安定化させると、発熱とか色々よさげ。
>>744 ちなみに、何れしゅかコレ? アキバのUDXビルあたりの街路樹にまとわりついて
いる、季節モノのLEDの親戚か何か?
>743 に似たような構成でDMX512という規格があります 250kbpsでRS485で通信です LEDのイルミ制御にも使われているので興味があれば調べてみては?
AVR studio上の設定でmakefileにASRC = を追加するにはどうすればいいのでしょうか? ソフトUARTを使おうと思っているのですが、公開されているものはインラインアセンブラを含むものがほとんどで アセンブラの関数を認識できていません・・・
>>747 依存関係も書かなきゃだめだよ
WinAVR付属のMFileってツールで作成されるMakefileが参考になる
うわぁ。。。とりあえず、乙です。 無理しないでくださいねー
図は、元絵を貼りつけて、適当なドローイングツールでなぞると そっくりだけど自作の図ができる
「切り替え」は「切り換え」にした方がよろしいかと
AT90USB1287を使ってUSBデバイスを初めて作ってみようと思います。 ホスト機能はいらない場合、UIDピンは普通にPE3としてI/Oに使っても良いのでしょうか? それともフローティングしておくべきですが? また同時に20台くらい同じ物を繋いで、それぞれ独立に通信する事を考えています。 ProductIDあたりを外部スイッチで変更出来るようにしておけば、普通のHubで繋げばいいですか? 何か気をつける点等あればご教示下さい。
気をつける点は、そのおっちょこちょいな点だな。 USBの規格書をもう一度よく読んでみよう。スイッチひとつ分BOMMコストが下がるよ。
とても初心者な質問で申し訳ないのですが MISO MOSI ピンを頻繁に出力するプログラムを書き込んでしまうと ISPからプログラムの書き換えなどは出来なくなってしまうでしょうか? いままさに、そのプログラムを書いてから認識しなくなってしまって。 (H/W構成は一切変えてなくその前までは普通に認識して書き込みもできた)
>>757 ISPから書き込むとき、MISO,MOSIのピンには、他に何か(特にコンデンサとか)が繋がってないですか?
>>758 レスありがとうございます。
マイコン単体とISPのみの回路にしてみてもライターから認識ができず症状は同じです。
書き漏れましたが、SCK ピンも出力をしているプログラムが入っています。
安い(tiny2313)とはいえ、認識しないと残念な気になってしまいます。
また、別のtiny2313で同じH/W構成で認識は行えました。
動作していた時点からfuse等も変更していません。単純にプログラムを書き込んだだけです。
>>759 何らかの原因でFUSEが書き換わったんじゃね?
外部クロック入れてISPしてみれば。
これで行けたことあるけど。
外部クロック入れてもダメみたいなので、速かった寿命と思う事にします とりあえずはISP関係するピンを自由に使っても通常は問題無いようですので 安心して使えそうです。 ありがとうございました
多分その2313は今も正常で、使い手の判断(見分ける技量)によって 壊れたことにされてしまったと思うともったいない。煽りや皮肉じゃなくて。 その2313はとっておいて、数ヶ月後、AVRに慣れたころに見直してみるといいかもね。 本当に壊れててもそのとき処分するんでも遅くはないだろう。
そうですね。 高圧プログラミング(?)等、他にも手段はありそうですが ISP環境しかない現在ではどうしようもなくなっているので 今後は見分けれるスキルを付けれるように頑張ってみます。のんびりですが。
そもそも、ヒューズが書き換わって内部クロックになっている可能性がある なら、外部クロック入れて動かすには、ヒューズの書き換えが必要でしょ。 聞くならせめて、現在のヒューズ設定を読み出して晒したり、クロックや RESET等のピンの接続状況や、どんなISPライタを使ってるかくらいの、 最低限の説明くらいしないと。
ライターから認識しない状態でもヒューズって読めるの?
>>765 ライターから認識しない状態ではヒューズも読めないよ。
RESETピンがIO設定になってしまうとクロックどうこうしてもダメす。
高電圧の書き換えすれば良いんじゃないかったっけ? ATtiny ヒューズリセッターとかでググって見て ちがう?俺変な事いってる?
どうしても治したければリセッタ でも2313って100円の石だから、あきらめるってのも常識的な手だ。 ところで、死んだICの使い道ってなんか無いかな?
769 :
766 :2010/05/26(水) 00:00:51 ID:vRYRK7vH
>>767 間違ってないです。自分が説明不足でした。
RESETピンがIO設定になってしまうとISPライタでは直らない、ですね。
12V+αでなんとかなるかな。
リセッター用のArduinoシールドもあるみたいだけど2313より高くなってしまう。
むしろ、リセッター(あるいはライター)の作成って楽しみが増えたって事にしてしまうとか
単純に壊れただけだと思うが 8ピンデバイス用に高電圧書き込み機はほしい
ところで、ライタは自作? オレのライタはたまに認識しなくなって、適当にUSB引っこ抜いたりしてると治る あと電源関係やクロック関係のハードが不安定だと動作も不安定に パスコンは当然必要
774 :
774ワット発電中さん :2010/05/26(水) 01:54:35 ID:DmQSDsIy
775 :
774ワット発電中さん :2010/05/26(水) 19:57:14 ID:FriJwNvB
250V らへんの大容量コンデンサー5本くらい探してます。 コイルガンや細線爆発するつもりです。 譲るまたは、格安でいい方はまずコメ下さい
らへんって若者言葉?
なぜこのスレで聞くの?
構う必要はない スルー
>>775 アルミホイルとサランラップをぐるぐる巻きにすれば作れるんでね?
>>781 うお、マジでホッとしたw
AVRのスレだったのね。まっことスマンです。
783 :
755 :2010/05/27(木) 01:10:20 ID:rJjCkQIe
>>756 ということはつまり、スイッチが無くてもいいということですか。
書き込むプログラムは全て同じ物を使いたいんです。
Hubの先に繋がっている物がそれぞれ何番かを認識する方法がいまいちわからないのですが。。。
それと聞いてばっかりで申し訳ないですが、
UIDピンの取り扱いについてもお願い出来ますか?
756じゃないけど Q. PE3として使えるか A. USBが有効なら常にNO、ピンはオープンでOK。 Q. デバイスを区別したい A. VID、PIDとは別に、任意桁のシリアル番号を持てる。 GetDescriptorリクエストを参照。 シリアル番号はDIP-SW等で読み込むか、 内蔵のEEPROMに書き込んどけばいい。
高速PWMでOCRnxを0にしてもパルスが消えないよ><
ISP端子をIOにする場合は抵抗かましてテストポイントつけなさい というハードウェアデザインの指南書があった気がする 普通に考えてISP書き込みモードではリセットも駆動するから ISPモードに入らないってのは考えにくいけど fuse書き間違えたに一票
俺がtiny2313のタイマ1でPWM式D/Aコンバーターの電圧発生器を作ったときの例でいえば Set OCnA/OCnB on Compare Match, clear OCnA/OCnB at BOTTOM (inverting mode) のモードにセットして ICR1=65536-1; OCR1A=ICR1-0; OCR1B=ICR1-0; にするとABの各出力が0になった つまり0/65536のDuty比になった ICR1=65536-1; OCR1A=ICR1-65535=0; OCR1B=ICR1-65535=0; にするとABの各出力が65535/65536のDuty比になる つまりOCRnxを0にしてもクロックパルスは消えない Clear OCnA/OCnB on Compare Match, set OCnA/OCnB at BOTTOM (non-inverting mode) のモードだと ICR1=65536-1; OCR1A=0; OCR1B=0; にするとABの各出力が1/65536のDuty比になる 限りなく0に近いDuty比になるがクロックパルスは消えない 「設定値」を「0」にしたときにクロックパルスを消したいときには ICR1=65536-1; OCR1A=ICR1-「設定値」; OCR1B=ICR1-「設定値」; みたいにしなければならない ということだったと思う 違ってたらすまん
>>786 誰も声の大きい奴が有能なんて話してんじゃねえんだよ
どんな仕事でも、声の小さい奴は例外なく無能だって言ってんだ
どんな仕事って言っても正社員で経験したのは4社だけど
バイト時代も含めて声が出てない人は必ず仕事も出来ない人だった
一人の例外も無くだ
まだ12年の短い社会人経験から得た経験則だが、
まともに働いてる人間ならほぼ共通する認識、つまり常識のはずだぞ
788は何が言いたいんだ誤爆か
俺はバカだけど声だけはでかいので 会社では有能ヅラできた ってことかとw
そして今は無職です。
営業じゃねえんだから 口べたな有能なやついくらでもいるよな 俺が知ってる一番仕事ができたたやつは (新入社員であっても)女に話しかけられるとキョドッちゃって何言ってるかさっぱりわからない人だった 女子の場合、そいつとのやり取りはすべてメールっていう(そいつだけが知らない)暗黙の社則があったもの
幾多の強敵(とも)の屍を乗り越えて、ついにねんがんの北斗究極奥義 無職転生を手にいれたぞ!
ググッてみたら
>>788 はコピペじゃんかw
オラ釣られちまったぜorz
そんなわけでボイスラッガーに入隊します。
PIC の書き込みの遅さは何だったんだw AVRISP速いwww
それって、PICのライタがヘボだっただけじゃね?
PICkit2はそこまで遅くなかったような気がするんだがw
昔のPICは1ワードずつ書き込みで1ワード当たり4mSecかかったりしたから8kワードで30秒以上かかる計算だし実際そうだった 最近のPICは8ワード一括書き込みとかできて進歩してるよ
そして赤いPICKIT3、ICD3でさらに早く。
通常の3倍のビットレート
AVRライタでPICに書き込みはたまに見るけど逆はあるのかな? Pickit2とかはEEPROMなんかにも対応してるし、PICライタでAVRも書けるならAVRも使ってみたいと思うし・・・
>>802 THX!
でも、秋月ライタか・・・
誰かPickit2をAVRライタに改造してないかな・・・
>>804 残念ながら俺にはそんな技術は・・・
ちょっと試してみるかなコレ。
AVR-USBasp 720円也
PICKITとAVRISP mkIIを買うのがベスト。 昔は高かったけど既に両方とも4000円で買えるんだぜ。 書き込み器作るのはその後でいいじゃん
ライターばかり作っている俺がきますた。 ここ数年で作ったライターは12個だった。 でもって、マイコン使って作った物が 8個で、内5個がArduino互換機でし。 ついでに、自分で書いたスケッチが3つ••• 何しているんだろう>俺
40 名前:774ワット発電中さん 投稿日:2008/06/10(火) 00:33:42 ID:epyTo3qj PIC/AVRを始めることにした。まずはライタを作らないと。 ライタ作った。さて、何を作ろうか。 …作りたいモノがない!! しかし、何か作らねば…。 そうだ、新しいライタを作ろう。
つまりライタに書き込むライタをつくって そのライタに書き込むライタをつくって そのまた--
AVR Studioで予め設定しておいたヒューズビットを、hex書き込み時に一緒に書き込ませる方法ある?
AVR Studioのプロジェクト設定に、ヒューズ設定を記述できる箇所なんて あったっけ? avrsp.exeや、avrdudeのようにコマンドライン引数でヒューズ設定を指定 できるライタプログラムなら、ライタの起動オプションに指定すれば可能 だけど、プロジェクト毎に個別指定できない気がする。 AVR Studio次第だけど、%環境変数%経由で渡せないかな? AVR Studioで、外部のMAKEFILEを使う指定でもいいなら、MAKEFILEファイル 内で指定可能かと。 フラッシュ書き換える度にヒューズも毎回書き換えられるのは、精神衛生上 よろしくないかも。(w
ヒューズビット書き換えだけBASCOMの体験版を使う
すみません。お知恵を貸していただけませんか。 以前は書き込みが出来ていたAVRISPmkUなのですが、 先日、LEDが赤とオレンジの点滅状態になり、 書き込みができなくなってしまいました。 ファームウエアのアップグレード要求なのかなと思い、 「アップグレードtools⇒AVRISPmkII upgrade」を試してみたのですが、 「No AVRISP mkll in boot mode found」と表示され、駄目でした。 またboot modeにするため、ケースを開けて、 1-2ピンをショートさせてみましたが、上手くいきませんでした。
ショートさせた途端に戻るわけでなく ショートさせたままファーム書き込みをするんだけども、その辺大丈夫?
あと、ショートは1-3ピンだな。紙媒体の取り説に画像付きであるからそこは間違わないとは思うけど PCにUSBを指すタイミングとか、いろいろ手順があるので、しっかり戻し方を見た方がいいかも。 ちなみに電子マニュアルもある。 スタートメニュー → Atmel AVR Tools → AVR Tool Help AVRISP mkII User Guide → Troubleshooting → Manual Firmware Upgrade これ以上はわからん・・・。
> またboot modeにするため、ケースを開けて、 > 1-2ピンをショートさせてみましたが、上手くいきませんでした。 マニュアルによれば、boot modeは1-3ピン間の短絡のようだが? 通常の状態で、赤とオレンジの点滅にはならないはず。 書き込みできない時、OSでライタはデバイスとして認識されているのか、 エラーメッセージはどう表示されたのか? 異常が起きる前後で何をした のか、しなかったのか? 情報出さな杉。
>>817 01.AVRISPmkUを対象から切断してください。
02.USBケーブルを取り外してください。
03.筐体の上部と下部を共に止めている4つのプラスティックの留め具を押すことによってAVRISPmkUを開けてください。
04.基板上のAVRISP mkUシルク印刷傍のスルーホールの1番ピンと3番ピンを短絡してください。 下図をご覧ください。
05.USBケーブルを装着してください。 AVRISPmkUは直ぐに赤/橙の点滅を始めるべきです。
06.AVR StuidoのToolsメニューに配置されたAVRISP mkII Upgrade...応用プログラムを開始してください。
07.Start Upgradingボタンをクリックしてください。
08.更新終了時、AVRISPmkU上の1番ピンと3番ピンを短絡を取り去ってください。
09.USBケーブルの取り外しと再取り付けによってAVRISPmkUの電源をOFF/ONしてください。
10.Doneボタンを押下してください。
こんな時間にみんな親切だな
V-USB コンパイラー通らない! usbdrv.c:435: undefined reference to `usbFunctionWriteOut' usbdrv.c:448: undefined reference to `usbFunctionSetup' usbdrv.c:476: undefined reference to `usbFunctionWrite' Build failed with 3 errors and 0 warnings... 直接 USB 使うまでの道のりは険しそう
>>823 まずはobdev.atのreference Project(power switchとか)
を試せ。
話はそれからだ。
共立エレショップのUSBライターとケーブルを 買ってブレットボードに Tiny2313を繋げたんですが自動検出押しても認識しません。 接続はあってると思うんですが、USBから電源をとってるから 認識しないんですか?
まずデジットに問い合わせじゃない?
・RESETを釣ってる抵抗が低すぎる ・MISO/MOSI/SCK接続が間違ってる ・AVRWRTのJP4をショートさせていない これぐらいしか思いつかんな(´・ω・`) こちらではバンバン動いてるよ。
>ブレットボードに ブレッドボードは配線によっては動かないだろうから写真見たいですね。
2313だとほんと最低限のことしかできんから 最近はmegaばかり
830 :
774ワット発電中さん :2010/06/06(日) 02:28:24 ID:67lBIgYw
>>825 その書き込み器ね、USBからの電源のラインがパターンカットされてるよ。
だからマイコン(Tiny2313)には自己給電しなきゃ認識しない。
設計によっちゃダイオードとかポリスイッチで保護がいるから、すっきり切ってあるんじゃない?
ターゲットに自信があれば半田ブリッジさせてバスパワーで書き込める。
USB電源をきっちり作るのはめんどいからなあ 自分で使うだけなら、壊さないようにできるけど、 他人に売るものなら安全側で作るな
USB規格の電源は専用ICで作れるな。型番忘れたけどアトメルからも出てた気がする。ATほげほげで
皆どのAVRメインで使ってる? 使い分けしてるとは思うけど、お気に入りとかは有るよね 自分は主にMEGA328Pだけど
以前はtiny2313多かったけど、今はほとんどATMega328をArduino化しちゃってつかってるw お手軽にできるし あと小さくしたいときはAtiny13をなんか安いんでざくざく買っちゃったんで使ってる
tiny2313とmega128を使っている…
ATMega328pとかの内蔵1.1Vて結構精度高いのな 室温から60℃程度の範囲で実測15ppm-150ppm/℃程度だったわ 10bitA/Dには十分な精度 気に入った
そういえば秋月の328はいまだにエラッタもち?
>>836 でも、A/Dの入力が1.1Vに収まらない方が多いってのが欠点かと
>>839 A/D変換は負荷のインピーダンスが高いと速度や精度が落ちるから、分圧すると抵抗分だけ不利になっちゃう
かといって、分圧抵抗を下げると電流を沢山取り出せる負荷じゃないと追いつかない
まぁケースバイケースだから、要求仕様とハードの複雑さで最適なところを選定すればいいかと
1.1Vがダメなんてことは全く無いし便利だよ
欠点を知った上で使うのが良い
んで、分圧する抵抗がJ級(±5%)品だったり、温度特性が±200ppm/℃だったり するンでつね?
>>837 4月に買った奴はエラッタ持ちだった
エラッタ持ちだからやすいんじゃないんか?
V-USB 書き込んでパソコンで HID 機器として認識するところまでは来たんだけど、いざクライアント側のソフトを作ろうと思ったら、作る方法の検討がつかずにお手上げ C# USB HID とかでググってるんだけど、全然かからない
「C# USB HID」でググったら クライアント側のソフトを作る方法が山ほど出てくるけど、 かからないって何がかからないんだ?
都合の悪い単語は脳内フィルタで落とされるのです
>>845 だよなー
おれも試しにググって見て普通に出て来たんで不思議だった
C#って単語入れないと もっといろいろ出てくる
「全然わからない」のタイプミスと推測
Windowsと書いてないので、実はunix房だったり、Apple房だったりという 可能性も。
850 :
774ワット発電中さん :2010/06/09(水) 00:01:51 ID:OPJm44ME
いや、案外緊急時に使える手かもしれんぞ?w
>>850 すげえ!この発想はないなw
ハブは安いし、なにか別の用途にもつかえるかもしれんね。
緊急時に、ほかに有用な道具は何一つなくて、なぜかUSBハブ(最低4ポート 以上)と、ロジックゲートIC、ブレッドボード一式だけが揃っているなんて ご都合主義は、ジャック・バウアーやマクガイヤー程度ではムリぽ。 使えるのは、最低でもスレッジ・ハマーや、ラルフ・ヒンクリーくらいの スキル(wが必要。
超低速でいいからMISO端子使わんでプログラムできないかな。 MOSIとSCLKだけで流し込めないものだろうか。
857 :
イザベラ*アイリス :2010/06/09(水) 12:52:08 ID:eQU+Bfhp
昔トグルスイッチでLCDに文字表示させている友人が居てびびった
ハブならあるけどUSBケーブル4本も用意できねーw
ドビン、デガラシ、そこにある2本のA-A USBケーブルをブッターギルんだ。
電鍵とかなつかしいな
865 :
291 :2010/06/10(木) 14:36:54 ID:4PKQRwdr
マシン語の一覧表って公開されてるんでしょうか? データシート見てもニーモニックまでしか載ってないですよね。
ダンプリストでもセルフディスアセンブルする気?w というかビット並びとかでだいたいわかるけれど。
>>868 オペコード順の命令表って、本家のサイトの何処かに有りそうかな?
0000 -> NOP
01XY -> MOVW
|
|
>>869 >例えばステータスレジスタのビット操作命令(BSET命令)でキャリービットをセットしたときと、
>キャリービットをセットするSEC命令は同一のオブジェクトコードとなります。
動作(結果)が同じなんだから、同じコードにするのが自然だろ。
LDA 00h より XORA だぜ。
というより、68系で言うLSLA(Aレジスタの値を論理左シフト)とASLA(Aレジ スタの値を算術的左シフト)みたいに、便宜上単に複数のニーモニックが割り 当ててあるというだけの話でしょ。 LSRA(論理右シフト)とASRA(算術的右シフト)は動作が違うのでOPコードは 異なる。 Z80の「LD A,00h」と「XOR A,A」は、厳密に言えばフラグの動作が違うん じゃなかったっけ? 68系はLDした値でZとSが変化するけど、80系はフラグ は変化しない。XORは演算後の値でフラグが変化した気がする。
>LDA 00h より XORA だぜ。 それ違うからw
>872 左シフトと足し算による二倍が同じニモニックのMSP430という変態がいてな。 おかげで左シフトと右シフトでクロック数が違うんだぜ。
>LDA 00h より OR A,A が抜けてます。
CYのクリアだけならOR Aだろうけれど、A=0ならXOR Aが1バイト(Zフラグは無視するとして) という事じゃまいか?
877 :
875 :2010/06/11(金) 17:58:43 ID:qocmj+i7
Z80のとき、0セットとZフラグを立てるテクニックとして LD A,00H OR A,A という2命令を XOR A,A 1つにするのが流行っていた。その事だと思ったんだけど。
なるほど、そんな事もありましたねw まぁスレからは離れるけれど、0クリアのテクかなぁと思ったので。 1バイトで0クリアするっていうのは常套手段だったような気がする。 今だったら別にイミディエイトで抱えても(AVRやPICなら特に)サイズ違わなかったり するんだけどねぇ。 0クリアする専用命令とか0(が常時代入される)レジスタとかあるCPUもあったりするし。
会社帰ってから1週間シコシコ作業してやっと完成 一番苦労したのがケースの加工という・・・ でかい穴あける工具買うかなぁ でもめったに使わないしなぁ 最近、秋月で開閉可能なプラケースをはじめたので、 これと一番安くて小さい基板の組み合わせがお気に入り
AT90USB162のヒューズビットをリセットするため、高電圧の書き込みを作りたいと思います。 書き込みアルゴリズムの資料を探しているのですが、アトメルのサイトで見つけることが できません。どこにあるかヒントでも教えてもらえないでしょうか。
AVRのマイコンの場合種類を問わずデータシートのMemory Programmingのパラレルプログラミングの項目として データシートの内容の一部として含まれているのでは?
ATMega328相当で16ピンor20ピンにならないかな 28ピンはデカ過ぎる
足のないパッケージなら 8ピンDIPより小さいぞ
ATmega328Pでも、0.8mmピッチの32ピンQFP(ATmega328P-AU)だと、モールド 部分は7mm角でリード先端が9mm角、0.5mmピッチの32ピンQFN(ATmega328P-MU) だと、パッケージは5mm角だね。 QFNは小さくてイイんだけど、パッケージ下面の放熱パッドがパターン引く のに邪魔くさい。
ひっくり返してUEWで配線
mega644PVのADCが全く動かんウワァァ-----。゚(゚´Д`゚)゚。-----ン!!!! 全部ADCHもADCLも全部ビットが立ってる。 今のところADC0〜ADC5まで全部、10kオームでGNDに落としてるんだけど何でだろ。 mega168pで昔作ったヤツは一撃で動いたのに不思議だorz
VREFの設定じゃないかと
夜間の職業訓練校みたいだよね、なんとなく。 いい意味で電子業界のけいおん化すれば、良い方向になるかもしれないけど。
892 :
774ワット発電中さん :2010/06/16(水) 00:17:51 ID:rSI3s/tw
AVR初心者です。C言語も始めてです。 AVRで、スイッチ1をONにするとLED1が点灯し、LED1が点いたまま隣のスイッチ2をONにするとLED2が 点灯するプログラムを教えてください。またはヒントを下さい。 つまり同時に押すということです。 お願いします。
>>892 さすがにそれくらいは自分で考るか調べろと言いたいけど、
どうしても答えが欲しければもう少し具体的に書かないと
きっとトンチンカンな答えしか返ってこないよ。
>>892 せめて回路図だけでもうpするなり書くなりした方が良いと思うよ。
895 :
774ワット発電中さん :2010/06/16(水) 00:53:29 ID:rSI3s/tw
トンチンカンでもいいので教えてください
while(1) { if(スイッチ1ON) { LED1ON } else { LED1OFF } if(スイッチ2ON && スイッチ1ON) { LED2ON } else { LED2OFF } }
while(1) { 宿題は自分でやれ }
こうじゃねのか? while(1) { if(スイッチ1ON) { LED1ON if(スイッチ2ON) { LED2ON } } else { LED1OFF LED2OFF } }
スイッチとLEDと抵抗がそれぞれ2個、後は電池があればできる。 CPUはいらない。
飾りでCPUつけとけば 実際の配線はしない
飾りじゃないのよDIPは HA HAN
ちょっと悲しすぎるのよDIPは HO HO HO…… ♪
廊下は目立つから屋上の外にしといてやる。
マルチをした罰だな
>>892 SW1の出力にLEDとプルアップ抵抗をつなぎ、そのプルアップ抵抗を介してSW2をプルアップするようにすれば簡単じゃえn
抵抗は内蔵使えば不要
>>892 宿題なら、ウケを狙って74HCロジックで組んでみるとか。
>>905 実は、この課題を出したのがID:YIUQDiySだったとか
>>892 SW-AVR-LEDで、SWをONにするとLEDが点灯するプログラムがかけるなら…
その回路を2個並べりゃよくね?
913 :
887 :2010/06/17(木) 13:59:12 ID:UV8Z3ctQ
ADC動かんってのは自己解決しますた(`・ω・´) 原因は19.6608MHzのCPUクロックを分周してADCへぶち込んでなかったため、 ADCがオーバークロックだった模様。ADCへ与えるクロックをCK/32で無事どうさしました(´∀`) ・・・って本当かな? ドキュメントに載ってないような。
そういえば俺がatmega644pと328pのA/Dの動作確認したときも オーバークロックでA/D変換値が1023固定になったわ 変換値のバラツキは多くなるけど5MHzまではokで10MHzでは1023固定になった その中間の周波数は試してない
ATmega644PAのドキュメントしか見つけられなかったが、こいつには -----------ここから引用------------- 22.5 Prescaling and Conversion Timing By default, the successive approximation circuitry requires an input clock frequency between 50 kHz and 200 kHz to get maximum resolution. If a lower resolution than 10 bits is needed, the input clock frequency to the ADC can be higher than 200 kHz to get a higher sample rate. -----------ここまで引用------------- とか書いてあるな。どこまで「動く」のかの限界はこの付近には見当たらないが。
ADC項の最初に、Up to 15kSPS at Maximum Resolutionとある。 ここから逆算して求めると 一回の変換サイクルで14クロック(Fig22-5)だから 210KHzになるので、まぁ200KHz程度って事だろう。
一応、データシートのElectrical Charactersistics項 ADC CharactersiticsにClock-Max1000kHz(1MHz)と書いてあるよ。
リセット後の初期値は2分周だから内蔵の8MHzとかだと一応正常に動くから AVRのA/Dはノイズが多いなとか思いながら気づかないで使ってる人も少しはいそうだな
今ちょっとatmega328pで試してみたが2分周でシステムクロックが15MHzまでは値のバラツキは増すが正常値 16MHz17MHzと上げていくとmax値1023の方向にどんどんシフトしていく感じになった
328pを32MHzで使ってるけど、ADCは128分周で一応使えてる
921 :
887 :2010/06/17(木) 21:01:06 ID:UV8Z3ctQ
今調べてみたらElectrical Charactersisticsに確かに1MHzって書いていた(´・ω・`) 漏れ、単にクロックあげたら精度が落ちる位しか妄想してなかったんでなぁ。ADPS012なんか どうでもいいやと思ってた。つか、電圧とかはVCC+0.5V超えちゃいかんとかあちらこちらに ちりばめてるのに、ADPSの項目だけなんにも注意事項みたいなのが書いて無いのな。 やっぱはまったときにはドキュメントを隅から隅までじっくり読むべしですな。初めてmega644PAの PC0〜7を使おうとして全然全く動かなかったのも、JTAGのヒューズビット次第だったしorz
922 :
774ワット発電中さん :2010/06/18(金) 00:32:11 ID:AjH2cIqp
電源を入れて5秒後にLEDを点灯させるにはどういったプログラムを書けばいいですか? AVRのmaga8です。
>>922 while(1)
{
宿題は自分でやれ
}
でん
↑間違えた
>>922 void main()
{
5秒待つ
LED点灯
}
>>922 この程度、授業を普通に聞いてれば100%できる超低レベルの宿題だろ
むしろ聞いてなくてもテキスト見れば楽勝でできるレベル
それすら出来ないって、よっぽど頭が残念なんだな
向いてないから退学しなよ
AVRマイコンを仕事で使ってるやつが居ると思うが、どういう事に使うか教えてもらえないか。
コストダウンで、ディレイタイマーの代用をさせたり色々
ラジコンのサーボの中にPICがいたから AVRが入ってたりすることもあるんじゃないだろうか
趣味用途にチップ開発なんてシナイダ
センサからのトリガが来るまで待っていて、来たら上位のマシン(組み込みLinux機)の 電源をONにするだけの簡単なお仕事です。
>>933 いくらなんでも簡単すぎてAVRにやらせる仕事じゃないだろ
74さんとかにお願いしろ
555 様でしょ
555様というと別な人を連想するw
>>928 温度計・充電器から自動車のパワーウィンドまで色々使える
Z666様「ヒャッハー!!!」
>>934 昔はそうなってたらしいんだが、たまに雷ノイズで誤起動しちゃったりしててな。
CRフィルタ+14+74まで必要ならもうtiny2313でいいだろうと。
>>939 ドクター取ったけど仕事が無いので清掃員してますって感じだな
泣ける
>>941 ATTiny10のことも忘れないであげてください。
>>942 あ、そういうのあったんっすか。すまんこって。
944 :
291 :2010/06/19(土) 13:58:10 ID:+BLKCUvM
>>942 おおお、6pinがあるなんて知らんかった。
ラインナップはATtiny4/5/9/10だね。
これほしい。digi-keyに非在庫だけどあるね。
買ってみるか。いまのところ特に用途が無いけど。
>>942 tiny13を愛用してたけど、6ピンも面白そうだな
小ピンAVRは高くてなぁ・・・
>>944 >買ってみるか。いまのところ特に用途が無いけど。
ワロタwwww
値段もだけど 純正ライタで高圧プログラミング非対応なのも、 地味に小ピンを使いづらくしている。
AVRISPmkIIで書けるの?>6pin
確か無理。普通のISPじゃない。
megaのフラットのが実用性ありそうだ
「のが」って、最近の日本語はそんな風なのか。
>>954 いつの時代のお方で? 100歳くらい?
すっごい基本的な質問だと思うけれどすまん OC0AとOC0BとかOC1AとOC1BとペアのPWM出力があるけれど これらは独立して動作させることが可能なんだよな? OC0AとOC0Bはクロックは一緒だけれど、デューティ比はそれぞれ変えることができるよね?
>>956 あい。
OCR0A = 20;
OCR0B = 100;
って風に書けます。
>>957 ありがとう
ってことは今使ってるMega8は計5chのPWM出力を持つのか……
ADCから読み取った可変抵抗の値に応じてカラーLEDを制御する簡単なものを作ってるんだけどね
そろそろ次スレの頃か、日本語データシートの部分は削除しないといけないな
カンパでもあればしたのに、惜しかった
4月馬鹿から2ヶ月か。 PDFが一部でも残ってたら3万/月の使用料だぞ。 皆しっかり消したか? 漏れは元からつかってなかったが・・・
>>962 CHMはあるけどPDFは全部消えてるじゃん
あの様子じゃ社会でまともに仕事出来てないじゃ
一般的には社会にまともな仕事来てない状態だけどねw
どっかの現品comと似たようなものを感じる
あの見にくさは異常w
日頃からオフラインでの処理に慣れてるヤツなら全部保存してそうだな
大豆粉末 10g程度 単価¥10,000 リチウム電池添加剤少量おまけ きな粉を1万円で売るなよo(`ω´*)oプンスカプンスカ!!
日本語訳データシートのAtmelロゴのあの妙な紫色は何の意図だったんだろう・・・? 前に読んだ時にあれがやけに気になった。
技術者なりにセンスのいいアレンジ、と思い込んでたんじゃないかな。 しかし、時間をかけてマニュアルを作成して、一部のツッコミ好きな人間以外には 感謝されてたのに、ちょっと突っ込まれたからって全部を無駄にしちゃうってアホだよな。 仮に公開され続けて、無償じゃシンドイので買い物したい人はここからどうぞ、 とでも書いてアマゾンのリンクでも張ってくれたら、喜んで還元してあげたのに。 こういうふうに、すぐピキる人って損するね。
>20年近くに渡って技術情報の提供を行ってきましたが とか、CP/M-80の資料があるとかかなりの年齢なのかな。 定年退職だったりして。
まぁ アトメルジャパン と マイクロチップ テクノロジー ジャパン を検索してみれば、アレだな
>>975 マイクロチップ テクノロジー ジャパン検索結果の右側を見て盛大に吹いたわ。
977 :
774ワット発電中さん :2010/06/24(木) 12:49:09 ID:8btkIUyG
誰か適当にPWM制御でモータを動かすプログラム作ってくれ データシートが読めなくて泣きそうだ。 maga8です。
いまさらmega8ってArduinoじゃないの? 解説とかあるんじゃないの
980 :
291 :2010/06/24(木) 16:03:10 ID:NWnGaFIm
>>977 そもそも君はモーターにどういうパルスを送ったら回転するか解ってるの?
>>981 学校の宿題ですから、ドライブ部分は知る必要がありません
PWMで三相モーターを動かすと聞いて
制御というほどのものか? 鈍らせてブリッジに突っ込んで終わりジャン。
アラゴの円盤ならブン回した事がある プログラムはやドライブ回路は簡単なもんだけど、 電磁石部分が難しかった、全然パワー出ねえ
986 :
774ワット発電中さん :2010/06/24(木) 22:05:35 ID:eQBeOuuj
>>987 それは、対象の性質や対象回路も何も
質問者は書いてないのだから
回答者の思うがまま想像にまかせるべきだろう?
正転&逆転できる様Hブリッジかも知れん。
まぁ宿題スレいけやという回答もなんだしなww
オレの中では「制御」っていうのは例えば一定回転数:2000RPMを外乱が入ってもキープするという 定速度制御のことなので、回転数をタコメータで計測してフィードバックしてモータに流す電流を 決めてMega8のPWMでMOSFETに流すという感じなので、PWMが1系統だけあればいいという感じ なんだが、違うんだったら違うんだろうなぁ。
ただPWM波形を自動で出力するだけなら、PWMモードに設定して 出力ピンから信号を取ればよい。
>>977 while(1){
ポートH
for(i=0;i<N1;i++)nop;
ポートL
for(i=0;i<N2;i++)nop;
}
レパートリーに AVR を追加しようと購入寸前だったんだが、 ヒューズビットのめんどさと某氏の発狂で一気にハードルが上がってしまった。
>ヒューズビットのめんどさ どこがめんどくさいのか意味が分からん
めんどくさい人にはマイコンのプログラムには向かないような。
凝った事しないなら、クロックの部分しかさわる所無いような
>ヒューズビットのめんどさ 純正品のライターじゃなく、PonyProgとかでやると確かに面倒だった記憶が・・・
いやさ、変に書き換えて動かなくなったとかちらほらあるじゃない。 たとえば 78K だったら、うっかりオプションバイト書き換えてオンチップ デバッグ機能を無効にしてしまったりしても、すぐに元に戻せるし。 AVR Dragon だったら書き換えられるのかな? あと、やっぱり勝手のわからないデバイスのデータシートが英語ってのは 正直めんどい。翻訳してくれてる人もいるみたいだけど。 DIP パッケージがあったり、手ごろな USB 機能があったりと惹かれるものは あるんだけどねー。
うっかりって、そういう頻度で起こらないからそもそも考えたことすら無かったが。 俺も書き間違えたことはあるけど
リセット端子をポートに設定するとか危険な変更は警告が出た覚えがあるから、 うっかりってのは無かった気がするけど?
AVR Dude使ってるのでヒューズビットはある程度同意。 データシート見ながらHEXで設定しなきゃいかんし、間違えると一発アウト。 データシートの方は理解できんな。マイコン使うの初めてじゃないなら英語でも 必要なところは読めると思うけど。
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。