_____
/ /|
/ ( ゚∀゚) /.∠フ 個人でも手軽に使える
/ /.∠フ || . Atmelの8-bit RISCマイクロプロセッサを
/ __ o/.∠フ || 中心に語るスレッドです。
∠| ̄ ̄凵 ̄ ̄|∠フ || *AAは「AVR H8 etc. マイコン総合スレ Part3」からいただきました。
.|| |_____|/||
Atmel AVR 8-Bit RISC
http://www.atmel.com/products/avr/
とりあえず立てた。なんかあったら補足よろ
必死 ID 超乙と 78K 使いの俺が言ってみる。
そういや、話題になること少ないけどAVR32もこの板だよね?
前スレ999>> youtubeみた、結構いいね。 Mega88で作れれば流行るかもね、メモリ厳しいからストレージ無しで無理そうだけど。 いっそMega88を2個でどうにかなるならそれはそれで安上がりかもしれず。
すげぇなあ。 関連動画見たらカラーのスーパーマリオまで
どうでもいい話なんですけど、 AVRSTUDIOを最大化しても画面一杯に表示されないんだけど(上が開くの) おれだけかい?
前スレで、Mega88/48が保守品種になってるってか 製品ページにはMega88P/48Pも無くてMega88PA/48PAだけになってるけど、 Mega168はAtmelの製品ページから消えてないんだね。 よってMega88のデータシートはMega168から辿れるRev.Pが最終か。 もっともRev.PのデータシートにはNot Recommandって書いてあるから 168Pへの移行は前提の様だけれども。 で、168PになってROM32K/RAM2Kの328Pが追加されてるのね。
上位互換な製品が出てるなら別に廃止になってもいいよ
328の値段で秋月の128が買えそうな予感。
>>13 これってVideo端子はコンポジット(黄色い奴)が出ているの?
AVR日本語マニュアルどこかな。。。 404\(^o^)/
mega328(dip28) digi-keyで最低500個単位かぁ orz
ま、20MHzくらい昔のシリーズでもオーバークロックで行けるからいいか。
>>15 そうです、黄色のやつです。
ブレッドボードで組んでお試し下さい。
みんなどれくらいのオーバークロックは平気だった?
mega88だが、手持ちのクリスタルでは28.636MHzが最高だった これ以上だと、動くには動くが、自動的に分周がはたらくようだ
どこかにAVRを使ったスペアナの作例はないですか? フーリエ変換がAVRでできるでしょうか?
周波数を掛けるレンジにもよると思うけどRAMが欲しいよね。 周期512stepとしても6KBくらいワークが必要かも。
ATmega128と変換基盤買ってきたんだけど、なにこれ人の手で半田付けできるの?
>>23 QFP?MLF?
MLFでもコツがわかればできなくはないけど手半田ならQFPがオススメ
QFP solderingをyoutubeで検索するといくつか見られるよ
ビデオ見ると拡大されてるから「これならできるかも!」と勢いづいて 机に向かうのだが、実物を見るとショボーンとなる俺。0.65と0.5はマジで 壁が高い。
ATmega128のQFPならたしか0.8mmピッチですよ。
28 :
774ワット発電中さん :2009/04/19(日) 19:36:04 ID:17OJwkwS
QFPのハンダ付け 小さな紙をV字型に折って隣と隔離して0.2mmUEWでハンダ付け。
0.25mmピッチまでならできるなぁ
ありがとう。買ってきたのはQFPの0.8mmのやつです。 まさかと思ったがやっぱり手で半田付けするのね。ユニバーサル基盤でもいっぱい いっぱいなのにハードル高いぜ… とりあえずまた今度細い半田ごて買ってくることにします
>>29 ここで知らないヤツはいないんじゃないか?
>>32 いい資料d
こういう風にちゃんと書いてある資料が欲しかった
avr-gccでプログラムからリセットをかけることはできますか? exit(0)だとプログラムは停止したのですが、リブートしません。 reset()という関数がないかなぁとおもうのですが。
どうしてもATmega328欲しかったんで、 "スイッチサイエンス" (尼に出店してた店)に注文してみた。とりあえず10個。 料金後払いのようだけど大丈夫かしらん。
>>35 完全にソフトウェアのみっていうとwatchdogを使ってリセットさせるぐらいしか思いつかないなぁ・・・
アセンブラでリセットベクトルにジャンプすれば?
>>39 それじゃ意味ないっしょ。単にプログラムが最初から実行されるだけで、
ポートやレジスタの状態がリセット時とは異なるわけだから・・・
>>38 やっぱりwatchdogを使うしかないのか・・・この方法だと、最短でも15msの
タイムラグが出ちゃうんだよなぁ。インストラクション実行後1クロック以内で
リセットとか言うと、外部に細工をするしかないんだよねぇ。
WDTが正解ぽいけど、状態については全状態の明示初期化コードを スタートアップに書いとけばなんとかならん?
>>41 それだと、全レジスタ一つづつ書き込んでいかなければ成らないので、
1. 数十インストラクションかかる(おそらく100クロック以上必要)
2. リセットと違い一斉に状態が変わるわけではない
などの理由により、リセットと等価というわけには行かないと思う。
43 :
35 :2009/04/19(日) 23:18:49 ID:zbUyx5Df
なるほど。WDTですね。ありがとうございます。
別の話題ですが、tiny2313が秋月で100円なので下手なICより安いです。
IOを増やすためのシフトレジスタとかRTC
http://akizukidenshi.com/catalog/g/gI-00233/ なんかは2313で作ったら安上がりかと思いました。
他にも2313をつかって「クローン」を作れる部品があるのではないかと思うのですが、
どうでしょうか。
なんていっている私はシフトレジスタもRTCも使ったことはありません。
2313にADCがついていたら最強なんだが まあMega88も250円だからそっち買えばいいんだけど
>>42 使うレジスタだけでいいという割り切りでもいいと思う。
レジスタの規定値が全て不定であるという前提でプログラムすればいい。
ってのはだめかな?それでは困るケースってどんなのがある?
>>46 一番困るのが、ポートの状態かな?リセット直後は全ポートが
一斉に入力・ハイインピーダンスになることが保障されている。
まぁ、こういうことで誤動作しないように、良く考えて外部回路を
作れば良いんだとは思うけど。
>>43 さすがにシフトレジスタは100円以下でAVRでシミュレートするより性能がいいのが買えると思うが。
複雑なものならCPLDなど?
>>42 WDTよりは早いと思ふ。
拘るならPort出力で外部Resetかければ委員じゃね?
>R-2Rラダーを利用したVer.1、DAC ICを利用したVer.2は公開を終了しました。 www
AD変換とかカウント/タイマとかで使うI/Oレジスタとその各ビットの意味をまとめてくれている サイトってない? 自分でまとめようかと思ったけどできるなら楽したい
日本語訳データシートのそのページだけ切り取ったら?
そうしようと思ってたんだけどそれが面倒なんだよね
56 :
36 :2009/04/22(水) 05:38:14 ID:5vSAmTQj
Mega328届いた。 焼いても動かないので不良かと思ったら、ヒューズがbootになってた。 Arduinoのチップ交換用としての販売だからIPLが入っていたのか。
チップの裏に英文字のリビジョンコードあるはずですが いくつでしたか?
58 :
36 :2009/04/22(水) 08:06:47 ID:5vSAmTQj
裏?刻印でいいのかい? シールじゃないけど。 8H3921 35450B 1-P0908 e3 でした。 ひょっとして、最近のチップは工場出荷からIPL仕込んでたりしますか。
>>36 ,58
>ATmega328Pに、Arduino 0013に付属するATmega328P用のブートローダを書き込んでお渡しします。
とサイトの商品説明にしっかりと書いてある
で、Mega328で何作るの? Mega328でないと作れないものって何?
>>58 >35450B
て書いているということはrev.Bですね。
データシートにこういう記述があって
>1.不安定な32kHz発振器 (328P-A/B)
32kHz発振器はシステム クロックとして動作しません。
>非同期タイマとして使用される32kHz発振器は不正確です。
>対策/対処
>ありません。
とあったので気になってました。
62 :
58 :2009/04/22(水) 18:59:05 ID:5vSAmTQj
>>59 今見たら確かに書いてあったね、詳細ページの方に、
俺は詳細ページに行かずに購入したので知りませんでした。
>>60 AVGAのようなものですね、PIC24でやれってか?
テレビ出力使うのは、 あと2年でテレビがデジタル化するとただのガラクタになるから どうも作る気が起きない
>>63 アナログチューナーがなくなってもアナログビデオ入力は機器がある以上当分存続すると思うよ。
AVRとは別電源から電源とってるセンサーからの信号をAD変換するときの配線が分からないです。 センサーへの電源は別電源から、センサーからの出力はAVRのADCピンへ、センサーのグランド は別電源のグランドへ接続ってやっても出鱈目な数値がでちゃうからこれじゃいけないんですよね?
AVRとセンサのGNDも接続されてないのですか? 絶縁されている必要があるならフォトカプラみたいなものを使って接続でしょうかね。
ありがとうございます。やっぱりAVR側の電源のグランドとセンサー側の電源の グランドを繋げないと駄目なんですね。
波形が鈍って良いなら、コンデンサ直列。
センサー側のグラウンドとマイコン側のグラウンドの電位差が大きくならないことを 保証できるなら差動入力
どのように超音波センサーを接続したか書かないとだれもわからないと思いますよ。
>>71 BTE069 USS3 のことですか?>超音波センサ
このセンサ半二重通信で使うものみたいなので、これをもしもUARTにつなぐなら
同じくUARTを使うブートローダー経由ライタとは競合するんじゃないの?
>>74 ありゃ、信号はこんなものなのか・・・入力ピンもPB6なのね。
>>73 は忘れてくれ。
ベステクのボードなら通常はブートローダーによる書き込みか・・・
ブートローダー利用でUART書き込みしてる?それともISPライタで書き込みしてる?
もし後者なら、mega32のPB6はMISOと共用みたいなので、なんか変な動作しているんじゃない?
AVRからの出力をセンサーユニットが捉えて、アンサーパルスを出してぐちゃぐちゃにしてるとか。
AVR-Wiki死にっぱなし?
保存しました!ありがとうございます。
タイマーって1クロックごとにカウント1足していくんだよね? 例えば分周無しでこのプログラムを実行したとき、タイマーをかけたときはタイマー のカウントをインクリメントするのに1クロック使われて、iが増えていく速度はタイマー かけていないときより遅くなるの? あと、タイマー割り込みのところの処理をしている間もタイマーのカウントは増えてる? タイマー割り込み{ 何か処理; } main(){ int i=0; タイマーをかけるorかけない; while(1)i++; }
気にしたこと無いなぁ。 AVR Studioで試せば一発で判るけど。
タイマは、ALUとは別にHWでカウンタがインクリメントされる。 んで、一致やオーバーフローで割込みが発生したりしなかったり。 だから内部クロックだけじゃなくて外部をクロック源にできるタイマもあるし、 PWM動作時は、CPU負荷無しにポートをパタパタできる。 でないと、なんの役にも立たないw
>>79 タイマーはプログラムと関係なく別ハードでカウントしてるから、iの速さは同じ
割り込み処理中でもタイマーは勝手に進む
結論
割り込み処理中に次の割り込みが発生(割り込み禁止になってる)しない限り、
割り込み間隔は一定。
ただし、割り込み発生時に実行している命令が複数クロックかかる奴なら、
その命令が終わってから割り込みが発生するから、
1クロックでもずれると困る時は工夫が必要
ありがとうございます。もう一つだけいいでしょうか タイマーの割り込みに限らず ○○割り込み{何か処理;(←複数の処理、1+2;1+3;1+4;と何個か続けて処理ある)} で、「何か処理」中に他の又は、同じ割り込みが発生した場合ってどうなるんですか? 思い浮かんだ処理はこの4つなんですがどれになりますか? 1,「何か処理」が終わってから次に起きた割り込みの処理がされる。 2, 割り込み処理中に起きた割り込みは無視される。 3,「何か処理」は途中で強制的に終了されて後で起きた割り込みの処理の方をする 4,「何か処理」は一旦中断されて、先に後で起きた割り込み処理を終えてからまた途中の戻って処理される。
>>83 基本は1。
割り込みは専用のレジスタにフラグがあって、「フラグが有効」かつ「割り込みが許可」されてると発生する
割り込み処理中は、自分で解除しない限り割り込み禁止だから、
他の割り込みは発生しない(「割り込みフラグ」は処理中にも有効になる)
割り込み処理からリターンすると割り込みが許可されるから、
その時点でフラグが有効ならすぐ次の割り込みが発生する。
割り込み処理が時間がかかるなら、
自分で割り込み許可にして別の割り込みを処理することもある。
その場合は別の割り込み処理が終われば、元の割り込み処理の続きに帰ってくる。
ただし、割り込み処理中に許可して同じ割り込みが来たり、
いくつも他の割り込みが重なるとメモリを食いつぶして暴走するから
きっちり設計しないとはまる。なので初心者はやめた方がいい
ありがとうございます。今まで疑問に思ってたことが解決してスッキリしました AVRってほんとよくできてますね
>>79 タイマーを使うというのは日常のクッキングタイマーと同じ。
1,2,3,・・・と数えながら作業するのと、タイマーセットして作業に専念してアラームが鳴ったら割り込み処理をするのとの違い。
仕事しながら秒数数えるのはなかなか面倒。
それに対して、セットさえちゃんとすれば、処理の内容にかかわらずクッキングタイマーはちゃんと進む。
それがタイマーのメリット。
タイマーのアラームがちゃんと聞こえる(割込がかかる)ようにするのもお忘れ無く。
>>83 追加すると、割込には優先順位が定められている。データシート参照。
割込フラグが立ち上がった順番ではなく、割込種別の優先順位に従って処理される。
たとえば、タイマ割込の処理中に先にピン変化割込がかかり、その後に外部割り込みがかかった場合、
AVRはタイマ割込処理を抜けた時点ではじめて割込がかかったことを認識するので、
先にどちらが割込かかったかは認識せず、割込の優先順位に従ってまず外部割り込みを処理する。
外部割り込みが終わった時点でピン変化割込がかかる。
ホワイトノイズを発生させたいのですが、 擬似乱数のアルゴリズムでAVRに乗せられるぐらいの簡単なものを教えてください
WinAVRに入ってるよ、ファイルを調べてみるとすぐ出てくる。 ほかのソフト使ってるなら判らないけど。
>>87 もしも音源としてのホワイトノイズ?なら、PCMデータを一定量読み込んでおいてその繰り返しではだめ?
M系列でググれ。
92 :
74 :2009/04/25(土) 22:18:59 ID:ET3w9fga
>>75 ブートローダ利用なので多分違いますね
↑の回路の電圧図ってみたら超音波センサへだすシグナルに5V必要なのに4Vすらでてなかった・・・
こういう場合はオペアンプで増幅すれば大丈夫ですかね?
93 :
74 :2009/04/25(土) 22:21:51 ID:ET3w9fga
電池が切れ掛かってんじゃない。
・7805の電流容量が足りない。(多分ない) ・7805の接続を間違ってる。 ・マイコンのポートが出力になってない。 ・センサのGNDかVccにシグナル入れてる。 この辺じゃなかろうか。
すみませんが、教えていただけますか? 秋月で買ったMega128なのですが、はじめの一回だけ書き込めて、そのあとは「ピコン」 というあの音とともに認識されなくなり書き込みができなくなりました。 使用している物はavr-isp mk2 avrstudio4 です。 なにかヒューズの設定が間違ったのでしょうか? また、このavrを書き込めるようにすることはできますか? よろしくお願いします。
多分リセットピンが無効になってる。 あきらめてもう1個買いな
端子よくまちがえなかったね おれの場合はしばらく動かんかった
mega128はリセット無効にできないよ。 たぶんクロックの設定が変になってる。 …諦めて棄てろ。
100 :
74 :2009/04/26(日) 10:37:50 ID:ansHWGpf
>>95 シグナルポートの電圧測ったので下二つはないかと
センサとかマイコンとか接続しなければレギュレータから5Vの電圧がでてるんですけど
接続するとどんどん電圧が落ちるのは正常ですか?
103 :
74 :2009/04/26(日) 10:58:16 ID:ansHWGpf
>>101 となると原因はレギュレータか配線ですかね
ありがとうございました
>>103 消費電流とかレギュレータの仕様とかチェックしましたか?
あとテスタじゃわかりづらいですが発振とかも。
俺なら買わない。 入門書という位置づけなら、ピンの入出力、タイマ、ADコンバータ、シリアル通信などの AVRの個別機能を章ごと単独で取り上げ、余計な解説をせず、その機能に的を絞った解説と作例を出すべき。 ところがこれを見ると、液晶やAVR以外のチップもふんだんに使っていて AVRの入門というより応用例になってしまっている。これは基礎を習得した後に取り組むべきこと。 しかしAVRの本自体少ないから初心者はわけもわからず買ってしまうんだろう。
ちなみに応用例ならネットにいくらでも情報があるので なおさら買う必要はない
>97>98>99 ありがとうございます。 やはりヒューズの設定が間違ったのでしょうか? あきらめてもう一個買います。 でも、またやっちゃいそうで怖いです。 一般的にどんなヒューズビットの設定にすればいいのでしょうか? mega128には103互換モードとか在るみたいですが、そこにチェックが入っていると まずいのでしょうか?(書き込みできなくなる?)
>>102 これからAVR始めてみようと思うからなのか、何故この本を買うかによる
>>107 クロック設定ミスった時SCKを超低いクロックにして
書き込みしたらなんとかできたことがある
(AVRSPで-d200くらいに設定してやった)
>>107 >mega128には103互換モードとか在るみたいですが、そこにチェックが入っているとまずいのでしょうか?
工場出荷時設定は互換モードだったように思います。
また一回目焼けたそうでしが、Mega128ってMISO・MOSIでなくってシリアル端子使って焼くんだよね。
漏れは気づかずに苦しんだんだけど、ハマりませんでしたか?
>>110 >Mega128ってMISO・MOSIでなくってシリアル端子使って焼くんだよね。
それは最初からブートローダーを書き込まれている製品に限る。
>>111 データシートのメモリプログラミングの直列プログラミング見てごらん。
mega128はなぜかSCKはPB1だがMOSIとMISOはPB2とPB3には繋がずシリアルのあるPE0とPE1に繋ぐようになってる、AVRスレではよく出る話。
俺もUSBaspで書き換えして確認済み。
以下データシートからの抜粋
直列プログラミング用ピン配置
SPIプログラミング インターフェースがSPI I/O部を流用すると言え、1つの重要な違い、SPI I/O部でPB2とPB3に配置されるMOSI/MISOピンがこのプログラミングインターフェースで使用されないことがあります。
代わりに表127.で示されるようにPE0とPE1がSPIプログラミング動作のデータに使用されます。
>>112 直列プログラミングって何のことかと思ったw
マルチスレッドみたいな高度なプログラミング手法かとオモタ
>>112 それは知ってたが、ISPもSPIでの通信なので、ISP用のMISO/MOSIと言ってると考えていた。
シリアル端子使って焼く≠シリアル通信で焼く ってことか、了解。
デモ紛らわしいからPE0/PE1と言ってくれ〜
>107 Mega128に書き込みたくてハァハァしてるのは判る。まぁ落ち着きましょう。 いきなり書き込むんじゃなく、まずデバイス選択。 MainタブでATmega128を選んでRead Signature釦。matches(照合)ならOK 次にFusesの読み出し。工場出荷の設定か確認する。 103互換モードにチェックが入っていると103動作になるけど書き込みはできるよ。 (バグやちょっとした設定間違いと書き込み動作が成功するかは別問題) 「ピコン」音はISP Mode Errorのこと? 一回も書けてない気がする。 AVR-ISP mk2にUSBをつなぐときの「ピポン」外すときの「プポン」とは違うよね。
>110>111>112 ispの端子はPE0 PE1 にどこかに書いてあったので、そこに接続してあります。 (ここはどこかで見たのでそうしました。あぶねぇ〜) >116 新しい128をハンダ付けしたら設定の確認をしてみます。 「ピコン」音はISP Mode Errorです。だとすると一回も書けていないのでしょうか? (下の方のプログレスバー?(青いやつ)が2回ぐらい伸びたように見えたのは 気のせいでしょうか?)
>>109 一応低い周波数でも書き込みを試しましたが「ピコン」で書き込みできませんでした。
orz
>>116 ちなみに秋月で買ったmega128です。
(2313ぐらいしか使ったこと無いので、、いろいろwebを検索しましたがあまり
わかりませんでした。お手数をおかけしまして申し訳ありません)
120 :
116 :2009/04/27(月) 02:02:00 ID:dOnhzhkq
>>119 2313は使ったことあるのね。いきなりMega128かと思った。
電源異常は「ポン」でそれ以外は全部「ピコン」になるから
xxx..FAILED!とかの異常メッセージを書いてくれないと返事できないっス。
俺はMega64でポートAが出荷設定でJ-TAGデバッグに なっていて、PORTAが全く動かずに焦ったことがある。
むかーし秋月で購入したまま、どっかいってたTiny26が大量に(50個ぐらい)出てきました・・・ どなたかコイツの利用法考えてくらはい・・・
50個とは多いな、リモコンのコピーを作ったりニッケル水素の充電器作ったりしてみては? または無意味に乱数でPWMでLEDぽわぽわ。
そりゃもちろんライターを・・・ ライターを50個作って、チェーン接続。最初に一個に書き込むと次々に隣のライターへ書き込み。 自己増殖型ライターとか・・・ ライターのファームしか書き込めないのが玉に傷
>>124 最後のライターが最初のライターに書き込むように接続してやって、無限ループの完成ですね。
ライターでウェーブかよw ライターはともかく、隣に影響を与えたり与えられたりするものを多数作って放り投げて見るのが面白いかな。 隣(複数)のLEDピコピコを捉えて、それを何らかの関数や遅延に通して自らの発光に反映する、 単純な処理が全体では面白い動きになる、とか。電子ホタルみたいなもんだな。 1つのAVRでポート数だけ(12個くらい)のホタルをシミュレートすると面白いかも。 となりのLEDの状態を察知するのは意外と難しいだろうから、この情報は有線でもいい。
ウェーブ自体がこれの単純な形だな。
>>122 せっかく高速PWMが乗ってるんだからそれを生かしたいな
・・・何にといわれても思いつかないんだがw
定番FAN制御
ガイガーカウンター作ってみるのもいいな、もちろんGM管ではなく代用品で。
>>122 オーケストラ組んでくれ、シリアルで通信ではなく
指揮棒を検知して自分のパートを演奏するように。
>>132 す、すげ・・・・
でもこれは他から決められた動きを受信しているだけだからちょっと違うなあ。
あくまで単純な個別自律プログラムから、想像もしない全体の動きが出るようなものが見たい。
デモが暴動へと発展しやがて革命に至るのですね、わかります。
>>133 ライフゲームとか人工生命の発展みたいなものかな?
AVのRevolution
カウンターの数値を分周計算するのマジ面倒です。 だれか希望の秒数とクロック数いれたらパッと設定する閾値と分周だしてくれるソフト作ってくれ
>>138 CTCか何かか?
んなもんExcelでちゃっちゃとやっちゃえよ。
データシートのUBRR値の表みたいな感じで、
分周数別に、とカウント値と誤差を表示するようなシートを作ればいいだろ。
間違えた。数値と分周を計算するの だった
>>139 Excelの使い方わからないです。
>>140 早速インストールしてみたけどこの使い方もわからないです。
とりあえずExcelの関数調べてくる
>>141 ・・・・たとえば、
B2=クロック周波数(MHz単位)を入れる
B3=希望の秒数(μ秒単位)を入れる
B4="分周数" D4="カウント数" E4="誤差%"
B5=1 C5=$B$3*$B$2/B5 D5=int(C5+0.5) E5=(D5-C5)/C5*100
B6=8 C6=$B$3*$B$2/B6 D6=int(C6+0.5) E6=(D6-C6)/C6*100
B7=64 C7=$B$3*$B$2/B7 D7=int(C7+0.5) E7=(D7-C7)/C7*100
B8=256 C8=$B$3*$B$2/B8 D8=int(C8+0.5) E8=(D8-C8)/C8*100
B9=1024 C9=$B$3*$B$2/B9 D9=int(C9+0.5) E9=(D9-C9)/C9*100
これで、カウント数が範囲内(8itタイマなら255、16bitタイマなら65535)に収まる中で誤差が小さいのを選べばいい。
MEGA644に水晶発信器をつけようと思ってるんですが、 (発信子じゃないよ) この場合のヒューズビットの設定は外部クロック信号の 場合を参照すればいいんでしょうか? 低電力発信器とか全振幅発信器とかいろいろあるけど 違いがワカリマセン。 書き込みにはシリアルでAVRSP使ってるんですが、 そもそも4bitあるckselが3bitしか見えないし・・・
盗聴器でも作るんですね
>>142 なんて親切な。ありがとうございます
Excelって凄いな。今まで何か計算しようと思うとC++でその計算用のプログラム一々書いて
数値だしてたけど、ちょっとExcel勉強してみる
せっかくOffice持ってるのに今までワードしかまともに使ってなかった
OpenOfficeでもええやんか。
>>149 youtubeの投稿者のとこじゃないのか?
>>120 >>121 Mega128付け替えたら認識しました。ヒューズビットも読めました。
M103
JTAGEN
SPIEN
にチェックが入っていて
BOOT FLASH SIZE=4096 WORD START ADDRESS=$F000
BROWN-OUT 2.7V
INT.RC OSC 1MHz,START-UP TIME 6CK+64ms
になっていました。
普通に(トーシロ)が使うにはどんな設定がいいのでしょうか?
電源は5Vでクロックは10Mhzのクリスタルです。
じゃあ俺ははんだ付けでもやるか・・・
んじゃ、俺は組み立てる係ね。
>>149 でも、こんな物に98$はねーよと思う。
Coming SoonのLED Barも高いんだろうな。
>>151 Mega103互換とJTAGは切る。
SPIENは切るなよ!絶対に切るなよ!!(ww
Mega128は出荷設定でMega103互換モードになっているので
M103を切らないとMega128として使えない。
>>147 綺麗で欲しいけど、実際にはぶん回してる騒音がどれくらいあるかが気になる…
>>151 Mega103互換とJTAGは切る。
SPIENは切るなよ!絶対に切るなよ!!(ww
Mega128は出荷設定でMega103互換モードになっているので
M103を切らないとMega128として使えない。
>>147 綺麗で欲しいけど、実際にはぶん回してる騒音がどれくらいあるかが気になる…
>>143 MEGA644に水晶発振器のときは外部クロックでOK
低電力とか全振幅はセラロックや水晶用。素子や回路で少し特性を変えているだけ。
AVRSP -RF
Low: 11100000 CKSEL[3:0] システムクロック選択
ちゃんと4bitありました。
>>152 じゃ、おれソフト担当するわ。
リアルタイム弧変換も目処がついたし大丈夫です。
>>155 >>156 了解しました。
SPIENはきらないように気おつけます。
M103きりました。
で、どのLEDで作ります?
>>156 SPI経由でSPIENって切れたっけ?
>MEGA644に水晶発振器のときは外部クロックでOK どもー。 理解しました。 自分とこだと、 avrsp -rf すると low: -----000 って出るんすよね・・・ tiny2313だと low: 11100000 みたいに全部読めるんですけど。 もしかしてmega644設定可能にするには設定がいるんかな?
AVR StudioとWinAVRでCで書いたソースをアセンブラで出力する方法ってある?
WinAVR単体で出来る。
>>164 low: -----000 は不思議な表示だなぁ。
自分のはMega644P(P付き)だったけど違いがあるとは思えない。
ソースプログラムではマスクしてないからファイルの異常かな。
もう一度ダウンロードしてみるとか。
>>166 コンパイル後の.lssファイルにどうアセンブラに展開されたか書かれているのね
ループ文の中で1ループするのにどれだけ時間がかかるかは、これとアセンブラの
各命令実行時間を照らし合わせて計算していって、実行時間を求めればいいのか。面倒だな…
>>169 シュミレータには処理クロック数を表示してくれる機能まであるのか
そういえばAVRStudioのシュミレータ一度も使ったこと無かったや
シミュレータ??? シュミレータ???
SDにFATアクセスできるライブラリありませんか?
>>170 ブレークポイント間のストップウォッチ機能がある。
適切にクロックとか設定してれば時間はわかるよ。
正確に測るときは、シミュレータ起動→逆アセンブルでブレークポイント張れば良い。
外のスイッチが要るとかなら知らん。
>>171 シミュレータですね。分かっててもたまに間違えてしまう
>>173 詳しくありがとうございます。これは便利ですね
今までシミュレータってバグを見つけるものって認識しかなかった
うひゃぁ!1分差でかぶったwww
サーボモータの制御が上手くいかないんだけど、サーボってデューティー比 じゃなくてHiになってからLoに落ちるまでの時間を見てるの?
まずはフィードバック制御の基礎から始めよう。
スマソ。ラジコンサーボのことを言ってたのね。 入力パルスのHレベルの時間が位置指令になってる。 それを毎秒50回くらいの頻度で与えてやる。
角度は絶対時間で決まるね。 多分パルス間隔が短いんだと思う。
ありがとう。サーボモータは20ms毎に1回信号を与えてその信号のHiの長さで決まるんですね ということはPWMでサーボモータを制御する場合20msでカウンターリセットされるようにしないと いけないってことですか? でもそれだと20MHzで動かしてるAVRだとPWMでサーボ制御するためには8bitだとどう分周しても 無理だから16bitPWMでしか制御できない。ってことで合ってる?
>ソースプログラムではマスクしてないからファイルの異常かな。 気になったのでみてみました。 ちょうど自分のとこでCOMポートのアドレス 変更する為にコンパイルして使ってたので。 mega644は3bitマスクされてました・・・ ELMさんとこから拾った奴なんですけどね。 で、マスク外してコンパイルしたら無事読み書き出来るようになりました。 めでたし。
>>182 20MHzなら1/1024でも400カウントだから16bit必要だね。
どうしても16bitカウンタを別の用途に使いたくて、しかもピンがあまってるなら
ソフト的にクロック生成するって方法もあるけど。
気になるならタイマのクロック選択辺りを見れば書いてある
>>182 RCサーボの周期は正確な20mSでなくても大丈夫。大事なのはHパルス幅。
20MHz/1024/256=13.1mS周期なら動くRCサーボがあるかもしれない。
ただしHパルスが1mS〜2mSになるのが19〜39の20段階しかないので
9度ずつの荒い角度になってしまうよ。
ありがとうございます。とりあえず16bitPWMでサーボモータ一つ上手く制御できました。 そっか8bitだと動かす1段階ごとの角度も大きくなっちゃうね。 でもATMEGA168で16bitPWMだとサーボモータ2個しか制御できねぇ もっと複数個しかも細かく制御したいと思ったら、20msごとにタイマー割り込みかけて その割り込み処理でピンのHiLoしたほうがいいのかな。こりゃ大変だ
ソフト制御でも十部でしょう。 サーボなんてそんなに精度いらないし。
>>183 オレが落としたのはマスクされていないけどな。
分からないけど、もしかしてバージョンが古いんじゃね?
時計つくって〜
連休中やることなくて暇だから、 AVR使った作品で簡単につくれて面白そうなの紹介してくれ
バクマンか・・ ちょうど秋月で2313を箱買いしてあるし、作ってみるわ
>>195 あっちではランドがラインになってる基板をよく使うね。
使いやすいんだろうか?
へー、外国の基盤はこういうのなのか
以前トラ技で紹介あったね。配線ツールソフトもあるって。
>>196 部品面に線がはってあるし
ブレッドボードみたいな感じに接続するのかな。
部品面の線は印刷した紙だね。これならジャンパー間違いしない。 半田面は横パターン、部品面は縦パターンという常識的な配線っすね。 小型化が好きな日本人にとって基板のラインは邪魔だと思われ。
やっと思い出した。 ストリップボード(Stripboard)だ。
マイコン初心者で、AVRを使ってLEDチカチカさせてみました。 消灯時もLEDが暗く点灯していたのでそういうものだと思っていたら AVRのGNDピンの線をつなぐの忘れてました。 GND繋がなくても他のピンがGNDになって動くんですね。
>>202 それで動いたとは思わないほうがいい
明らかに設計外の使われ方
質問です あるレジスタが0のとき、dec命令を使うとFFになりますが、このときどんなフラグがセットされますか? あるいはセットされませんか?
ありがとうございました 符号なしの場合ゼロフラグ以外ダメなんですね
秋月に、tiny13Aが入ってた。 オプティマイズの詰め合わせに入っていたtiny13Vをなんとなく 使いまわしていたので、まぁうれしいんだけど tiny45とかのほうが正直よかった...
tiny13か。DIPなら要らん。
くれくれですみません。 VistaにAVRStudio4.16とWinAVR20090313をインストールして ネット上の簡単なプログラムをいくつかBuildしてみましたが、 下記のようなエラーメッセージがでてうまくいきません。 make: Makefile: No such file or directory make: *** No rule to make target `Makefile'. Stop. Build failed with 2 errors and 0 warnings... Configration Options の Include Directories やCustom Options の設定は確認した のですが、動いてくれません。 わかる方いらっしゃいましたら、よろしくお願いします。
>>209 単純にMakefileがないだけだろ。
209です。 解決しました。 Project の置き場所がMyDocument上ではダメみたいです。 c:\にしたら無事に動きました。お邪魔してすみませんでした。
pathが切れてないのか setで確認
漢字のディレクトリもダメだったような
VisualStudio以外の開発環境は何にしても パスに2バイト文字を含んだりスペース入ってると不都合が多いと思った方がいい。 Documents and Settings Program Files My Document デスクトップ こんなのは避けるが無難。
開発環境のデータは別ドライブに入れた方が良いね。
216 :
774ワット発電中さん :2009/05/04(月) 01:14:18 ID:2lNcrYk7
ブレッドボードは配線が貧弱になりやすいので、 CPUの電源には電解コンデンサー10uFくらいは入れた方がいい。 Mega88なら電源ピンが隣り合わせなので入れやすいと思う、 CPUのすぐ隣に刺してみてくれ、特に内蔵OSCの場合には コンデンサーは重要だ。
>>218 ADCを使わないならつながなくてもいいのでは?
>>217 少なくとも配線は合ってるよ
原因は何か別のところにありそう
>>219 シリアルプログラミングのページでも接続するような感じに説明されている
気がしますけど・・・
>>216 AVRISP mkIIのオレンジ点滅はリセット異常(たぶんGND状態)。
4つのLEDが光ったのは電源ピンをずらして配線、GND->保護ダイオードで点灯かな。
ATmega88Pが熱くなるのはたいてい電源+/−が逆と想像。
さっき弄り始めてポートD0をオンオフしてみたんだけど、 オフのとき完全に0Vにするにはどしたらいいのかな?
FETをかます
メカニカルリレーをかます
>>219 ADCを使用しない場合であってもAVccは接続すべし!と
データシートに明記されているわけだが・・・
ま、ADCを使わない場合は何も考えず、Vccに直接繋いでおけば問題ないけどね。
AVCC接続はESD対策だろjk
228 :
216 :2009/05/04(月) 21:28:56 ID:2lNcrYk7
アドバイスありがとうございます。 コンデンサー、AVcc他配線の+/−に気をつけて再度一から 組みなおしてみます。
229 :
774ワット発電中さん :2009/05/05(火) 07:59:50 ID:zAs4eyh1
avrasm2.exe ってソースファイル1本しか処理してくないですよね? 複数のアセンブリソースから1つのHEXファイルを作成することは 出来ないのでしょうか? AVR Studioのツール群にはリンカってないんですかね? 先達の方々教えて下さい。
230 :
774ワット発電中さん :2009/05/05(火) 08:29:22 ID:/89sVMed
atmega88で、きわめて簡単なLEDの点灯(点滅ではなく点灯)のプログラムを実行して しばらくほっとくとLEDが消えたり着いたりになってしまいます。 なんで動きが不安定なんでしょうか?!?! LEDとAVRの間は、330Ωの抵抗、電源はアダプターから3端子レギュレーターを通して5Vでやっています。 外部クロック20MHz
>>229 C/C++言語は分割コンパイルをサポートしている
Linker (Linkage Editor)が無いとRun-Time Library もくっつけられないと… (ry
>>231 言葉が足りませんでした。
アセンブリ言語で開発します。
複数のアセンブリソースで1本のHEXを得たい方法が分かりません。
どうしたらいいでしょうか?
りんかーリンカーLinkerで結合する。
>>229 Atmel AVR Assembler にはリンクという概念がなかです。
なので、アセンブル対象になるソースの適時位置に、別ソースをインクルードしかない。
ソース毎にオブジェクトを生成してリンクさせたいなら、WinAVRをインストールしておき、
AVRStudioで"AVR GCC"のプロジェクトをつくり、拡張子"s"のアセンブリソースを登録する。
実際、フラッシュメモリのアドレス指定とかバイト単位で出来るので、WinAVRのアセンブラのが使いやすいと思うよ。
>>234 なるほど。どうもありがとうございます。
AVR Studioの純正ツールチェインは
「リンクの概念がない」んですね。
それにしてもこの辺りはAtmelの考えが分かりませんね。
これじゃ、ツール関連はMPLABに負けてますよね。
ってか、サードパーティ任せなんでしょうかね。
先達の方々どうもありがとうございました。
以下、個人的感想ですが 確かに、開発環境というよりビルド設定等は、MPLABの方が一般的だと思います。 以前仕事でNECの78Kを使った事があるのですが、恐ろしく強力なデバック機能が整っていて、 78K開発環境の素晴らしくさに驚いた事があります。 開発環境でいうと 78K >>>> Pic >> AVR というイメージを私は持っていますが、チップ自体の性能は AVR >>>>>>>> Pic >> 78K というイメージを持っていて、8bitコントローラではAVRが最強ではと思っています。 開発環境も、AVR Studio に WinAVR を追加すればさほど不満は無くなります。 フルアセンブリのプロジェクトでも、AVR GCCのプロジェクトとして生成すれば 一般的なメイク手順で実行ファイルを得ることが出来ます。 アセンブリソースだと、エミュレータ上でソースコードレベルデバッグが出来ないのが不満ですが、 一応リスティングファイルにブレークポイントを設定できるので、使えなくは無いです。 何より、(ほぼ)1命令1クロックで動作するという AVR の強力さに惹かれています。 78Kの時は、処理能力が足りなくて、思うような生成物が作成できないということを経験しました。 AVRだったらと何度思ったことか。 開発環境は、慣れたり、他のツールを使用したりして強化できるのですが、 チップの性能は強化できませんので・・・
リンクの概念がないっていうけど、 一人で開発するなら別に問題ないのでは? 変数も全部グローバル変数でいいだろうし
>>230 レギュレータの入出力と88のVCCピンの直近に0.1uFを入れる。
と適当にエスパーしてみる。
>>236 Eclipse + WinAVRでやれば、少なくともPICをMPLABでやるよりは良いと思う。
AVR Studioはエディタがダメダメすぎるからイマイチ。
エディタはいろいろ試してみたけど 結局WinAVR付属のPN2に落ち着いた
AVR Studioのエディタには不満が1点。 ATOK使ってると日本語入力が見えない。 入力中の文字が、確定するまで画面に出ないのだ。大変不満だ。
MSIMEだと日本語は出てくるんだけど、なぜか日本語入力をオンにしてると 改行したときにカーソルが先頭に戻ってしまう オートインデントの設定があるんだろうか?
PN2、これ見て使ってみたけどやっぱり不満。 もともとVisual Studio使ってたせいか、 インテリセンスが効かない環境は辛いなー。
と言う事で諸君。 AVRライタを持っていないワシのために、 FT232Rを使わずにV-USBを使った1chip-AVRでUSBspiなライタを作ってくれたまえ。
chanさんのAVRSP使ったら? 数百円でできるし、簡単だよ。
AVRでFT232Rを使う事なんて滅多にないでしょ、tiny2313でUSB-シリアル作れるし。
似非USBは遅いから却下。
なんでUSBにこだわるの? RS-232Cついてないパソコンなのかな
DFU便利だよね。
同じモノを作ることしかできない人なんだよきっと。
>>235 Atmel純正ではないが、WinAVRでアセンブラを扱わせる方法ならできるようだ。
レガシーポート無しのPCなんてノートブックに限らず今どき普通。
いまやFDないどころかPS/2もないよね、ノートに至ってはDVDドライブも外付けだし。
>>248 同じ1chip-USBでHIDaspxがあるのは知っているんだが、
USBで汎用SPIブリッジが1chipで出来ると嬉しいのだ。
V-USBとAVR-SPの結合をしてFT2332Rを排除して欲しい。
速度的には、USB2.0-HUB使う方法もあるようだ。
去年から流行り出したAtomのPCはフルレガシーがむしろ普通。 自作じゃなくてメーカーPCでなら確かに全滅だな。ましてやノートPCはね。 ATX/MicroATXだとASUSはマザーボード内部にCOM付きってのが今も意外とある。 ご丁寧に例の青緑色で一目瞭然。自分はそれを引き出して使ってる。
>>257 それでPCIスロットに取り付けるシリアルポートのケーブルが店で売ってるともっといいんだけどね。
しかもパソコンの蓋開けたらメーカー保証外ですとか言われてしょんぼりしたことある。
電子工作やってるぐらいの人間なら、自作PCにしろよ ほしい機能を何でもつけられるぞ
>>259 初めてメーカーPCで買ってそれでしょんぼりして以来自作PCです。
しかしメーカーPCで蓋開けたりHDD交換したらメーカー保証外って言うメーカーって……。
>>261 PCIスロットにカバーしてて見た目いいね。
>>257 マザーからCOMを背面に引き出すブラケット、
カモンかYOKOかは忘れたけど、千石2号店で売ってたよ。
俺の使い方ではFT232あればほとんど済んじゃうって気づいたから、
この前組みなおした時、BIOSでCOMとLPT切ってレガシーフリーにしちゃった。
少し前までエクスプレスカードの拡張LPT使ってましたが FT2232のおかげでようやっと卒業できそうです
アキバのどっかにジャンクのグラボと、 そのグラボ用のブラケットを別々に売ってる店があった。 そのD-sub15Pの穴が開いたブラケットだけを50円とかで買って、 D-sub9Pつけてマザボから引き出してある。 店のおじさんには、 「これだけ買ってどうするのw」 と言われた。
88Pがつぎつぎと書き込み不可になる。
267 :
774ワット発電中さん :2009/05/07(木) 23:37:50 ID:EuZ7rSc5
AVRに初挑戦。 浮いている足がないように全部プルアップしようか・・ と思ってふと気がついたのがISPが使用している足はプルアップしても かまわないのか? さらには出力にしてしまってもISPは大丈夫なのか? そもそもISPはマイコンの動作中にどうやってプログラミング動作に入るのか? あまりにも初歩的ですが教えてください。
AVRにはすべてのIOピンにプルアップ抵抗が内蔵されている(20kΩ〜50kΩぐらい)
初心者ということなので、おそらく内蔵プルアップを知らないんだろう まずはデータシートを一通り読んで、どんな機能があるのかを確かめた方がいい でないとせっかく用意されている機能を知らないまま、外付けのデバイスに頼ることになる
271 :
267 :2009/05/08(金) 00:30:20 ID:97xjQsEO
説明不足ですみません。 プルアップはソフトで(内蔵プルアップ)の話です。 >269 ISPピンの処理について参考になりました。 ISPを挿したままで他の用途にも使うという際のノウハウですね。 ISP専用にそれらのピンを使うとしても入出力の方向設定とか 「ISPを使うぞ」という何らかの設定を行なう必要があるのでしょうか?
>>271 > ISP専用にそれらのピンを使うとしても入出力の方向設定とか
> 「ISPを使うぞ」という何らかの設定を行なう必要があるのでしょうか?
通常いらない。敢えて気にするならESD対策のためにHiZの入力にしとかない
ぐらいじゃないかな・・・
273 :
267 :2009/05/08(金) 00:43:21 ID:97xjQsEO
なるほど・・RESETがLOWに落ちている状態で通信するのですね。 おそらくリセットがかかるとIO端子が自動的にハイインピーダンスに切り替わる のかな。
274 :
267 :2009/05/08(金) 09:04:23 ID:/BY5VoqT
うまく動いた。 ちなみに入力でプルアップにしておきました。 しかし眠くて仕事にならんな・・ ISPを用いて動作中にマイコンとパソコンの間で通信することは できないのでしょうか? それができれば開発効率が非常に上がるのですが・・
ソフトウェアでMOSIにシリアル信号を送ればいい 受信はWindows付属のハイパーターミナルでおk
276 :
267 :2009/05/08(金) 12:38:45 ID:/BY5VoqT
>275 AVRISPmkIIでも可能なのですか?
>>274 >ISPを用いて動作中
ってのが何を意味するか分からないけど、
ISPケーブルでライタと接続中にと言う意味なら、問題なくできる。
ISP機構は転送時以外は切れる。
ISPケーブル・ライタ経由でマイコンと通信をしたいというならこれ。
http://elm-chan.org/works/avrx/report.html COMポート接続ライタは、ISPピンを使うソフトウェアシリアル通信プログラムをAVR側に書き込めば通信可能。
また、SPIブリッジはその名の通りSPI通信をAVRとの間で行うものなので、AVR側にSPI通信プログラムを
組み込めばライター経由でAVRと通信ができる。
当然だがどちらもAVR側に通信プログラムを書き込むことが前提。
AVRがプログラムなしでできるのはメモリプログラミングだけ。
278 :
267 :2009/05/08(金) 15:03:28 ID:/BY5VoqT
>COMポート接続ライタ USB接続のAVRISPmkIIはそれができないということでしょうか・・
>>278 少しは自分でググろうとか思わないのか?
>>278 やろうと思えばできるw
メモリプログラミングをシミュレートするプログラムを組み込む。
ISPからRESET線だけを切り離し、ライターを動作すると、
シリアルプログラミングじゃなく、内蔵プログラムが通信を担当するとか。
あ、単なる妄想だからな。
そういうことやりたければ
>>277 しましょう。
ISPでの通信にこだわらず、普通にUARTに別のUSBシリアルでもつないだ方がいいと思うけどな。
>>279 電気・電子系の偏差値は理工系最低ランクっすから
相手は落ちこぼれだっていう前提で話しないと駄目みたいよ
282 :
267 :2009/05/09(土) 06:10:45 ID:w+CUd5Zv
>ISPでの通信にこだわらず、普通にUARTに別のUSBシリアルでもつないだ方がいいと思うけどな。 とりあえずはそうします。 そのうちにライターは作りたいですね・・ やはり書き込みと動作中の通信がパソコンと一口でできるのは捨てがたい。
電気・電子系は他と違って人気無いから競争率低いって理由でアホなヤツばっかり来るよな。 だいたい9割くらいがそういう理由で入ってきてるし。
284 :
774ワット発電中さん :2009/05/10(日) 12:55:25 ID:zBp9OirX
WINAVRでコンパイルしようとして下記のa<=255の等号をなくせばきちんんとコンパイル されるが等号があるとlssファイルを見たところループ処理がまったく無くなる。 同様の現象を経験された方いませんか? #include <avr/io.h> int main(void) { unsigned char a=0; while(1){ for(a=0;a<=255;a++){ } } }
a=255でa++するとunsigned char の範囲を超えるでしょ。
286 :
284 :2009/05/10(日) 13:24:16 ID:zBp9OirX
>285 そ・・それで何の警告もなくおかしくなるのですか! オーバーフローで無限ループしているのならまだしもごっそり処理が無くなるとは。 まあ、慣れれば何の問題もないのでしょうが。 でも0〜255まで処理することは多くあるでしょう? while breakとか別の書き方をするかaをint型にするとかくらいしか思いうかびませんが その場合はどう書くのが効率が良いのでしょうか。
for(i=0;i<256;i++) { }
Cに拘るならshortにする。 Asmで良いならCフラグを使う。
289 :
284 :2009/05/10(日) 13:45:03 ID:zBp9OirX
>287 やはりだめです。 >288 そういうことですよね・・ 処理がなくなると思っていたのは最適化で消されたと解釈すべきなのでしょうか。
>>286 unsigned charでa<=255は常に成立するから省略されるのは仕方ないね。エラーじゃないし。
ただ、表現しようもない比較演算なのだから、Warningくらいは確かに欲しい。
余りスマートじゃないけど、
a=0; do {} while (a++ < 255);
このへんかな?
WinAVR使うと最適化レベルの意識も必要になるんじゃないかな。 >284の例は-sOになってないかい? 経験上これは、限界までガシガシ削ることを優先する最適化のようだ。 -s3にすると意図通りに動作するかも? 適当な予想だけど。
言葉間違えた。 -sO → -Os -s3 → -O3
>>284 a<=255は常時成立だから本当はwhile(1)と同じになって欲しいところだけどね
軽く妄想すると、
for(a=0;a<=255;a++)
がコンパイル時に
=>for(a=0;a<256;a++)
に変換されて、更に1バイト変数だから256がオーバーフローで0になって
=>for(a=0;a<0;a++)
となって、a<0は不成立に決まってるからこのループは実行されないと
いう判断で一気に削除ってしまったっていうあたりかねぇ。
Warningの一言くらいあっても良いだろうってとこかな。
>でも0〜255まで処理することは多くあるでしょう?
0〜255までフルにまわしたいなら上部脱出するforじゃなくて下部で脱出
するdo〜whileを使うのが常道だろうね。
for ループの中に何かあれば変わるんじゃね?
>>293 が正しければ、何があっても実行されないけど
>>293 >a<=255は常時成立だから本当はwhile(1)と同じになって欲しいところだけどね
その外側にwhile(1)ループがかかっているから、
while(1) { while(1); { } }; なら、while(1) {]; と同じじゃん?と最適化されたのだと思う。
>>295 while(1)と内側のforの間とかforの中身は
何もなし?(中略)なのかと思った。
空白だったならそうだね。
>>293 の説は変
for(a=0;true;a++)
{
}
を
for(a=0;false;a++)
{
}
に変換する訳ない。
致命的な欠陥過ぎる。
普通に295の説だと思うけどな。
avrってbool使えないの?エラーでやがる
>>298 avrwikiによると、
#include <stdbool.h>
らしい。
あちがとう使えた
>>298 avrがbool使えないんじゃなくて
C言語が標準では使えないだけ
Cだと、全部大文字でTRUE FALSE BOOL って書くと使えるはず
303 :
774ワット発電中さん :2009/05/11(月) 08:44:00 ID:xHl4o69R
>>296 空白じゃなくても同様でしょう。
以下をコンパイルすると分かる(-Os)
PORTD=0;
while(1) {
PORTD=1;
for (a=0;a<=255;a++) {
PORTD=2;
}
PORTD=3;
}
PORTD=4;
結果は、
68: 12 ba out 0x12, r1 ; PORTD=0;
6a: 81 e0 ldi r24, 0x01 ;
6c: 82 bb out 0x12, r24 ; PORTD=1;
6e: 82 e0 ldi r24, 0x02 ; 2
70: 82 bb out 0x12, r24 ; PORTD=2;
72: fe cf rjmp .-4 ; PORTD=2;を無限ループ
for (a=0;a<=255;a++) が無限ループ扱いなのが分かる。
それ 書き込み機
>304 WinAVRとはgccのAVR版のこと。 「AVR 開発」とかググるとよい。
ああ、wiki見て解決した。
Tiny13買って来た。
>>304 ニコ動行って電気屋さんのAVR講座見てきな。
サーボモータって製品によってパルスの秒数に対応する角度が違うみたいだけど、 どれもパルス幅と角度は比例すると思って大丈夫ですか? 例えば1ms→2msで90度回転したとすると+-0.01111…msで一度回転すると計算しておk?
>>311 実際には多少の非線形性をもつ。
と、トラ技2005年8月号に書いてある。
ありがとう 多少ずれてたりするのか。でも多少なら気にしなくても大丈夫だよね しかし一々何msのパルスで何度回転かとか調べるのメンドクセー。説明書にでも書いて同封 またはデータシートに書いててくれたらいいのに。サーボモータって結構なお値段なんだし
個体差もあるので、データシートに角度=xxmsなんて書けやしないよ。
>>313 そういうときは、デジタルサーボ使えば?
>>313 用途にもよるけど、ステッピングモーターという手もあるかも。
AVRと関係ない話は無視しろよ
なにいらついてるんだお前
関係なくはないだろう。AVRで制御するんだろうから。
サーボのバラツキはEE-PROMにオフセット量として記憶するとか。 >サーボモータって結構なお値段なんだし RCサーボはおもちゃ。工業用サーボモータだと5万以上するよ。 精度もその程度ってことで
>>313 厳密に角度制御したいならフォトセンサーとかで絶対位置を検出しないと無理。
ステッピングモーターでも相対位置でしか回転出来ないのでズレは出てくるね。
322 :
774ワット発電中さん :2009/05/15(金) 09:22:57 ID:Zx+gq1Dz
フォトセンサーにも色々あるだろうけど、絶対位置を検出するセンサーって何がある? 相対位置が問題じゃなくて、制御にフィードバックがないことが問題なんだよ。 ステッピングモータで脱調検出する方法もあるしな。
モータの回転位置ならポテンショメータとかよく使うんじゃない? しかしオープンループじゃないと、ステッピングモータ使う意義を感じられんなぁ。 ところで、ステッピングモータの相対位置指令から来るズレってどんなもの? パルス落ち?
>>323 ポテンショ使ったらRCサーボ同様に抵抗カーブのリニアリティ誤差とかついてまわるんじゃね?
まあ『厳密』というのがどこまで要求されるのかによって話は変わってくるんじゃないかと。 そもそものRCサーボだってサーボ機構を内蔵しているのがウリな訳ですし。
326 :
774ワット発電中さん :2009/05/15(金) 11:28:44 ID:svyDvHKP
>>323 >ステッピングモータの相対位置指令から来るズレ
単に、どこかで現在の絶対位置を確認しないとどこまでも相対位置で、
絶対位置を指し示すことができないという意味では?
想定外の周波数のパルス入れたり想定外のトルクかかったりしなければ、
基準位置さえはっきりすれば原理的には分解能以上はずれないよな。
エンコーダのプロの方、呼ばれていますよw
援交のプロが呼ばれていると聞いて飛んできました
329 :
774ワット発電中さん :2009/05/15(金) 12:36:46 ID:svyDvHKP
>>323 1. 初期位置が不明だと絶対角度がわからない
2. 脱調すると指示角度と実際の角度がずれる
Xmega、チップワンでなら買えそうだ でも10個でも1100円か 秋月が100個くらいの単価で売ってくれんかなー
332 :
774ワット発電中さん :2009/05/17(日) 18:11:40 ID:pUkvFuhD
ちょっと見てもらえませんか・・?シリアル通信用のリングバッファでハマリまくっています。 volatile で宣言しているリングバッファのインデックスの型を char にすると うまく動くのですが下のようにintにするとダメです。 1byte毎にパソコンから送っても時々バッファ長+1個分ドドッと送り返されます。 #include <avr/interrupt.h> #include <avr/io.h> #define SeriBuffLength 20 unsigned char SeriReceiveBuff0[SeriBuffLength];//受信データ保存バッファ volatile unsigned int SeriReceiveWI0=0;//受信データ保存インデックス volatile unsigned int SeriReceiveRI0=0;//受信データ読み出しインデックス unsigned char SeriTransmitBuff0[SeriBuffLength];//送信データ保存バッファ volatile unsigned int SeriTransmitWI0=0;//送信データ保存インデックス volatile unsigned int SeriTransmitRI0=0;//送信データ読み出しインデックス ISR(USART0_RX_vect )//受信完了割り込み { SeriReceiveBuff0[SeriReceiveWI0]=UDR0;//保存とインデックスインクリメント SeriReceiveWI0++; if(SeriReceiveWI0==SeriBuffLength){ SeriReceiveWI0=0; } } ISR(USART0_TX_vect )//送信完了割り込み { if(SeriTransmitRI0!=SeriTransmitWI0){//まだ送るものがあれば送る。 UDR0=SeriTransmitBuff0[SeriTransmitRI0]; SeriTransmitRI0++; if(SeriTransmitRI0==SeriBuffLength){ SeriTransmitRI0=0; } } }
333 :
774ワット発電中さん :2009/05/17(日) 18:12:38 ID:pUkvFuhD
長くてすみません。続きです。 int main(void) { unsigned char data=0; PORTA=0b11111111;//ポートAプルアップ PORTB=0b11111111;//ポートBプルアップ PORTC=0b11111111;//ポートCプルアップ PORTD=0b11111111;//ポートDプルアップ UBRR0=64;//システムクロック20MHZ時 19200 UCSR0B |=(1<<RXCIE0 | 1<<TXCIE0 | 1<<RXEN0 | 1<<TXEN0);//受信割り込み許可 送信完了割り込み許可 受信許可 送信許可 UCSR0C |=(1<<USBS0 | 1<<UCSZ01 | 1<<UCSZ00);//2ストップビット データ8ビット sei();//割り込み許可 while(1) { cli();//割り込み禁止 if(SeriReceiveRI0!=SeriReceiveWI0){ data=SeriReceiveBuff0[SeriReceiveRI0]; SeriReceiveRI0++; if(SeriReceiveRI0==SeriBuffLength){ SeriReceiveRI0=0; } if(SeriTransmitRI0==SeriTransmitWI0 && (UCSR0A & 1<<UDRE0)){//待ちデータと送信レジスタを確認 UDR0=data;//バッファに入れないですぐに出力 }else{ SeriTransmitBuff0[SeriTransmitWI0]=data; SeriTransmitWI0++; if(SeriTransmitWI0==SeriBuffLength){ SeriTransmitWI0=0; } } } sei();//割り込み許可 } }
334 :
金澤佳雅 :2009/05/17(日) 18:18:13 ID:SQpMLdxK
お陰様で テスターでへそオナニーできるようになりました
335 :
332 :2009/05/17(日) 18:25:50 ID:pUkvFuhD
どうも、送信には問題がなさそうで受信データの取り出しでコケてそうです。 受信割り込み回数は実際の回数と一致していています。 取り出しのところでSeriReceiveRI0が不思議な動きをしていておかしくなる時には例えば3〜19,0,1,2,3 というふうに一周します。 もっと解せないのがSeriReceiveWI0で、前回の値がどどどっと続いて途中で1つ増える・・ 要するに、まだ格納もしていないのにフライングで取り出しているかのような感じなのです。 何かアドバイスはありませんか? orz
なんかごちゃごちゃしてて良く解らんけど mainがそんな感じでリングバッファ使ってる意味あるの?
337 :
332 :2009/05/18(月) 06:58:45 ID:SbJIQsbW
もちろんこれでは意味がありません。実際には送信データセット関数と受信データ取得関数を使います。 void SeriTransmitSet0(unsigned char data){//送信データセット関数 unsigned char buff=0; buff=SREG;//割り込み許可の設定退避 cli();//割り込み禁止 if(SeriTransmitRI0==SeriTransmitWI0 && (UCSR0A & 1<<UDRE0)){//待ちデータと送信レジスタを確認 UDR0=data;//バッファに入れないですぐに出力 }else{ SeriTransmitBuff0[SeriTransmitWI0]=data; SeriTransmitWI0++; if(SeriTransmitWI0==SeriBuffLength)SeriTransmitWI0=0; } SREG=buff;//全割り込み許可の設定復帰 } char SeriReceiveGet0(unsigned char *data){//受信データ取得関数 char rt=0; unsigned char buff=0; buff=SREG;//割り込み許可の設定退避 cli();//割り込み禁止 if(SeriReceiveRI0!=SeriReceiveWI0){ *data=SeriReceiveBuff0[SeriReceiveRI0]; SeriReceiveRI0++; if(SeriReceiveRI0==SeriBuffLength)SeriReceiveRI0=0; rt=1;//データがある場合 }else{ rt=0;//データがない場合 } SREG=buff;//全割り込み許可の設定復帰 return(rt); }
いったんオールアセンブラで書いて、 動作(ロジック)を確認してからCへ移植しな
>>335 >例えば3〜19,0,1,2,3というふうに一周します。
これはどうやって確認したん?
ソース全部読んでないけど症状的に SeriReceiveRI0(かSeriReceiveWI0)が意図しないところで書き変わってる感じだね スタックがオーバーフローして変数領域にかかってるとかかなぁ
症状からいくとRIがWIを追い越してるはず。 個人的に、ほぼ全ての時間が割り込み禁止なのは気持ち悪い。 あとバッファサイズが2の階乗でないとか、intにする理由とかもよく解らん。
342 :
774ワット発電中さん :2009/05/18(月) 12:41:44 ID:kdYde0Up
>>333 バッファがちょうどフルになった時の処理がおかしいのでは。
たとえば受信バッファSeriReceiveRIO、SeriReceiveWIOが一致しないときだけdataをメインループで取り出し、
一致した場合は空だと見なして取り出さない用にしているが、実際にはバッファフルでも
SeriReceiveRI0!=SeriReceiveWI0がFalseになり、データは取り出されずバッファ溢れする。
送信バッファについては、UDREが立っていてバッファが空なら直接送るとなっているが、
こちらもバッファがちょうどいっぱいになると成立してしまい直接送信に入ってしまう。
バッファ内データ数を把握する変数を用意した方がいいと思う。
普通は簡単にバッファフルなんて起こらないだろうと思うが、
この例題では、割込許可がループ1周につき1回分しかないのも気になる。
sei()はその直後のwhile(1)ループのためのRJMP命令まで実行したあと割込を許可するが、
while(1)の先頭はcli()なので、このループは1周につき1つの割込しか許可しない。
それでも間に合うはずだとは思うけど・・・
343 :
332 :2009/05/18(月) 21:56:31 ID:+LExqZj9
>338 本当にそうしようかと思っています。 >339 data=SeriReceiveBuff0[SeriReceiveRI0]; のところをdata=(unsigned char)SeriReceiveRI0;にしてみました。 >340 受信割り込みのところが下記のように展開されているのですが SeriReceiveBuff0[SeriReceiveWI0]=UDR0;//保存とインデックスインクリメント b6: e0 91 16 01 lds r30, 0x0116 ba: f0 91 17 01 lds r31, 0x0117 be: 80 91 c6 00 lds r24, 0x00C6 c2: e4 5e subi r30, 0xE4 ; 228 c4: fe 4f sbci r31, 0xFE ; 254 c6: 80 83 st Z, r24 以下のmapの状況と合わせると subi,sbciの引数は合っているのでしょうか? 0x00800100 SeriTransmitWI0 0x00800102 SeriTransmitBuff0 0x00800116 SeriReceiveWI0 0x00800118 SeriTransmitRI0 0x0080011a SeriReceiveRI0 0x0080011c SeriReceiveBuff0 >341 追い越しているのですが、追い越しそうもない状況で追い越すので合点がいかないのです orz 空ループを入れて割り込み禁止でない時間を増やしてみましたが同じ結果でした。 もちろん、最初はもっと大きなバッファにしていましたが、デバッグの都合上小さくしました。 >342 バッファがフルになるずっと手前から症状が出ます。
344 :
340 :2009/05/18(月) 23:35:45 ID:iaopgEVB
>>343 この事例とあんま関係ない・・・
わかってるかも知れないけど変な値を引いてるのは
インストラクションセットにaddiやadciが無い為(subi,sbciと補数で代用できる)
r31:r30 - ( 0xFEE4 ) = r31:r30 - ( -0x011C ) = r31:r30 + 0x011C
この辺は深く考えなくてもコンパイラがちゃんとやってくれるよ
今回のトラブルとは関係なさそうですが・・・・ TXCによる送信完了割り込みだと、シフトレジスタからデータが送られ切るまで送信できず、 バッファを有効に使えない。 送る方はUDRIEをチェックせずにリングバッファに突っ込んで、UDRIEを立てる。 割り込みの方はUDRIEを立てて、データレジスタ空き割り込みを使い、 もしも送るべきデータがなければ割り込み内でUDRIEをクリアするって感じの方がいいのではないでしょうか。 肝腎のバグの場所は・・・・わかんねぇ・・・
346 :
332 :2009/05/19(火) 06:17:20 ID:VZvUfO0X
>344 納得です。そういう意味ですか・・ >345 私も最初そう思ったのですが、初心者の最初の実験としては今の方がシンプルかと・・ 一度データレジスタ空き割り込みのほうもやってみます。
>>343 バッファがフルでないって理由は?
342の言ってる辺りはかなり怪しいと思うけど。
348 :
342 :2009/05/19(火) 09:09:27 ID:nKjOM+SZ
うーむ、バッファフルがらみだと、バッファ一回り送られるんじゃなくて、 バッファ一回り分データが欠損する形で現れそうだから、確かに症状と違うかな・・・ それと、添え字がcharだと症状でないというのも疑問。 割込禁止が効いていない可能性もなさそうだし・・・ 受信データにSeriReceiveRI0を代入してデバッグしているようですが、これに、さらに SeriReceiveWI0情報も入れてみませんか?どういう挙動を示しているのか。 data=((unsigned char)SeriReceiveRI0&0x0F) | ((unsigned char)SeriReceiveWI0<<4); ってな感じで。バッファ長は16未満にして。 ただ、どちらにしてもバッファフル検知が危うい今のプログラムはどうにかした方がいいと思う。 SeriReceiveWI0とSeriReceiveLen0(蓄積データ数)をグローバル変数として持ち、 割込側は今のものにSeriReceiveLen0++; を追加し、 取り出し側は SeriReceiveRI0をローカル宣言して、 if (SeriReceiveLen0!=0) { if (SeriReceiveWI0>eriBuffLength) { SeriReceiveRI0=SeriReceiveWI0+SeriBuffLength-SeriReceiveLen0; } else { SeriReceiveRI0=SeriReceiveWI0-SeriReceiveLen0; } SeriReceiveLen0--; } ってな感じで。SeroReceiveXXXがsignedならもう少しすっきり書けるのだけど・・・
intだと最適化か何かで他が動いたら上書きされるようなコードにされてるんじゃないの。
350 :
774ワット発電中さん :2009/05/19(火) 10:53:53 ID:nKjOM+SZ
>>332 ところでこれ、ターゲットは何?
コンパイルしようとしたらPORTAがないだのUBRR0がないだの騒がれたw
シリアルが2つでポートがA〜Dまである奴・・・なんだっけ?
351 :
774ワット発電中さん :2009/05/19(火) 11:03:08 ID:nKjOM+SZ
>>349 とりあえずtarget mega1280でコンパイルしてみたが、
ちゃんとvolatileが効いていて、愚直なまでにlds/stsでメモリから出し入れしつつ
2バイト整数を扱っているな。OPT=sで変な最適化はないみたい。
352 :
774ワット発電中さん :2009/05/19(火) 12:43:05 ID:Pj/4OjY4
コンパイラを疑っても大体原因は違うよね 動かないのは、このICの初期不良だ!っていうやつに似てる
353 :
774ワット発電中さん :2009/05/19(火) 15:08:06 ID:nKjOM+SZ
シミュレートして遊んでみた。 バッファ溢れは受信速度と送信速度が同じならセーフですが、気になったのは、 受信速度と送信速度は本当に同じかということ。 データシート上、AVRのUARTは、スタートビットが6/16bit早く来てもそれを受け付けられます。 スタートビット1・データ8・ストップビット2の場合、11ビットあるわけですが、受信側は この仕様により10.625bit/charまでは受け付けられそうです。しかし送信は11bit/charのままです。 もしもPCの送信速度(AVRの受信速度)が微妙にAVRの返信速度より速かった場合、 どこかで送信バッファオーバーフローをきたし、問題の症状が出る可能性があると思います。 受信ではなく送信バッファの方にオーバーフローが起こっていないか確かめてみてください。
354 :
774ワット発電中さん :2009/05/19(火) 15:15:36 ID:nKjOM+SZ
>>353 追加。
データシートを見ると、受信側については、第2ストップビットは無視される仕様の模様です。
となると、送信11bit/charに対し、最速受信速度は9.625bit/charになります。
特に、相手側(PC)がストップビット1設定なんかだったりすると、双方のクロック精度が
完全一致しても、1割弱くらい受信が速いことがあり得る。
そうなると送信バッファオーバーフローは必然。PC側のシリアル設定どうなってます?
>>337 > if(SeriTransmitRI0==SeriTransmitWI0 && (UCSR0A & 1<<UDRE0)){//待ちデータと送信レジスタを確認
(UCSR0A & 1<<UDRE0) の部分って ( (UCSR0A & 1) << UDRE0 ) って解釈
されるんじゃなかったっけ?自分は ( UCSR0A & (1<<UDRE0) ) と書くけど…。
356 :
774ワット発電中さん :2009/05/19(火) 17:02:52 ID:nKjOM+SZ
>>355 俺もそれ疑問に思って調べたけど、Cの演算子優先順位では&より<<が上らしいので、これでも大丈夫らしい。
でも、自分はいつも()で包んで確実にしているな。
とんでもないバグにつながるかもしれないので、マクロ定数もかっこで包んでいる・・のは神経質かな?
#define SeriBuffLength (20) みたいな感じ。
358 :
332 :2009/05/19(火) 22:06:02 ID:LeQcYlHB
>347 1Byteづつ間隔をあげて送っているのに数回目で現象が出るのでフルにはなっていないのではないかと・・ >348 data=((unsigned char)SeriReceiveRI0&0x0F) | ((unsigned char)SeriReceiveWI0<<4); やりました。結果は以下の通りです。 パソコンから間隔をあけて1を2回送ったところ・・こうなるのです。 [OUT] 01 [IN ] 10 [OUT] 01 [IN ] 11 12 13 14 15 16 17 18 29 2A 2B 2C 2D 2E 2F 20 21 >349 アセンブリコード見て問題点が分かる技量があればいいのですが・・ >350 ATMEGA644Pです。 >351 最適化を-o0にしてみましたがダメです・・ >352 石の交換をしてみました。結果は同じでした。 >353 上記のように1バイトだけの送信で現象が出ます。また、受信時点でおかしいのももはや明らかかと・・ >355 >356 念のため()も入れてみましたが結果は同じでした。
2回目の受信時に、WI0がインクリメントされてないね。 でも、なんでWI0が増える前に送信し始めてるんだ? 再現する最小構成のプロジェクトをどっかにアップしてくれたら 頑張って検証してみるかも知れない。
クロックが内部か外部かをプログラムで判別したいのですが、 ヒューズの値をプログラム内部で読み出すにはどうすればいいんでしょうか?
>>360 プログラム(書き込み)時に、ヒューズの値か、それに代わる情報も書き込んでおく。
OSCCALの値をプログラム内で利用するのと同じノリですね。
>>358 >パソコンから間隔をあけて1を2回送ったところ・・こうなるのです。
うーん、SeriReceiveWI0が増加しない(WI0==RI0)のうちに受信バッファからデータを取り出し、
結果アンダーフローを招き破綻しちゃっているのか。
となると問題はここ??わかんねぇ・・・・・
>if(SeriReceiveRI0!=SeriReceiveWI0){
cli()命令はcli実行時から割り込み禁止だから、ここが割り込まれる可能性はないし・・・
>>362 だよね。
なにか質問者の人が出してない情報でも無い限りサッパリ解らない。
もう、JTAG-ICE使って動作を覗いてみるのがはやいかなって思ってる。
>360 SPMCSRとLPM命令でヒューズ値を読める。
332は完全に再現できるプロジェクトをZIPでうpするべき
なんだかよくわからんが、 #if(SeriReceiveRI0!=SeriReceiveWI0){ #data=SeriReceiveBuff0[SeriReceiveRI0]; #SeriReceiveRI0++; #if(SeriReceiveRI0==SeriBuffLength){ #SeriReceiveRI0=0; #} このifだけど、 if(SeriReceiveRI0!=SeriReceiveWI0){ が成立しなかったときにはこれが全部実行されずにdata値が前回値の まま下に流れ込み? #if(SeriTransmitRI0==SeriTransmitWI0 && (UCSR0A & 1<<UDRE0)){//待ちデータと送信レジスタを確認 #UDR0=data;//バッファに入れないですぐに出力 #}else{ のifが成立してゴミdataがUDR0に書き込まれてしまう? このままもう一回ループを回るとまた上の方ではdataが更新されない まま抜けてくるけど、この回だけはなんとかifが不成立するかな? (UARTに書いたデータがシフトレジスタに入って、UARTの送信バッファは 空になるだろうから) でも、もう一回回るとUARTのバッファもデータがあるから不成立になって else以下になって送信用のリングバッファにdataが詰め込まれる?
>>366 字下げが消えてて読みづらいが、先頭のIFでループ内はぜんぶ囲ってある
>>366 インデント付けてみるとわかりやすいけど、その先頭のifは送信部にもかかっているよ。
受信データがないときは送信もしていない。
>>364 おお、こんな方法があったのか、知らなかった。勉強になった。
AVRでWindows95を動かそう
>>365 AVRStudioなどでUART受信をシミュレートする方法ってあるの?
UDRに値を放り込んでも送信シミュレートするだけだし、
・・・・RXCビットを立てればいいのかな?
365じゃ無いが、実機を使って実際にパソコンから送ってやれば良い ICE持ってればブレークポイント貼れるし、メモリとかを見ることも出来る
て事で、ICEで試そうと思って、
>>332 >>333 をコピペってみたけどそもそも再現しない・・・
一発で大量に送ってみても正しく返ってくるし。
[OUT] 01 02 03 04 05 06 07 08 09 0A 0B
[IN ] 01 02 03 04 05 06 07 08 09 0A 0B
Hwの都合上ポートをUSART0から1に変更したけど、まあ関係ないはずだしなぁ。
環境
AVR Studio 4.15
ICE KEE AVR JTAGICE mkII(クローン品 ちゃんと動く)
コンパイラとか
WinAVR 20081205 avr-gcc 4.3.2
-Os -std=gnu99 -DF_CPU=20000000UL
やっぱり再現するプロジェクトをくれ。
うーん・・結局他のところでインデックスをぶち壊しているというのが 一番ありがちな気がする
376 :
332 :2009/05/20(水) 22:35:11 ID:HDkkXbOz
377 :
332 :2009/05/21(木) 05:54:15 ID:RLXRKESn
if(SeriReceiveRI0!=SeriReceiveWI0){ を2回検査すると正常に動くことが分かりましたがこれを正常と言っていいものやら・・ if(SeriReceiveRI0!=SeriReceiveWI0){ 1a8: 20 91 16 01 lds r18, 0x0116 1ac: 30 91 17 01 lds r19, 0x0117 1b0: 80 91 12 01 lds r24, 0x0112 1b4: 90 91 13 01 lds r25, 0x0113 1b8: 28 17 cp r18, r24 1ba: 39 07 cpc r19, r25 1bc: 09 f4 brne .+2 ; 0x1c0 <main+0x46> 1be: 52 c0 rjmp .+164 ; 0x264 <main+0xea> if(SeriReceiveRI0!=SeriReceiveWI0){ 1c0: 20 91 16 01 lds r18, 0x0116 1c4: 30 91 17 01 lds r19, 0x0117 1c8: 80 91 12 01 lds r24, 0x0112 1cc: 90 91 13 01 lds r25, 0x0113 1d0: 28 17 cp r18, r24 1d2: 39 07 cpc r19, r25 1d4: 09 f4 brne .+2 ; 0x1d8 <main+0x5e> 1d6: 46 c0 rjmp .+140 ; 0x264 <main+0xea> 全く同じことをやっているだけですよ・・・orz
物は試しのダメモトでcli()の後に for(data=0; data<10; data++) ; とか、ダミーのループ入れてみたら?
あ”・・・sageるつもりでageてしまった・・・
380 :
774ワット発電中さん :2009/05/21(木) 12:11:10 ID:RKnckjPd
>>378 asm("nop::");とかでもいいな。
割込禁止がきれいにかかっていないのか?
もしかしてatmega644だけ特殊な仕様でもあるとか・・・ってのはないな。
データシートには何も書いてない。
ICE使ってみたが、まだよく解らない。 とりあえず、リビルドしないで動かすと再現した。 ブレークポイント入れると再現しない。 ステップ実行すると再現しない。 ただし、ステップ実行してると送信したのと違うデータ(0x00)が帰ってくることは有る。 ・・・なんだこれ。
解決できればスキル向上!
昔の8251の初期化みたいw
うーむ、ギブアップ。 60: if(SeriReceiveRI0!=SeriReceiveWI0){ +000000D4: 91200116 LDS R18,0x0116 Load direct from data space +000000D6: 91300117 LDS R19,0x0117 Load direct from data space +000000D8: 91800112 LDS R24,0x0112 Load direct from data space +000000DA: 91900113 LDS R25,0x0113 Load direct from data space +000000DC: 1728 CP R18,R24 Compare +000000DD: 0739 CPC R19,R25 Compare with carry +000000DE: F409 BRNE PC+0x02 Branch if not equal +000000DF: C046 RJMP PC+0x0047 Relative jump 62: data=SeriReceiveBuff0[SeriReceiveRI0]; +000000E0: 91E00116 LDS R30,0x0116 Load direct from data space これで +000000E0;の位置にブレークポイントを張って動作確認 エラーになるパターンのメモリなど レジスタ R18: 0x00 ← 非常におかしい R19: 0x00 R24: 0x02 R25: 0x00 メモリ 0x0116: 0x0002 = SeriReceiveRI0 0x0112: 0x0002 = SeriReceiveWI0 R18は受信割り込みでは一切使用してないレジスタ 一方で受信してない時にこれが発生することは無い 送信部分を丸々削除しても発生するので、送信割り込みなどは関係ない
385 :
メカ名無しさん :2009/05/21(木) 17:04:54 ID:2nvLZ1VA
BTC067(ATmega32)の書き込み方法がフラッシュライタからS-Termに変更されて いるが、書き込みの手間がかかるようになった・・・どうしてか?
>>381 >ただし、ステップ実行してると送信したのと違うデータ(0x00)が帰ってくることは有る。
受信エラーがあったときって、受信割り込みは発生するんだっけ?
自分で書くときは割り込み内でエラー処理はしてるけど
これから初めてAVRを扱ってみようと思うのですが どのチップを使用するのがよいでしょうか? LEDチカチカから秋月でうってる16*2のLCD制御、サーボモータの制御あたりの実験をしようと思ってます
388 :
774ワット発電中さん :2009/05/21(木) 19:40:47 ID:RKnckjPd
>>387 今ならtiny2313かmega88あたりかね。
もしくはボードになっている製品。
>387 これからやるならArduinoでやるのがいいとおもう。 生AVRがいいなら秋月で一緒に買える、安いっていう理由でmega88pがおすすめ。 tiny2313だと近い将来すぐ限界に達してしまうよ。
390 :
774ワット発電中さん :2009/05/21(木) 19:59:36 ID:RKnckjPd
>>389 あれよさそうだね。使ってないけど。
ブートローダー式の奴はライターで悩まないでいいので楽できそうですし。
>>386 はっきり書いてないけど受信時にエラーフラグを読み出すってことは受信自体は成立するんでしょう
391 :
332 :2009/05/21(木) 23:07:30 ID:RLXRKESn
>378 >380 割り込み禁止の後に時間稼ぎはかなり前に試しましたが効果ありません。 >384 受信割り込みでSeriReceiveWI0++を行なっただけで現象が出るようです。 まあ、データの読み出しは割り込み解除のために行ないましたが・・ >386 >390 受信エラーが発生していないか確認してみます。 みなさんはこういう得体の知れないことって時々あるのでしょうか? AVR初心者でいきなりこんなことに出くわすと先がおもいやられてしまうのですが・・
ずいぶん、昔の話だけどZ80アセンブラ組んでるとき nopを入れるとPUSH/POPが正常に動くが 外すとPOPででたらめな値が出てくるときがあったな。
状況だけみてると割り込み禁止がうまくいってなくて SeriReceiveRI0、SeriReceiveWI0がなき別れしてるように見えるよね。
394 :
774ワット発電中さん :2009/05/21(木) 23:33:36 ID:Q6mbjqme
395 :
384 :2009/05/21(木) 23:59:24 ID:/O3gSKgZ
>>393 mainループのcli〜seiの間、1になるフラグを作って、
そのフラグが立ってる時に受信割り込みが発生すると
ブザー(外部回路)がなるようにしてみたが、鳴らなかった。
それから不必要な割り込みが発生したとしても、
0x116から読み出したはずのデータが0x0000になるのはおかしい。
前述のように、R18 R19は受信割り込みではpush popもされない。
AVRで色々と遊んでみようと AVRのライタ用部品とその他諸々を秋月での通販で買おうと思ったら74126が売ってなくて泣いた 他に必要なものは大体そろうのにorz
397 :
384 :2009/05/22(金) 00:15:21 ID:tOVa4Sij
結局if(RI != WI)で
RIの中身によらず0x0000を R18 R19にロードしてるからここを通過してる。
そこの、評価ー分岐で分岐前にブレークポイントを張ると絶対に発生しなかった。
+000000DE: F409 BRNE PC+0x02 Branch if not equal ←ここ
LDS~CP と BRNEの間に、R18 R19もしくはフラグの類が書き換えられてるっぽいけど
でも割り込みは発生してないし、他に関数も無いし・・・
>>374 も自分なんだけど使うポートがUSART1の時は発生しなかったから、
まじでエラッタ?とかちょっと思いかけてる。
英語力があれば、avr-gccのメーリングリストで聞くとか
avr-freaksで聞くとかしてみるといいのかもしれないけど...
>>398 ライタ買っちゃってもいいけど簡単に部品が手に入るならつくっちゃおうかなー、とおもったものでw
しばらく秋葉原行く機会がないから買い物にもいけないし純正ライタかうかなぁ
>>399 なら、どのような部品を揃えるかわからないので的外れかもしれませんが
AVR含めて千石で揃えるとかはどうでしょうか?
401 :
332 :2009/05/22(金) 06:36:32 ID:pfSCJ/EX
>384 ご協力ありがとうございます。 USART1にすれば本当に何事もなく動作しますね・・ 私は644PのPDIPですが、そちらのパッケージは同じですか? SeriReceiveRI0のvolatileは必要ではないのでのけてみるとレジスタだけで動作するように なったが、それでも現象が出ました。やはりSRAMは関係ない。
バグや故障以外でUSART0独自問題と言えば・・・ PRRレジスタのUSART0電力削減ビットがonになってないか。なってないはずだが、データシートは明示的に再初期化しろとかいてあるから。
403 :
774ワット発電中さん :2009/05/22(金) 08:30:52 ID:E+8Yb+24
404 :
774ワット発電中さん :2009/05/22(金) 08:36:45 ID:E+8Yb+24
>>402 再初期化しろと書いてあるのはUSART0自身(UCSRnX再設定等)のことだと思う。
通販は送料が高いから一カ所でまとめ買いしたいところだよね かといって買い出しに行ってもまとめ買いしてるから対して変わらないというかなんというか
>>401 644PのDIP品ですねー
実は偶然にも仕事で試作中だったんだけど、
これ理由わからなかったら気持ち悪いな
今ATmega168でAD変換しているんですが、同じAD0〜AD3で同じものをAD変換すると AD0の方が微妙に、微妙にだけどノイズ小さいような気がするんだけど何で?
408 :
774ワット発電中さん :2009/05/22(金) 12:46:06 ID:E+8Yb+24
>>407 GND(pin22)に近いから、とか。
ADC1〜3もGNDパターンで囲んだらよくなるかも。
ありがとうそんなのあるのか。ちょっと試してみる
岩通はアナログオシロは一流だったけどデジタルはどうなんだろう テクトロのデジタルオシロはガチ 別に信者ではないがそう思う
スレまちがえたスマソ
412 :
774ワット発電中さん :2009/05/22(金) 16:52:36 ID:E+8Yb+24
>>409 データシートにそのへん詳しく書かれているから見てね。
413 :
774ワット発電中さん :2009/05/23(土) 09:14:18 ID:AVz46y9T
そもそも割り込み禁止にする必要ないのでは あと、割り込み処理内で、一バイトしか処理しないのも変
414 :
774ワット発電中さん :2009/05/23(土) 09:20:17 ID:0PsTSZo7
>>413 上にあったUARTの話?それなら両方ともおかしくないと思うが。
バッファからデータを取り出す最中で割込でインデックスが書き換えられると問題。
特にインデックスがintで2バイトだと、上位下位が泣き別れでとんでもないことになる可能性有り。
受信部と送信部の間に割込許可の部分を作った方がいいとは思うけど。
割り込み処理内で1バイトしか処理しないのも適当でしょう。
1バイトの送受信には20MHzマイコンにとっては猛烈に長い時間を要する。
バッファに複数のデータがあったとしても、一度の割込処理中でこれらを処理すればすごく長い
割込時間を要する。その間割込ルーチン内でループすることに・・・
それでいいなら割込使わずポーリングで行けばいいわな。バッファも要らない。
415 :
774ワット発電中さん :2009/05/23(土) 09:38:24 ID:AVz46y9T
書き換えられなくね? バッファにある分は全部処理した方がよくない?
416 :
774ワット発電中さん :2009/05/23(土) 10:06:20 ID:0PsTSZo7
>>415 たとえば
>>332-333 で言えば、
>>333 >if(SeriReceiveRI0!=SeriReceiveWI0){
これを処理している最中に受信割り込みがかかって、SeriReceiveWI0が255から256になったとする。
MainでSeriReceiveWI0の下位取得(0xFF)
割込かかり、SeriReceiveWI0が0x0100になる
Mainに戻り、SeriReceiveWI0の上位取得(0x01)
Main「SeriReceiveWI0は0x01FFですね。」←!!
バッファ長が20バイトの今ならいいが、256越えれば問題起こるわけで。
他にも、
>>333 でdata=SeriReceiveBuff0[SeriReceiveRI0];の最中・直後に割込かかると、
バッファがいっぱいになったのにSeriReceiveRI0が++される前なので判断誤る
(もっとも
>>333 はバッファフルを想定した作りじゃないのでどっちでも同じだが・・・)
>>333 でSeriReceiveRI0++;の直後に割込かかると、割込先では
直後のif(SeriReceiveRI0==SeriBuffLength) { SeriReceiveRI0=0; } が実行される前の、
範囲外のままのSeriReceiveRI0を見ることになる。
などなど・・・割り込まれても問題がない場所もあるけど、それをいちいち考えるよりは、
1つのバッファ出し入れは割込禁止でくくってしまった方が確実。
バッファにある分を処理する件は、そんなに割り込みルーチンにとどまるつもりか?って問題が。
たとえばバッファにたった2バイトあるだけでも、19200bpsのstart1bit-data8bit-stop2bitでは
572.9μsec、20MHzのAVRでは11458ステップもの時間を要する。
割り込みルーチンのオーバーヘッド(開始終了に数十ステップくらいか)を大幅に上回る。
これなら1バイトずつ処理した方がましでしょ。
>>416 なるほどなるほど。
いやそうでなくて、AVR自身の受送信バッファって無いの? 1バイト分だけ?
>>417 質問したい内容をきちんとまとめろよ。
>>41 3
>>415 から
>いやそうでなくて、AVR自身の受送信バッファって無いの? 1バイト分だけ?
こんな意図を汲み取れるわけがない。
ちなみに送受信バッファは1バイト、または2バイト。
小出しにされた質問を、あれこれ推測しながら解いてゆくのが電電板の醍醐味だろ!? って言っていたやつがいたなぁww ひぐらしに毒されたヤツの発言だよな
ひぐらしって4年に一度しか起きないコチ亀のキャラだっけ?
それそれ。そのひぐらし。 …その日暮らし。 ちょっくらアキバへパーツの買い出し行ってくるぜ。
422 :
774ワット発電中さん :2009/05/23(土) 11:23:29 ID:0PsTSZo7
>>417 ハードウェア受信バッファは使っているが(UDR自身の他にもう1バイト)、これは意識する必要はない。
ハードウェア送信バッファについてはUDR(受信用UDRとはアドレス一緒だがハードウェア上別物)だけで1バイト。
>>332-333 では割り込みルーチンではTXC完了割り込みを使っているため、実質使ってない状態。
メインルーチンでダイレクトにUDRに押し込むところでは使われることになる。
AVRのハードウェアバッファはあるにはあるけど、それがいっぱいになった場合の処理を行っているのが
ソフトウェア上のバッファであるわけ。
たとえば連続して送信する場合、
1バイト目→UDRに入り、UARTシフトレジスタ空いてるので即座にシフトレジスタ行き、UDRは空く
2バイト目→UDRに入るが、UARTシフトレジスタはまだ1バイト目データを送信中なので、2バイト目はUDRにとどまる
3バイト目→UDRが空いてないから送れません。待つか、ソフトウェア側でバッファを用意して空き次第送るようにするしかない。
受信に関しては、
受信あるかどうかをプログラム側で定期的にチェックするわけだが、このチェックがされる前に複数データが送られてきたら破綻する可能性がある。
1バイト目受信→シフトレジスタ→受信第2バッファ→UDRと移動、UDRに置かれる
2バイト目受信→シフトレジスタ→受信第2バッファ→UDRは空いてないので、第2バッファに置かれる
3バイト目受信→UDRも第2バッファも空いてないので、シフトレジスタ内にとどまる
4バイト目のスタートビット受信→シフトレジスタ内データの移動先がなく、3バイト目(・4バイト目)のデータ破壊
なので、3バイト目受信が完了する前にUDRを読み出し、データを移動していく必要がある。
もしもプログラム側で定期的に(19200bpsなら0.6msec程度)読み出せないなら受信データが失われる
可能性があるので、その場合には、メインルーチンに代わって、割り込みルーチンで、受信データが
ある度に読み出してバッファに保存していくプログラムが必要になる。
>>417 はこの2バイトある受信バッファを一気に読み出すように割り込みルーチンを書かないのかという
疑問なのかもしれないが、別にそんなことしなくても数十クロックのオーバーヘッドでまた割込かかって
読み出しにいくのだから、そんなに慌てることはないと思うし、プログラムは単純な方がいいと思う。
423 :
332 :2009/05/23(土) 14:29:21 ID:5InYsiGa
>406 パッケージも同じですか・・結局お宮入りになりそうですね・・。29人ダウンロードしてくれたようですが 本家も落としたのかな? 他の石では出ないのか気になりますが、できれば別の石に乗り換えたいところです。 でも644P以上の仕様のものになると1284Pとか入手できるのがどうか分かりませんし、 直系の上位だと同じ不具合がありそうにも思えるところです。
>>422 >
>>417 はこの2バイトある受信バッファを一気に読み出すように割り込みルーチンを書かないのかという
> 疑問なのかもしれないが
そうそう、そっち
>>424 わかるかよw
だが、基本的には2バイト受信する間割り込みがかからないような設計をすること自体が問題。
バッファ2つを使った状態自体希だと考えていいし、万が一そうなっても1バイト取得でも
2回割り込みで対応できる。だからそこまでする必要はないと思う。
通販で注文したAVRが届いたよ さて、手持ちのH8で書き込み器を作る作業がはじまるお
mega1284p日本でも早くでろ〜〜〜
>>426 まずは、AVRを使って、H8書き込み器をつくんなきゃな。
なんでライタにマイコン使うの? 何に使うの?
430 :
774ワット発電中さん :2009/05/24(日) 13:03:44 ID:qGaxi2zJ
>>423 変な割り込みが入るなどしてリセットベクタに
飛んで一回りして戻ってきてる・・とかいうことはないよね?
初期化しないグローバル変数を一つ用意してmain()の頭で
インクリメントしておくと増加していくからわかると思うけど
>>423 自分もMega644P 40ピンDIP持っているので試してみた。
20MHz_19200bpsでNG.
16MHz__9600bpsでNG. 20HMzより起きる確率は低い。
_8MHz__4800bpsでOK. 9600bpsと同じファームなのに水晶を変えただけで起きなくなった。
実験したところでは
UART1だと問題なし。
STOPビットは1でも起きる。
本質的な対策ではないが
cli();
tr200us(); // 割込禁止と比較の間に時間を取るとOK
if(SeriReceiveRI0!=SeriReceiveWI0){
クロック(時間)で何が変わるかが解らないです。
433 :
332 :2009/05/24(日) 15:53:00 ID:JKS+rCSh
>432 今、UART1でSTX・ETXを使ったアスキーコードによる通信まで何事もなく動いたところで UART0をもう一度動かしてみたところ、エコーバックのデータが欠落するようになった。 受信バッファのインデックスはcharにしても今度はだめだった。 結局のところ、UPしているプロジェクトでは、あのようになるというだけで 全体のコードの構成が変るとまた症状が変る。 もうどうしようもありません。
434 :
332 :2009/05/24(日) 15:56:57 ID:JKS+rCSh
>431 アトメルの日本法人の連絡先でも分かれば・・と思うのですが情報がないです。 石は秋月で通販で買ったのでダメ元で秋月に問い合わせてみようかとも思っています。
だめもとといっても _だろ
644PのUSART0を全世界で誰も使ってないなんてワケがないから、不具合だったら どこかで情報出てるはずじゃね?
437 :
432 :2009/05/24(日) 18:17:42 ID:zd+99zym
Digi-keyで買ったMega164P-20PUがあったので試してみたがダメだった。
16MHzのときはかなり良かったが20MHzでは644Pと同じぐらいダメ。
>>436 発症する条件は高クロックでUART0受信を使ったときかな。
そんなに狭い条件とは思えない。
メインループでUART0受信しても起きるので割り込みは関係なさそう。
勝手にデバッグプログラムに飛んだりするので
寄生コンデンサでRAMかレジスタがおかしくなってるのかな?
>>437 > そんなに狭い条件とは思えない。
ということは、やはり自分が何か間違えてると決めつけた方がいい。
昔似たようなことで大はまりしたときは(USARTの送信はOKだが受信が安定しない)
三端子レギュレータにつけるセラコンの値を間違えてた。
440 :
432 :2009/05/24(日) 19:29:35 ID:zd+99zym
>>438 アドバイスどうもだけど
元の発言は332さんで私は今日の昼から追試している第三者です。
自分なら考えて解らなければプログラムを書き直すかな。
あるいは8MHzなら問題なかったのでクロックをおとす。
解らないのは割込受信ルーチンではなく比較でバッグている点。
if(SeriReceiveRI0!=SeriReceiveWI0){ // RIOは直接関係なさそうなんだけど
>自分なら考えて解らなければプログラムを書き直すかな。 >あるいは8MHzなら問題なかったのでクロックをおとす。 原因がわからないと、本当にその修正で良いのか あるいは単に頻度が減って治ったように見えてるだけで 根本的な解決になっていないのかの判断のしようがないからなぁ
>>434 アトメルの日本法人の連絡先は本家英語版のデータシートの最後に書いてあるよ。
結果を期待したい。
>>438 複数の人間がやって同様の症状がでてるから実装ミスはないんじゃない?
おまじないのように全PORTプルアップしてるけど、あれは必要なのか?
入力ピンはどこにも繋がってないときはプルアップすべきやね。 ノイズでパタパタ動くから無駄な電気を食う。 一昔前のICならラッチアップしてぶっ壊れるし。 出力ポートにしといてもいいけど、誤配線があると何かを壊したり、 マイコンが壊れたりするかもしれないから未使用ピンは入力-内部プルアップって普通と思う。
>>444 でもマニュアルには「未使用ピンは出力に設定してLを出力しとけ」って書いて
あったと思ってたが…。
チップ単体で始末するとしたら出力ポートにして'L'出力しておくのが手堅いかな? ただ、リセット直後から出力モードに変更するまでの間はフローティング状態 になってしまうので、うるさい人は嫌がるだろうね。
>>442 なぜかアトメルジャパンでググっても、Webがみつからないのなw
>>445 もし、ユニバーサルとかに組んでて
要らんとこに繋がってたらって思うと嫌だな。
まあ、電源入れる前にきちんとテスタでチェックすればいいんだけど
安全サイドはプルアップだと思う。
日本語訳データシートでも
>消費電流削減のため、浮き状態入力は避けられるべきです。
>未使用ピンの定義されたレベルを保証する最も簡単な方法は内部プルアップを許可することです
ってなってるね。
オラ大学出たら、アトメルさ就職するだ
450 :
リキ :2009/05/24(日) 23:17:35 ID:KSV+pU/a
はじめまして AT90USB162+AVR Studio 4.16(gcc version 4.3.2 (WinAVR 20090313)) で嵌っています。 どなたかお知恵を拝借できませんでしょうか? volatile を入れても割り込みでグローバル変数の更新ができません。 更新部分を下記までしても駄目なのでコンパイルオプションか 何か間違っているのかと思いますが... *((volatile bool *) &g_xxxx) = TRUE; よろしくお願いいたします。
volatileを入れれば、最適化のために不自然なコードにならないと思っているのですね?
452 :
リキ :2009/05/24(日) 23:29:35 ID:KSV+pU/a
まあ、そうですね。 昔使った 6821 などでもそうでしたが、ペリフェラルとかは同じアドレスに連続してライトしたりしますから、そんなの勝手に端折られたら初期化出来ないですよね。 当然の言語仕様だと思います。
変数のアクセス時じゃなくて宣言時にvolatile付けるものじゃないのかいな
454 :
リキ :2009/05/24(日) 23:50:02 ID:KSV+pU/a
【宣言部分】 volatile bool g_xxxx = FALSE; 【割り込み関数内(試行1)】 g_xxxx = TRUE; 上記で更新できないので、以下を試行。 【割り込み関数内(試行2)】 *((volatile bool *) &g_xxxx) = TRUE; これでも更新できないので、困っています。 です。
455 :
リキ :2009/05/24(日) 23:55:22 ID:KSV+pU/a
> 変数のアクセス時じゃなくて宣言時にvolatile付けるものじゃないのかいな 基本的にはそうでしょうが、アトメルのサンプルのヘッダに以下のようなものがあります。 即値で変数宣言できないケースもあるので、コンパイラは何処でも言うことを聞くのではないかと思います。 #define UDIEN (*(volatile unsigned char *)0xE2) など
もうそういうシビアな部分は、インラインアセンブラにしちゃえば?
割り込みが発生してないんじゃね?
アセンブラ結果がどうなっているのかな? 本当にvolatile付けてあるならStore命令が抜けることはないはずなんだけど。
boolとTRUE,FALSEの宣言はどうなってるの? AVR-GCCだとtrue,falseは小文字だし、独自のヘッダファイルでも使ってると思うんだけど
>>450 AVRSTDIOのシミュレータにかけてみたらいいんじゃないのかなぁ。
>>454 >上記で更新できないので
コンパイルした後のアセンブリ言語のソースコード読んでないの?
462 :
恥ずかしながら :2009/05/25(月) 01:06:40 ID:pgjzyoch
> コンパイルした後のアセンブリ言語のソースコード読んでないの? すみませんです。 10年以上アセンブラを使っていなかったので面倒でアセンブラのソース読んでいませんでした。 アセンブラのソース読んだら他の部分に問題があることが直ぐに判明しました。 割り込み関数内のグルーバル変数に対応した部分には、きちんとストア命令が出力されていました。 命令セットもまともで使い易いので、今後はきちんとアセンブラのソースを読みますので... みなさん、お騒がせしてすみませんでした。 助言くださった方、どうも有り難うございました。 リキ
…って高い!(直販サイト¥5,579) ライタにしろUSB→COM変換にしろ、 自作かFT232RL使ったアダプタ買った方がいいかな。
ATtiny13Aを秋月で10個ほど購入 さて何を作るかな・・・。AVR StudioのC言語でどこまで書けるか・・・
466 :
774ワット発電中さん :2009/05/25(月) 17:15:50 ID:0avf7rNC
>>434 ここの延長戦で、AVRfreaks.netの掲示板で質問してみるというのはどうだろう?
向こうならatmelやWinAVRプロジェクトの中の人とかもいると思うし。
なんで2313が100円なのに、13Aは120円なんだ?
>>467 10bit A/DConvがあるからかな?
単純に仕入れの問題じゃない。2313の100円ってdigikey価格とかからしても異常に安いよ。 ちなみにdigikeyだとtiny13Aが151円、tiny2313が244円
>>463 やっぱ高いね。
アキバの FIRST POINT の店頭で
PCI接続のCOM*2が300円のジャンクで出てるよ。
確か、IO-DATAの増設カード。
>>470 店頭ワゴンで大量にでてたよね。1つ買っておいた。
IOはドライバWebで手に入るし。
でも、店内では数千円で同じのがあった。
店頭のは不良品なのかなぁ…。買ったけど使ってないからわかんない。
パラレルはわかるけど、シリアルでPCI版のUSB版に対するメリットって何?
>>472 シリアルインタフェースとしてだけではなく、AVRライタで使われるような単なる数本のIOとしても使いやすいかもしれない。
>>472 昔ながらのポート直叩きが通用する
とかな
>>474 でも、その手のソフトはPCIなんかの拡張ポートには対応してないこともしばしば…
シリアルだと、Windowsに標準で入ってるハイパーターミナルを使ってデバッグ表示ができる AVRのオン、オフもハイパーターミナルの接続、切断ボタンでできる
しかし、ハイパーターミナルの出来は最悪
479 :
774ワット発電中さん :2009/05/27(水) 15:28:04 ID:r8F3Har7
出来損ないだからね
オヌヌメのターミナルきぼぬ
いまは無きxtalk
KTX
WTERM
Acknowrich 任意のボーレート設定可能
JTERMもしくはCCTでOK
パーツは揃えたんだけど 帰ってきたらブレッドボード触るのもめんどくさい 買い物だけは楽しかった ああ楽しかった・・
ところでteratermの名前が挙がらないのはなんでですの? ム板やUNIX板辺りでは常識ですよ
puttyが好きだからです。
bray's terminal
ctty って言おうと思ったらNT系はもはや存在しないんだな。modeはあるくせに・・・
フリー、マクロ組まない、よって不要
通信ソフトといえば、ふつ〜 ULTmini だろ。 え?バックスクロール機能が無いって? だって、ふつ〜 xscript を常駐させているだろ? あ?
copy con com1:
>>495 残念ながらCOPY CON AUX でもVistaは機能しない。
>>494 うわっ、懐かしい・・・・
マクロがよかったよなあ
mikroBASICに入ってたシリアル通信のソフトが使いやすかった。
WTERM、神ソフトだった。今は....
Bascom-avrのシミュレータって使えないよな。 Wait入れると異様に処理が思いし、InputoとOutputのシミュレータは動作がおかしいし。
>>500 $sim
ってコマンド入れるとWaitが無視されますよ
>>501 ありがとうございます。
waitの重いのは治りましたが、緑のランプと赤のランプの動作がどうしてもおかしいんです。
loop_forever: rjmp loop_forever
すいません、この板でmicroSDカードのアダプタ側の端子を ピンヘッダに直接ハンダ付けしてブレッドボードに差せるようにした、 みたいな記事を数ヶ月前に読んだ記憶があるのですが、 知っている方いましたら教えてください。
>>504 おいらがやったのは、microSD付属のSDカードアダプタ。
これがどうにか2.54mmピッチに乗るからピンヘッダを半田付けして、ブレッドボードやユニバーサル基板に使った。
データはmicroSDにのせてるから、ソケット代わりになってる。
PDIが使えるのかどうが不安なので、互換品以外を探してたら たまたま、ATJTAGICE2が半額だったのを発見したので 個人輸入しようと思ったら、在庫が無かったorz ところで、 xmega(ATXMEGA128A1-AU)も$6.37だったので 併せて輸入しよかと思ったんだが、規制とか無いよね? みんなPDI使えてる?てか、xmegaに手を出してる?
だれかこのプログラムの間違いを指摘してください。 正しく動作しません。 $regfile = "ATtiny2313.dat" $crystal = 1000000 Config Portb = Output Config Portd = Input Portd = 1 Do If Pind.3 = 1 Then Portb.0 = 1 End If Loop End
>>507 どのように動作させたいのか。そのくらいは書こうよ。
>>508 「何をしたいのかわからない所が間違い」と指摘してあげるのが正解なんじゃ?
>>507 PORTBを全て出力に(DDRB=0xFF)
PORTDを全て入力に(DDRB=0x00)
PORTDのbit0を立てる(入力指定なので、PD0のプルアップとなる)
Do
PD3が1(High)なら、PB0を1(High)にする
Loop
初期設定は不明(リセット後デフォルト任せなのでたぶんLow)のPB0が出力で、
なぜかPD0をプルアップして(その後使っていない)
ハイインピーダンス入力(プルアップしてない)PD3の入力がHighになったら、PB0をHighにする。
PD3がLowになってもその時の処理なんかどこにもないから、上記以降PB0はずっとHigh
意図する動作はこれでいいですか?
AVRをオーバークロックして常用させてる人っていますか? ENC28J60が25MHzなんで、同じ25MHzにして動かないかなー と考えてるんですが。mega88辺りで
誰も保証しない。それでよければ試せばわかる。
そんなことは判ってます 俺はこんなにOCして納品したぜ、見たいな人に聞きたかったのです
複数のレジスタをまたいで論理シフトさせたいんだけど、 アセンブラで書こうとした場合、どう書くのがベストなんでしょうか? 論理シフトさせて空いたビットに0でなくキャリーの値を入れる命令があれば 簡単だけど、それは無いみたいだし... 例えば、 R1 R0 00110011 11001100 を左シフトさせて、 R1 R0 01100111 10011000 とさせたい場合、どう書くのが一番効率が良いんでしょう。
ADC
517 :
774ワット発電中さん :2009/06/04(木) 09:21:57 ID:BsRQYSOa
>>514 誰も保証しない物を納品するには、あんたが保証するしかないのだが。
518 :
774ワット発電中さん :2009/06/04(木) 09:27:30 ID:BsRQYSOa
519 :
774ワット発電中さん :2009/06/04(木) 10:20:50 ID:BsRQYSOa
>>516 でも正解だね。
ROL Rd = ADC Rd,Rd
>>514 マイコンに限らず部品のスペック外で設計して
納品するとかあり得ない。
まあ、学生のロボコンとかならいいんじゃね?
そうですか メモリ等に選別品があるように、マイコンも自分で 選別すればいいということですかね
522 :
774ワット発電中さん :2009/06/04(木) 15:25:32 ID:BsRQYSOa
>>521 選別を信用させるだけの信頼も獲得しなければならない。
メーカーの規格外で運用するものを出してる時点で信頼はなくなると思うけどね。
黙ってやれば・・・どうなってもシラネ。
一部のMBみたいに、オーバークロック設定をユーザーが自分の意志でできるようにすると言う手もあるが
AVRでそんな商品ちょっと思いつかん
てか人に聴かないで自分で試せよ オーバークロックの醍醐味は自分でどこまでクロック上げられるかに挑戦するだけの自己満足なんだしさ
>>521 選別って言ってもなぁ・・・ただ動けば良いってもんじゃないし。
動作保証温度範囲での異常動作が起こらないことの確認やら、
電源マージンの確認やらが必要で、まともな仕事をするところなら
これらの保証に必要なコストを考えて、製品として販売するものに
スペック外での使用をするなんてことは考えないだろ。
素人じゃない限り、AVRに25MHzの水晶が付いてたらゴルァするだろJK
電圧あげればおk ただしヒートシンクつけた方がいいかも
>>507 Portdをプルアップさせて
Pind.3のスイッチを押し、グランドに短絡させLowにし
Portb.0の出力をHighにしたいなら・・・・
$regfile = "ATtiny2313.dat"
$crystal = 1000000
Config Portb.0 = Output
Config Portd.3 = Input
Portd.3 = 1
Do
If Pind.3 = 0 Then
Portb.0 = 1
End If
Loop
End
>>527 たぶんまた「意図した動作しません」と言い出すぞ。
何を意図しているか書かないままで。
>>525 いやいや、25MHzのXtalが付いているけれど、
内部RCクロックで動いているかもしれんw
>514 少なくとも現役がそんなの言うなんてありえんと思われ やむ無くの処置でもクレームの恐怖に無かった事にしたい記憶だろ スペック外を平気で出来るのはアマチュアの特権
>>521 MEGA8535を20MHzにオーバークロックして使ってるぜ
24Mhzを積むと、シリアルを3Mhzに設定でき、これがFTDI最速3Mhzとマッチして快調となる。
FTDIはもうUSB2.0の世界に旅立ちました。 FT2232Hの挙動が変だから結局、245を使ってるけど。
Crystalが25MHzでも内部2分周なら桶。
2313で38kHz出力したいんだけど、 どうすればいい?
他の処理の程度とか周波数の精度は? 適当で良いならタイマー割り込みでポートたたくんでも良いと思うけど
単に赤外線の送受信がしたいだけだから精度はそこそこでいいんだけど いまだに割り込みとかよく分かって無いんだよね
>>536 int0にパルスジェネレータで作った38kHzのパルスを入れてだな・・・・
>>538 赤外線リモコンの送信ならぐぐれば事例がたくさんでてくると思うよ。
これを機会に割り込みつかってみれば
>>539 パルスジェネレータを2313で作りたいのですがタイマ割り込みとか判りません!><
つかそんな変な方法教えるなと。
無理にタイマでリモコン信号ださなくても、delay_usでしこしこパルス
出すんでもいいんじゃないかと。それなら処理をずらずら書くだけだから。
タイマで割り込みが入るたびになんてその後でいいよ。
ありがとう 割り込みとか勉強してみる
割り込みは一度覚えたらやめられん、スイッチ入力も割り込み使った方が楽になるから。
タイマー二つ以上使いたい場合はやっぱり並列で使うんですか?
2個使うならそういうことだけど、どうせ同時には取れないので AVR規模の場合は1っこを工夫して使いまわす事も考えた方がいい コードサイズ小さくなるばかりか効率も良くなる 必要な一番細かい精度でタイマを作って、 他の用途は分周させるなどして使いまわす
Tiny2313でタイマ1個で擬似マルチタスクなんてこともできる まあ全部のレジスタ退避なんてしてらんないから かなり限定的だけど
malloc使える?
>>547 使えるけど、どのAVRデバイスで使うつもり?
ありがとう使えるのね。ATmega168と128です。 行列計算のためにかなり配列使うんで、できるだけ無駄の無いようにきっちり必要な 数だけ確保と、不要になったら早目に開放しようと思って。 やっぱりmallocとfreeは静的確保に比べてかなり処理時間かかちゃったりするのかな。 とりあえずPC用にCで書いたの移植し始めてみます
>>549 GC無いからfreeの順序には気をつけよう。
別に解放したからって別の用途に使われるってものでもないならあんまり意味は無いけどね
vusbと割り込みは相性悪いですか?
>>552 でかい配列使わないときに深いスタックを使うとかローカル変数確保しまくるなら意味あるのだろうけど、
でかい配列使った演算の時のスタック使用量も大きいなら、最大見込みの配列を確保するだけの方がいいかもね。
演算の種類によって違う形態の配列を確保するとしても、unionで共用して排他的に使用する手もありそうだし。
vusbとmega88でopenOCDで使えるJTAGドングル作ったお
SRAM最大で4Kしかないのにmallocとか 笑わせてくれる
void swap(float &a,float &b){ float buf=a; a=b; b=buf; } コンパル時にエラーでます。何でですか
>>557 ポインタ渡しの関数なら
void swap(float *a,float *b)
で
float buf=*a;
とかじゃありませんでしたっけ?
まずエラーの詳細を日本語に訳せ すぐ原因がわかるだろうから
C++使いたいならC++コンパイラ使わないと
d 関数の引数で&ってC++しかできなかったのか。知らなかった
562 :
774ワット発電中さん :2009/06/08(月) 09:41:27 ID:qd2zYhsU
そりゃまぁ、テンプレートの無いCでポインタ渡しと別に参照渡し導入する意 味無いし
関数側で&になってると、勝手に書き換わっててゴルァってならない? 便利だけど、いいんだか悪いんだか・・・
その辺はC++のオペレータオーバーロード導入の際に必要不可欠だったのです 値渡しすると効率が悪すぎるので
プログラマの予期しないところで副作用が出るというのは 迷惑なものの一つだわな
const ろくに調べないアホばっかだな
INT0をマスクしちゃってました。
>>566 なるほど、関数に値を渡すときは、全部 const にキャストしろってことですね。
いちいちconstにキャストしておかないと何がおきるかわからないと
>>568 ,569
たぶん違うと思うぞ。
関数側で引数をconst宣言して、関数内で変更しない事を保証するんじゃないのか?
constにキャストって違和感があるんだけど、 具体的にどういう意味なんだろう
すでに純関数型言語の世界に移住した身としては、 むしろconstじゃ無い方が気持ち悪い
>すでに純関数型〜 なんでそんなのがこのスレにいんの?
void * memcpy
(
void * dest,
const void * src,
size_t len
)
>>568 ,569はこういうのを言ってるんだろうけど、
これをconstにキャストって言わんのじゃないかと。
constを無理やりconst無しにcastすることはあるけどな(いい悪いは別として)
TWIうごかないちゃん
577 :
774ワット発電中さん :2009/06/11(木) 22:43:43 ID:NDp2KJTN
ちょっと前に騒いでいたMega644PのUARTのバグがどうこうの件は 結局Fuseの設定ミスなのかよ
そうなん? 結論が出たなら教えてほしい
Mega644PのUARTのバグの件はAVR-Wikiを見てくださいです。
CKOPTかー
SPIが2つあるAVRってありますか? CSで切り替えるべきなんでしょうが、信号レベルが3.3Vと5Vがあるので
>>583 AVR側がマスタで良いならUSART2つあるmega164あたりはどうでしょう?
使ったことはないけどSPIモードってあったような気がします。
今話題の644Pですね データシート見てみます
SPIって1バイト送ったら1バイト返ってくるっていう決まりですか?
644Pにはいろいろ罠があるからSanguinoはトラブルが多くて普及しなかった それでIlluminatoでは645を使ってる。644Pより645の方が安定してるから御ヌヌメ
>583 mega48あたりでも二つあるが。ナマのSPIと、USARTのSPIモード。
644Pってだめぽなんだ? どこに書いてある?
591 :
332 :2009/06/13(土) 16:38:27 ID:kQZNZ/Y2
UART0問題、皆様のおかげで私も解決しました。 やはり低電力発振が悪さをしていました。 クロック源に関するデータシートをよく読んでいればよかったのですが、 ISPの画面をぱっと見ただけで選んでしまうと低電力発振を選んでしまいそうです。 低電力発振を使う気はないですが、安全に使う方法があるのでしょうか?
>>591 低電力動作を追求する為のモードなんだろうから
頻繁なI/O操作をしない用途なら平気では?
XTAL繋げるピンとPDの間にGNDパターン通してきちんと
XTAL周辺囲ってみるとかの対策は当然として。
情報を小出しにするからそうなる。 最初から実験環境からフューズ設定まで開示していれば一発だったろうに。
追っかけて実験したものだけど、うちも同じミスでした。 もう644Pは使わない方向で設計をすすめましたが・・・・ オシロで発振を見て20MHzに見えてたから問題ないと思ってたけど、 そのあたりもちゃんと読んでたらよかったですね。
本によるとAD変換の変換値は 変換する対象の電圧 / 比較する電圧 * 1024 = ADC らしいので、一度VREFの電圧で内部基準電圧1.1を測定して、その値が ADCだった場合、VREFの電圧を知るには、 1.1*1024/ADC = VREFの電圧。 で、合ってますか? これで計算させてみた電圧と、テスターで計った値と比べてみると 数ミリボルト違うんですが、これは計算が間違ってるのか、テスターが おかしいのか、AVRのAD変換の精度の問題なのか分かりません。
その1.1V、あまり当てにならないんじゃない?
ありがとう。データシートにも内部基準電圧1.1vと書いているぐらいだからこれは かなり正確なのかと思ってた。そうでもないのか ということはArefの電圧も、Arefを基準としてセンサーからの電圧をAD変換した 値から計算する電圧も数ミリボルト単位で正確に得ることは難しいのね
シャントレギュレータで基準電圧を作るべし さらにマニュアル通りにベタGNDで、AVccにはコイルとパスコンでノイズ対策を。
やっぱり電圧が分かっていて安定している外部電圧を基準電圧とするしかないんですね それでいってみます
チップに内蔵してるとどうしても誤差が大きい。 A/Dも外付けのほうが精度いいし。
つ適材適所
趣味でハードを弄ってるレベルだと適材適所がわかんないだろ。 知ってるなら教えてやればいいのに。
>>603 精度が許容できるかとか、予算とか実装面積とかを考えるわけで
知ってるとか知らないとかそんなんじゃなくね?
1に目的、2に実現性、3,4が無くて、5に懐具合
>>596 誰も突っ込まないけどテスターの精度とかどうなのよ。500mVレンジで0.5%でも2-3mVはあるだろ
当然だがAD変換にも誤差はあるわけで、必要な精度を決めずに組んでもいいことないぞ
「なるべく正確に」程度に考えてるんなら1%ぐらいは見込んでおいた方がいい
それ以上目指すんなら、アナログ回路とか基板設計とかノイズ対策とかそれなりに勉強しないと難しいぞ
そこまで精度が求められるって、何を作ろうとしてるわけ? 精度を求めるなら、AVR以外の選択肢もあると思うが、AVRにこだわるわけはなに?
初心者っぽいし、プログラミングとかのノリで「デジタルにすればきっちり値が出る」って感覚なんじゃないかとオモ デジタル回路なら回路図どおりに結線すれば動く、みたいな勘違いと同じ気配がする
初心者だと、5%ぐらいの誤差ってのが物理的には意外とマシな方っていう事実を意外と理解できない。 それに、誤差の程度って奴がパッと見で暗算できないから 安物デジタルテスタでも数字がカッチリ出されちゃうと、その数字が真値だと思い込んじゃうんだ。 針式アナログテスタだと気にならない様な程度の誤差であってもね。 フルスケールで0.5%の誤差とすれば、4000カウントで5V計ると40Vレンジでの測定になって 0.2V程度の誤差が出るとかの判断は、多少は慣れないと無理だし。
>>609 > 安物デジタルテスタでも数字がカッチリ出されちゃうと、その数字が真値だと思い込んじゃうんだ。
あぁ、これは確かにあるね。
俺はデジタルテスタの場合上位2桁しか見てないなぁ・・・
数値表示ってのは意外に使えないもんなんだ。実際の測定器でも 入力→AD→デジタル処理→DA→アナログメータ ってのが結構あったりする。
>>611 リニアリティ補正や対数目盛りなど、ソフトで校正できるね。
AVRでいろいろなデバイスを趣味で作りたいのですが 今入手し学ぶならどの石がいいですか? 当方大学で電気を習っているので、ある程度の知識はありますが、 実用的な電子工作はあまりやったことがありません ハンダを使った工作は高校でいくらかやったことあります コテとハンダとテスタはあります。まずブレッドボードと抵抗、LED等を買おうと思います。 ライタはChanさんのISPライタを使用します。 電源は5Vのスイッチング電源は持っているのですが、石によっては3.3Vで使わないと いけないのでしょうか? あとネットでまとめて買うので買ったほうがいい抵抗の種類を教えてください。
秋月のmega88がオススメ3〜5個買って、あとはtiny2313を数個買っておけばある程度できる。
抵抗は100,220,330,470,1K,4.7K,10K,47Kあたりが妥当かと。 あとパスコン用に0.01μFと0.1μFのコンデンサと10〜100μくらいの電解コンデンサもいる。 内蔵クロック使えないときのためにクリスタルオシレータもほしいかも。 あと15pFのコンデンサと水晶振動子とか。 mega88とtiny2313は5Vでも動くので大丈夫。
秋月のmega88を2個以上買う予算あるなら千石かマルツでmega168を 1個買ってきてブレッドボードで簡易Arduino環境作っとくといいかも 抵抗は100 1k 10k 470 4.7k 47k 330 220 2.2k辺り ブレッドボードは秋月で600円ぐらいの少し長い奴と150円の数枚あれば困らない SDカードとか繋げるなら3.3Vも考慮 水晶周りは秋葉行けるなら秋月店頭が安い
ブレッドボードでADC使うのは酷ですね〜
>>614-616 回答ありがとうございます
ブレッドボードとジャンパ線はストロベリーリナックスで安売りしていたのと、
微弱無線モジュール(これを使うことが第一目標)がほしかったのでそこで買いました。
ブレッドボードの穴の数が少なく、一応2枚買いましたが、回路が大規模になると蛇の目や
プリント基板(大学で作らせてもらえるので)を使うので、よしとします。
あとは秋月などでAVRと抵抗その他を買うのみですが、どこにするか迷っています。
送料を抑えたいのでまとめて買いたいからです。
屋外で手持ちのLinuxが入ったノートPCと繋げて使うこともあると思うので、Arduino環境も
作っておきます。
あと、近くに無線パーツ屋さんがあって、抵抗などが打ってあるのですが少々行きにくい場所に
あるので、少量買う場合のみ使おうと思います。
>>618 最初から人に聞く教えてクンじゃなく、ネットで電子工作の基本調べるなり、
技術書買うなりしたほうがええんじゃないの?
教えてもらってばかりで安全なルート進むより、ぶっ壊して覚えて行くほうが
何かと後々都合が良い。なぜ壊れたのかとかを調べまくる。
最初くらい安全に進んだって別にいいじゃない。
Arduino環境もやるなら0.047μFを買っとかないと自動リセット出来ないYO!
>>619 どうせすぐに壊しまくるさw
みんなそうしてきてるんだし。
>>620 最近の子って自分で調べたり考えたりする力が無くなりすぎw
提供する情報に微妙にフェイク混ぜとくと面白い
625 :
774ワット発電中さん :2009/06/16(火) 08:42:43 ID:uZ74eF2v
それなんて教育的秋月キット?
中学生の頃に作った秋月の周波数カウンターキットはなかなかだった
v-usb macだと認識されるのにwindowsだとusb hidのドライバ認識で認識されない。何でだーーー 普通逆だろ〜
@AVRやAVR工作の初歩的なことはどこかにまとめサイトを作ってまずそっちを教える。 Aそれでも不明ならここで質問する。 BQ&Aとして利用価値が高いならまとめサイトに誰かが追加する。 C終了 初心者が質問してくる@へ
まずは、
>>628 がまとめサイトを作るところから
始めようではないか
AVRやアンデュイーノ?ってまとめのwikiみたいなのなかったっけ?
こんな一件を見るに もはや中華の方が電子系の技術力は上な気がする 品質はともかく
ん。でもって、 これから先、低電力発振では不安定だぞって言い張ってまわる姿が目に浮かぶ。
>>633 それで救われる人がいくらかはいるなら、いいんじゃない?
不安定なのは当たり前だな。 消費電力を取るか、耐ノイス性をとるか…
>>631 TINY2313で隣のピンの信号でクロックおかしくなるとか誤動作するとか聞いたことないんだが。
どちらかと言うと他の石だと低電力で不安定になる事があるからフルスイングをつけたって事じゃね?
注意するのは結構だが、無駄に不安を煽ったり低電力だから使えないとか決め付けるのはいかがなものかと
すまぬ。ちょっと嵌ってしまった。WinAVRなのだが、 char buff[20]; float f; f=1.23f; sprintf(buff, "%1.3f",f); とかやると、buffの中に”?”って入るんだ。WinAVRのsprintfには小数点のフォーマットは サポートしていないの? %dとかだと普通に整数は出来上がるのだが。
バッファ確保した時点での中身は確認したの?
?
>>637 コンパイラオプションがいるのでは?
If the full functionality including the floating point conversions is required, the following options should be used:
-Wl,-u,vfprintf -lprintf_flt -lm
質問すりゃ「自分で調べたり考えたりする力が無くなりすぎw」 とか「どこかにまとめサイトを作ってまずそっちを教える。」 なにこれ、雑談スレじゃねえか
>>641 In The Full Functionality, They Cannot Teach You At All.
>>641 職業版でも所詮2ch。本質は雑談スレでしょ。
このスレは異様に親切だと思うけど・・・ 適当なこと言う人も居るけど、 なんだかんだで誰かがキチンと答えてる
同意
>>640 ありがと(´∀`) それ見て隣家オプションで解決した。
>>641-645 すっかり教えてくんでした。ググっても%fは〜って特に記述がなかったので
隣家オプションがあるなんて気がつかなかったんだ。スンマソ(´・ω・`)
>>632 当たり前じゃん。
FPGA技術とか見てると部品市場もあっちの方がはるかに巨大だぞ。
セラロックは相性があるからね。発振すらしないCPUもまれにある。
電子立国の時代は終わったのだよ これからの日本経済は環境関連が牽引していく 環境に関しちゃ中国のはるか先を行ってる
>>649 >環境に関しちゃ中国のはるか先を行ってる
そんな最後尾の国を引き合いに出されても…
環境って、ビジネスモデルが宗教と似てるんだよね 実際どれ程の役に立つのかはっきり判ってないけど、 とりあえず信じて流行に乗っとけみたいな 宗教と違うのは極端な具体例を出せ場合があるってとこかな 今後色んな裏付けが取れて矛盾や嘘に気付いても たぶん状況は変わらないんだろうね
環境といっても、実質はWinAVR 一択だろ、JK
>>653 いや、そのうち、超低二酸化炭素排出、循環型の
開発環境が発表されるに違いない!
@超低二酸化炭素排出、循環型の開発環境の初歩的なことはどこかにまとめサイトを作ってまずそっちを教える。 Aそれでも不明なら自分でスレを立てる。 BQ&Aとして利用価値が高いならまとめサイトに誰かが追加する。 C終了 初心者が質問してくる@へ
656 :
774ワット発電中さん :2009/06/18(木) 11:35:35 ID:NTUAR+ia
CLR Acc これってキャリーフラグを保持したままでクリアしないんか (涙 デバッグに費やした24時間返しやがれ
660 :
774ワット発電中さん :2009/06/18(木) 18:41:56 ID:NTUAR+ia
>>659 正体はEOR Acc,Accだからな・・・
でもフラグの変化くらいデータシートで確認しろよ
EOR動作であることも書いてあるぞ。
661 :
774ワット発電中さん :2009/06/18(木) 18:45:31 ID:NTUAR+ia
ってあれ、キャリーフラグで、しかもクリアしないことに対する涙か? そりゃあ変化しないフラグは変化しないだろ。 LDI Acc,0でもクリアしないわけで、中の数値とは関係ないでしょう。
バグが解決したことへのウレシ涙... 6809ではCLRでキャリーフラグも reset したので同じとオモテタ。 あまりにも基本的なニーモニックであり、舐めちょりました。
663 :
774ワット発電中さん :2009/06/18(木) 19:43:57 ID:NTUAR+ia
>>662 へえ、そうなんだ・・・
流石に20年経つと忘れているw FM-8でお世話になりますた。
>>662 基本的な部分でもCPUが違えば異なる場合があるので注意。
LD/MOV命令でもゼロフラグが変化する/しないとかCPUによって違ったり。
>>664 うむ。大学に入ったときに68系のCPUいじってたので、
ソフトハウス(死語ですかい?)のアルバイトで、初めてZ80(CP/M)を使ったときに
LD A,#0 でゼロフラグが立たない事に悩んで、一日無駄にしたことが。
(時給なので、一日無駄にしようが、無駄にしなくても500円/時間貰えたが←安っw)
なんでやねん!ってオフセットのZ80と なんでやねん!ってバンク切り替えのPIC いいものがメジャーにならない、その1、その2
>666 先行者メリットって所だね。 同時期に出たものならともかく、数年も遅く出して 良いもの作ってもだめって事 (先行品を参考にして悪いところを改良できるのだから 良いものを作れるのは当たり前) PICより先にAVRが出ていたら、AVRは売れてるけど低性能で PICは売れないけど高性能と逆になってたと思うよ
>>666 俺にとって、最大の「なんでやねん」は8088/86だったなぁ・・・
>668 当時は力不足になった8bitのZ80より少し上なCPUが欲しかったんじゃないか 32bitまで意識した68000は理想も値段も上を行き過ぎたと思う。
AVR が売れないのは日本支社と営業のせいだとあれほど(ry
>671 発売が遅すぎた。
>>672 発表から発売までが長すぎた・・・だとオモ
Arduinoをマスターしたのでそろそろ生AVRをやるべきか
AVRStudioってソースコードの左側に行数表示するようにできないの?
>>676 他のラインは、AVRがHi(5V)のとき、SDに3.3Vがかかり、Loのとき、0Vでしょ?
CSの線は4.7kが5V電源ラインにかかっています。AVRがHiのとき、抵抗2本とも相手が5Vなので、5Vがかかります。
それだとSDが壊れるので、3.6Vツェナーで落としています。
AVRがLo(0V)のとき、抵抗分圧でCSには約1.7Vがかかっていることになります。
SDカードが確実なLo信号と見てくれるかには、不安定な気がします。
DATA OUTはSDがHi、Loを決めるので、0Vか3.3Vで遷移します。
データシートではAVRのHi入力の最下限は5V動作で、VCC×0.6=3Vと読めますから、どうにか範囲内です。
>>676 寝ぼけ眼で眺めただけだけど、AVRがリセットされたとかで端子が
ハイインピーダンスになったときにCSを'H'にしておきたいから+5Vで
吊り上げた回路にしたんでしょ
VILには気をつけてな
おおおーなるほど ローアクティブってことですね 納得できました ありがとうございました! でもさっきヒューズ飛ばしてmega88壊しちゃった\(^o^)/ 書き込み時に間違えて12Vが入ってたらしい。以降書き込み不能 avrdude -Fで無理矢理読むと Device signature = 0xffffff lfuse = 0xff hfuse = 0xff efuse = 0x7 パラレルライタで直るのかな? 250円とはいえ交通費含めると痛い
mega88Pなら250円じゃない?
>>675 AVR-FREAKSのフォーラムにも話題上がってたが出来ないらしいorz
www.avrfreaks.net/index.php?name=PNphpBB2&file=viewtopic&t=62764
と言うわけで私は専らPN2使ってる・・・
>>681 おおありがとう。調べても全然出てこないはずだ
これはかなり不便だよね
683 :
774ワット発電中さん :2009/06/21(日) 18:31:25 ID:KJ/+OGjB
mikrobasicとBASCOMの比較をしているサイトってないですか? FastAVRは「 BASCOMよりコンパクトで速いオブジェクトが得られまっせ!」 みたいな宣伝してたところがあったみたいですが、 最近の石に対応してないところを見るとぽしゃっちゃったみたいだし、、、 両方使った方、感想を教えてください。 ちなみにCやアセンブラは宗教上の理由で使えません。
サイトに書いてあることなんて信用するのか・・・
アセンブラー使わずに直接バイナリで書け
カルトな異教徒の質問にゃー答えられませんにゃー
BASICも宗教上の理由とやらに加えてくれ。 そうすれば答える必要がなくなる。
ハイインピーダンスの水晶まわり扱うのにブレッドボードで やってる段階で資料価値ほとんどないぞ。 USARTの一件で得られるのはそういう知識だと思うが。
比較試験のためにノイズの乗り易いブレッドボードを使っています。 発振の安定度を測るいい方法が思いつきませんでした。
一度、発振出力を受信機で音として聞きながらいじくり倒してみれば、 発振回路がどれほど敏感なものなのか身をもって知ることができるんだけどねぇ。 無線が廃れた今となっては、そんな周波数が聞ける受信機を持ってる人は 殆どいないのだろうね。
内蔵発振でやってくれたらあんま悩まずにすむのにね xmegaでは内蔵で32MHzやってるんだし、 Tinyとかmegaでも対応した品種はでないだろうか?
ブレッドボードはピン間の静電容量が大きいからな。 時計Xtal回路なんか発振すらしないこともあったし。
>>692 水晶を内蔵するためには、内部に真空または窒素置換した空間を作らなきゃならないから
コスト的にも大きさ的にも苦しいと思うよ。
今ならMEMSでイケる! ような気がする・・・・
ああいう内蔵の発振回路ってシリコンなんじゃないの? xmegaの発振回路も、精度が必要なときは外部のクリスタルで 校正できるみたいな事書いてあるし、PLLとVCOみたいな構造かと思ってたけど。
C8051のクロックのようなのが欲しいな。
>>695 MEMSでもやっぱり空間は必要だよ。
シリコンの上で、機械的にプルプルする部分が必要だから
(完全にモールドしちゃったら振動できないw)
700 :
774ワット発電中さん :2009/06/22(月) 10:19:00 ID:H9Vp8x8t
>>676 しかし、こういう目的なら、CSをSDのVddにプルアップして、AVR側はHi-ZとLow出力で
制御してもいいと思うんだけど。それならツェナー要らないかなと・・・
AVRのプログラムミスや暴走でHigh出力とかプルアップ入力になった場合を考慮してなのかな?
>>700 10KぐらいでCSを3.3Vにつって、小電流ダイオードをAVR向きにつける。これ、どう?
AVRがHiロジックで5Vだしても、ブロック。LoでVf分だけ残る。
波形なまるかな?CSだからいいんじゃないかな?
703 :
774ワット発電中さん :2009/06/22(月) 13:57:39 ID:H9Vp8x8t
>>701 あ、そうだね、これでAVRがだしうる電圧については問題なしか。
素直にCPUも3.3V駆動しようぜって話にはならんのか?
705 :
774ワット発電中さん :2009/06/22(月) 14:19:30 ID:H9Vp8x8t
>>704 あ、そうか、
>>676 はArduinoでやるわけじゃないのか。
それなら3.3V駆動が一番だ・・・もし高クロックが必要なければだけど。
つ入力トレラントのロジック まあ、勿体無いか
74LVC125
>>701 ダイオード入れときます
ありがとうございます
>>705 現在ethernetを繋いで20MHzで5V駆動してます
トレラントのない5V系のセンサ類を繋ぐ予定なので、
どこかで5V-3.3V変換をやる必要があります
3.3Vレギュレータが既に入ってるので、
どうせならSDの読み書きでも練習したいなと
>>706-707 125も考えましたが、なるべく小さく安くしたいです
>>709 「成果報酬ならアフィリエイト TOPからお入り下さい」って出るね。さいなら〜
>>711 TCCR0Bの初期化はどこへ行った。クロック元指定しないと動作始まらないぞ
あと関係ないけど、初期化してないのにOC0Bを有効にするのはどうかと思う
713 :
774ワット発電中さん :2009/06/22(月) 22:46:32 ID:jcg7OVtC
>>712 そうでした…
もっとデータシート読み込んできます
ありがとうございました。
>>693 前、ブレッドボードでは動いたのに、4層基板にすると動かない ってことがあったぞ。
一瞬、本気で、ブレッドボードで納品しようかと思ったくらいww
(アナログとデジタルの島の分け方をミスったのが原因)
>>714 ブレッドボードを黒モールドで完全にモールド。
客先には「回路部分は秘密ですので・・・」
スレチかもしれませんがわかる方いましたら教えてください。 温度センサー(LM61BIZ)をAVRにて計測しようとしています。 そのまえにどのような値が出力されるかをテスターで計ろうとしたのですが 気温25℃くらいのときにVin5VにてVout430mVとなっています。 データシートによると25℃にてVout850mVのはずなのですが・・・ (ちなみにVo=(+10mV/℃xT℃)+600mV) なぜこんなに違うのかがわかりません。指摘お願いします。
初心者な質問ですみません。 Reset ピンはプルアップする必要がありますでしょうか? もししなかった場合にどのような状況になるのでしょう。
718 :
774ワット発電中さん :2009/06/23(火) 18:07:15 ID:KSMOpYFP
>>716 使っているのはデジタルテスタ?
出力インピーダンスが800Ωあるようなので、
内部抵抗がむちゃくちゃ低いのだとそういうことはありえる。
とはいってもいくら何でも内部抵抗1kΩってことはないか・・・
>>718 レスありがとうございます。
デジタルテスタを使ってます。
内部抵抗というのはテスターの入力インピーダンスのことでしょうか?
的を得ていなかったらスルーしてください(ーー;)
仕様書では1MΩとなってますが・・・
720 :
774ワット発電中さん :2009/06/23(火) 18:43:34 ID:KSMOpYFP
>>719 デジタルならまず問題ないねえ。アナログでもあり得ない誤差だけど。
故障なのかな??
火を近づけたりして値が変化するか確かめた? VinとVoutを間違えてるとか
>>716 念のためだけどVoutだけど測る場所間違えていない?
VoutはGNDとVo端子間の電圧
うっかりVssとVo間を測ってしまわないように
>>717 Resetというのは外部からスイッチをつなぐなどして信号(GNDへのパルス)を与えて、マイコンの動作をリセットするための端子
IOPortなどと共用になっているのはレジスタで設定をReset以外に変えれば大丈夫
ResetモードになっているときでもVCCにプルアップされているから大丈夫
もししなかったら、GNDと接触した際にResetがかかる
>>720 >>721 火を近づけたらVoutが下がっていっておかしいと思って調べたら・・・
お騒がせしました。VinとGNDが逆でした。
現状Vout868mV(26℃前後)正常値が得られたようです。
恥ずかしい限りですすみませんでしたm(_ _)m
壊れないのか。
>>724 Over current protected
こういうスレにも幼稚なのがいるとは +−を間違えてた俺が言うことではないが・・・
>>727 Die With Your Boots On!
>>725 is not silly Q&A like you.
AVRとあんま関係ないけど、 組み合わせてる人が結構多いみたいなので書いておく。 ENC28J60のRevにB6は存在しない。 チップからRevコードを読み出して0x06と出た人、それはB7だ。 B7のErrataのpdfを見れば判るが、00000110はB7だと書いてある。 間違ったまま納品書にも書かれてたりして性質が悪い。 B6のErrataがないことからも推測できたことだが、 自分も今まで勘違いしてた。全く紛らわしい。
PICとAVRのスレを両方見てる奴はいないと踏んだのかw
>726 ナデナデしてください
732 :
774ワット発電中さん :2009/06/24(水) 12:24:06 ID:XYpWWObF
age
>>691 受信機で聞く手があったか、今度やってみるよ。
無線機持ってる人は少ないけど受信機持ってる人は多そう。
ちなみに俺の受信機は100KHz〜1299MHzまで聞ける。
初心者はCから入った方が簡単だと思う
AVRはじめるのに良いキットありますか?
>735 普通にSTK500と石を買っとけば問題ないと思うが。
STK500 は使いにくいだろJK
STK600てのも出てるYO! Xmegaするならこっちのほうが良いYO!
>>740 どう使いにくいのか説明が必要だな。
STK500だとプログラミングの勉強はできるが電子回路の勉強(デバイスの勉強)は
まったくできないので、ブレッドボードも買ったほうがいいな。
今だったら、 tiny26かtiny2313、ブレッドボード、パスコン用0.1uF×1、LED数個、 500Ω前後の抵抗数本、単三×2本の電池ボックス×1、ChaNさんところあたりのライタ ぐらいで始めるのが一番遊べるとオモ
それかArduino+ブレッドボードで始めるのもいいかも。 ArduinoのIDEなんかすぐ飽きるので、素のavr-gccとMakefile で書くといいです。
>>742 むしろ、なぜ使いたがるのか説明してほしいよ。
STKは、何でもできるけど、ジャンパー設定とか余計なことが多すぎ。
素直に純正のUSBライターと簡単なボードを買ったほうがいい。
半田付けできるなら、自分でボードを作ればいいし。
>>743 >ChaNさんところあたりのライタ
って具体的にどれのことですか?
じゃあAVRSP-COMを作ろうと思うんだけど、 回路図のVCCって自分で用意しろって事ですか? 5Vだから、USBポートからとってきていいですか?
よし!明日秋葉いってSTK500買ってくる!
実行中に一部のプログラム領域を自己書き換えすることってできますか? EEPROMとかのコードをオンデマンドで読み込ませたいんですが。 ブートローダーを応用すれば可能かな?
SPMで普通に書き込めるんじゃないの?やったこと無いけど
関数オーバーライド
書き換えにはそれなりの時間が必要だということを忘れて無いかい?
「実行中に」という部分を具体的に書いてもらえないとなんとも答えようがない。
PSoCになら、「ダイナミックリコンフィギュレーション」って機能がサポートされてるけどね。
ダイナミック・コリア
>>757 プログラム領域の書き換えの話と同一にすることでもないと思いますよ。
自己リセットの外部回路とブートローダー使えば出来るけど 頻繁に書き換えるならAVRじゃなくて78K0とかの SRAMにプログラムを載せられる石を選ぶべきだと思う。
EEPROM は、プログラム領域じゃないよね。 フラッシュを書き換えたいのかどっち? EEPROMにデータを書いておいて、適当に 分岐させればいいんじゃないの?
762 :
774ワット発電中さん :2009/06/28(日) 16:23:32 ID:cDYLOUoe
atmega8用のソースコードをMakefileのmcpuだけ書き換えて atmega88でコンパイルするとエラーなくコンパイルできました。 これで動くんですかね?
案ずるよりやってみるが易し
764 :
774ワット発電中さん :2009/06/28(日) 17:12:50 ID:Uyd+7mQU
そうだね 最近やる前にあきらめること多いよね
成功することしかやらないよね
いいなぁ 俺、性交したことありません・・・
767 :
774ワット発電中さん :2009/06/28(日) 17:32:07 ID:cDYLOUoe
実はやってみて駄目だった。 アプリケーションノートのAVR094も見た。 ビット単位の操作が混じってるからだろうな。
レジスタとレジスタビットの位置が違ってるみたいだね。Fuseも変わってるし。
もってまわった質問だった割には結局「どうやってカキコすればいいの?」って話かw ドキュソはドキュメント読まないからな
770 :
774ワット発電中さん :2009/06/28(日) 21:01:16 ID:aM8sp0zk
「やってみて駄目だった」をどうやったら「カキコの方法がわからない」と解釈できるんだ?
>>770 >実はやってみて駄目だった。
なんて後出しするからだろう
772 :
774ワット発電中さん :2009/06/28(日) 21:18:41 ID:aM8sp0zk
>>771 後出しだからといってめちゃくちゃな論理展開する理由にはならん
常にまじめなレスを心がけるべき
>>752 ですが
あrづいののブートローダーの改造でできそうです
やりたい事はLEDマトリクスでゲーム作ってる人が
やってるのと似たようなことです
10万回かと思ったら1万回なのね でもプリンタのインクみたいなカウンタが仕込んであるわけじゃないよね?
自己書き換えって 大昔のRAMの時代だと なんとなくありかと思うけど フラッシュ領域を自己書き換えでプログラムが動き回るのって なんか変な感じがする
>>775 電気的な寿命というかなんというか・・・。
U/V-EPROMで中途半端な紫外線照射でたまにクズが残るような状態にでもなるのかな?
電子をすんごい加速してムリヤリ絶縁層を通過させて書き込みを行うから、 一定の確率で結晶格子が破損して劣化する。 って大学で習ったな。 1万〜10万ってのはメーカーが出してる目安みたいなもんじゃね?
どこかのサイトで実験してあったね。 カウントしながら書き込んでいって、一定回数になったらベリファイして実験してるサイト たしかに保証回数まではまともだったんだけど保証+10%前後くらいから ところどころでエラーが発生してた。数が増えるにつれてどんどんと・・。
一般的な傾向として,国内メーカ品は公称値が辛い(少なめ), 海外メーカ品は甘い 国内はうるさい大口ユーザさんが>779みたいな評価をしてツッコミ が入るからだとか
>>780 > 国内はうるさい大口ユーザさんが>779みたいな評価をしてツッコミ
> が入るからだとか
その評価をしていたのは海外じゃなかったな・・・
いろんなフラッシュを死ぬまで書き換えるってやつ。
>うるさい大口ユーザさん 法律で安全性評価が義務付けられてると国内外を問わずやらざるを得ないだろJK 大口かどうかは関係ない。
>>780 昔(電電公社や国鉄が幅を利かせていた頃)の日本は、
規格=何が起ころうと下回ってはいけない。マージンも200%とか取っておく。
設計者の意地とちょっとした真心w
って設計思想が多かったような気がする。
それが、最近では
規格=ギリギリクリアできればOK。過剰なマージンはコストアップにしかならないから絶対にNG
っていうアメリカ型の合理主義に変わったような・・・
まぁ、全面的なコスト競争になったら、後者以外生き残る道はないんだろうけどね。
784 :
774ワット発電中さん :2009/06/29(月) 09:59:27 ID:XDkKjDRr
>>773 ところでなんで単なる条件分岐による切替ではだめなの?
EEPROMに置けるコード量なんてたいした量ではないし、ブートローダーもいるから
エリア節約にもならないし。フラグ取得と分岐命令の実行時間も惜しいほどタイムクリティカルなプログラム?
>>784 「過去のファームをお手軽に移植したいから」に1クロック
はぁ・・・
>>780 から口うるさいユーザーにされてしまったよ。
海外で実験してたハズなんだけどな・・・。
まぁもう見るだけにしとくよ。
>>780 みたいなのがうるさいから。
787 :
774ワット発電中さん :2009/06/29(月) 10:52:48 ID:XDkKjDRr
>>783 部品メーカーが主導権を握っていれば必要以上に高価なパーツを使わざるを得ないけど、
多品種少量生産で低価格化に対抗する動きも出てるから再び部品メーカーが主導権を握る市場も出てくるかもね。
>>786 多分読み違えてると思うけど
誤
国内は(>779みたいな)うるさい大口ユーザさんが評価をしてツッコミ
正
国内はうるさい大口ユーザさんが>779(のサイト)みたいな評価をしてツッコミ
790 :
774ワット発電中さん :2009/06/29(月) 15:03:34 ID:HdrHbVrB
電々公社うんぬんは事実だな。 50年代から60年代はNHK規格が強くて 真空管やトランスは色や形まで指定されていたもんな。 70年代から80年代は電々公社規格が幅を効かせていた。 コネクタや、8インチフロッピまで 「この規格に達していない日本製品はゴミ」と言わんばかりに オーバースペックを要求していたんだよね。 そのおかげもあって日本製品は外国でも売れた。 アメリカじゃMILスペックは特注品扱いだが、日本じゃ同じ品質のモノが民生品だったわけで。 今は品質より価格なんだよね。 技術立国なんて遠い昔の話だわな。
>>790 たぶん、「明文化されていないスペック」に対する考え方の違いも一因じゃないかと思う。
昔は、明文化されていない場合は、使い手(客先)の有利になるように取り計らうとか、
いわゆる常識論が幅を利かせていたのに、最近は、明文化されていない場合は、明示
しない方が悪い。「こっちは仕様書をクリアするものを出したんだから文句言うな」的になっ
ているんじゃないかな・・・
もちろん、それも正解ではあるんだろうけど、なんかちょっと違うような気もするし、技術者
の「こだわり」が薄れてきている原因でもあるんじゃないかな・・・
フラッシュメモリは書き込みを繰り返すことにより絶縁層が劣化していき、 電子が漏れやすくなる。つまり、保持期間が徐々に短くなっていき、保証値を 下回った回数が寿命となる。 連続書き込みテストだとエラーになった時点で寿命はとうの昔に過ぎているわけ。 だから得られた結果には意味なんてないな。
793 :
774ワット発電中さん :2009/06/29(月) 20:07:21 ID:HdrHbVrB
でもある程度は性能の比較ができるんじゃね? すぐにベリファイエラーが出るようなら、そんなメモリは保持期間もたかが知れている。 って、本題に戻るけど 外部EEPROMの書き換えならわかるけど、内部FLASHメモリを自己書き換えする目的って何? 秘匿性を上げるために製品を開けたら自己破壊とかかね? 万が一可能だとしてそんなトラップ作ったら、ある意味、自爆製品にならないか?
>>793 フラッシュ書き換えの目的…
普通に考えるなら、客先でバグ有りファームをアップデートさせる為、とかじゃね?
795 :
774ワット発電中さん :2009/06/29(月) 20:36:22 ID:HdrHbVrB
フィールドサービスが目的なら 何のためのISPなんだよと
邪悪な悪寒
CPU 単品。フラッシュメモリー (プログラム ROM) なんて考慮外だろ。
今月のエレキジャックの「Arduino活用」は、かなり何だ・・・ 電子工作ってより、木工+酒密造の方法というか・・・
>>793 実はEEPROMというのは例えで、
最終的にはネットワークからアップデートするつもりです。
ノイマン型のマイコンでは実績があるので
性能的には十分な安いAVRに置き換えてできればと。
もし寿命で書き換えに失敗したらMCUまたは本体を交換すりゃいいし。
800 :
774ワット発電中さん :2009/06/29(月) 22:39:47 ID:HdrHbVrB
それならもう1個書き換え制御専用AVRを載せてやればいいね 書き換え失敗もネット経由で把握できるし。
>>799 なら最初からそういえば良いのにと思ってしまう。
なんと!衝撃の事実!! AVRは非ノイマンだった! おっさんしか知らないかもしれんがIMPPは面白そうだったよね。 今の時代に作っていればGPUとして生き残れたかも、とか思ってしまう。 結局、指紋照合とかしょぼいアプリを残して逝ってしまわれたのだけど。
ヒューリスティックで行こうぜ
>>799 実は繋いでみた、実はeepromは例え。
もう死んでくれる?
ノイマン型じゃないマイコンって何があるの?
ハーバード型アーキテクチャを厳密な意味でのノイマン型に含めない、ってのは割と普通。
>>807 ほほー
ほとんどのマイコンはハーバード型なんですね
「日本の技術力」マンセーは気持ち悪い まるでそれが自分の成果であるかのような日本人の態度には反吐が出る そういった考えの裏返しとして、 「(アフリカなどの途上国の)土人にはまともな経済運営ができないw」 など腑抜けたことを平然と言う 笑わせるな、10年以上デフレが続く日本の経済運営のどこがうまくいっているのか 挙句、小泉に扇動されて、デフレ下において構造改革なるもので 景気を良くしようなどという電波を発するのが日本人なんだよ (なお、サッチャー時代のイギリスのように高インフレと高失業率が並存する 所謂「イギリス病」への対処としては、構造改革は全く正しい) クルーグマンのような学者から見てみれば、日本人もまた、 まともな経済運営能力のない「土人」そのものだろう
日本は資源が無いんだから技術力マンセーすべき
すげー景気良かったんだぜ、こないだまで
813 :
774ワット発電中さん :2009/06/30(火) 18:42:47 ID:mrZSo25r
傲らず技術力重視>技術力マンセー>>>>技術力軽視
雑談かよw
TWIのエラー処理まんどくせ
ハーバード“型”アーキテクチャってのは、ちょっと引っ掛かるな。 AVR が非ノイマン型コンピュータなわけでもないし。
818 :
774ワット発電中さん :2009/06/30(火) 23:03:28 ID:Oyh/Gdtm
>>810 よく読みなおせよ。「日本の技術力マンセー」なんて誰が言ってるよ?朝鮮人さん。
マンセーって朝鮮語だろ。バレバレなんだよ。
19.6608MHzのクリスタルって、 AVRで使う上で20MHzのと比べて何かメリットあるでしょうか? (昔騙されて買っちゃった) 1秒数える時に便利なんだっけ・・?
300×2^16か…16ビットタイマ持ってれば確かに1秒作るの楽そうだけど
9600bpsとか?
AVRの場合タイマーはCTCがあるから関係なさそうですよね・・ シリアル通信なのかな
ボーレートで昔をふと思い出した。 BUSY。。ムカ。。BUSY。。。ムカ!。。。BUSY。。ヌガー!! RING。。RING。。人が繋げようとしてる時にかけてくんなよヴォゲ CONNECT 1200/REL。。キタコレ! MLINKでダウンすっかな。X-MODEMがいいんかな。 同じ世代の人いるか?
2400bps超高速モデム登場の時代かな?
>>819 むしろ20MHzなんか使わないで19.6608MHzばかり使ってるが……。
割り切りやすいし色々と便利だし。
>>824 うむ。ちみもおやぢと見た。V.42bisやらLAPM-Vとか文字を見ると懐かしくてね
>>825 たしかに色々と便利かもしれない。多い日の夜も安心だし
>>827 チップ買え ・・・ つーか、予備ぐらい用意して置くもんだ
>>828 いや、初心者なのはわかっているからATtiny2313を3個買った。
1個くらいは安いし痛くはないんだけど、リセットできるだけのスキルはほしい。
スレで何度か出てるけど「ATtiny2313リセッター」でググる。
お釈迦になる時ってほんと連続発生するよね リセッターで9割は復活させたけどそのうち何個かは治らず。 数があるならリセッターを作る価値はあるが、数個のtiny2313でやるのは手間が(ry ブレッドボードでせずに最初から基板で作っておくべきだったのかも orz
秋月にmega168p入ってるぞ やったね!
>>833 俺も昨日気がついて3個注文した(;´Д`)ハァハァ
これでメモリ不足のmega88pともおさらば(∩´∀`)∩
328p入らないかな
メモリ不足と言えば、Attiny13でbascom-AVRとの組み合わせなのですが、 1バイトの変数を1つ宣言しただけで、Out of sram spaceと表示されます。 これはバグなのでしょうか。
837 :
774ワット発電中さん :2009/07/01(水) 20:28:57 ID:X1hWCJye
>>836 1バイトの変数も宣言しないプログラムを作って、(PORTB=PORTB+1;だけとか)
出力コードをディスアセンブルしたらわかるかも。
>>833 ああ、もう少し早くわかってれば、注文できたのに。
でも、mega88pで半分くらいしかFLASH使わない漏れには
必要ないかも。
秋月に流れてきたということはディスコンの予兆でしか
840 :
774ワット発電中さん :2009/07/01(水) 21:50:49 ID:jZbWj5rA
秋月つながりでちょっと質問があります。 秋月のSUNLINK製20x4行バックライト付き液晶のバックライトを 1,2ピンからの分流でなくて、独自に電流を流して点灯させたいと思っているんですが、 あのバックライトは最大でどれくらい流せるんでしょうか?
>>839 でしょうなぁ。PDFマニュアルにも新規で設計するなって書いていた希ガス。
後継ってもうでてるのかねぇ。
>841 >11で既出。 低電圧仕様(1.8V〜)と高速仕様(〜20MHz)が統合したので 数買っても使いまわしが楽になったかも。
843 :
774ワット発電中さん :2009/07/01(水) 23:42:52 ID:d3lvJSf7
ATmega168PA ってのが後継みたいね。
>>840 どんどん電流上げていって異臭or暗くなったor壊れた値を覚えておいて
その80%くらいの電流で良いのでは?一つは勉強用ってことで。
絶対最大値近辺流してると寿命来るの早いけどw
キャリーを含めた加算で質問です。 ldi r22, 10 add r21, r22 rol r20 : これに相当するコードを即値減算のsubiに置き換えたものにできるでしょうか? 即値加算のaddiがあれば素直に addi r21, 10 rol r20 : のように書くのですが、 subi r21, 0xf6 ; -10 rol r20 : としても結果が違ってしまいます。
>>845 subiで出るのはキャリーじゃなくてボロー、だからじゃね?
頭痛くなってきました 1ワード短くしたいだけなんです すいません つまり2の補数とか使わないとだめなんでしょうか? 加工が必要だとするとあまり意味がないというか
avr addi の検索結果 約 28,900 件中 1 - 100 件目 (0.46 秒)
849 :
774ワット発電中さん :2009/07/03(金) 09:06:15 ID:iLNixHJT
>>845 rolの意味がよく分からないが、r20にそれまであった値が左シフトされるのは構わないのか?
それともr20は事前にゼロクリアされているのが前提か?(r20:r21=r20+10がしたいのか??)
もしそうなら、16bit数値はAVRの16bit扱いにあわせて、リトルエンディアンに統一した方がいいよ。
下位8bitをr20、上位8bitをr21のように。
目的が分からないとちょっとこめんとしずらい。
てもって、r20の8bit数値に10をくわえた値をr20:r21に得ると考えれば、
くわえる数字が63以下なら、adiwを使う手がある。r21初期化分を除き1命令2クロック。
clr r21
adiw r20,10
引き算ならこんな手も。+256-(256-10)する。r21初期化分を除き2命令2クロック。
ldi r21,1
subi r20,-10
sbci r21,0
850 :
774ワット発電中さん :2009/07/03(金) 16:24:42 ID:iLNixHJT
例が悪かったですね レジスタは適当なので御気になさらずに subiではキャリー演算の置き換えはできない ということが判っただけで収穫でした 特定のadd使ってるコードの置き換え前提の話だったので もう気が済みました ありがとうございました
例の定数だと、addの場合はR>=246ならCが立つ(解が256を超える為) subならR<246ならCが立つ(解が0より小さくなる為) つまりCは論理否定の関係になってる。 だからbrcs/brccが続けば入れかえれば済むし、 rolなんかで集めるなら最後にcomしてみたり。 上手く使うのだ。
mega8515なんですが、AD変換機能って付いていますか? データシートのピン配置見ると、PA0(AD0)と書いてあり、 AD変換機能があるようにも取れるのですが。 初心者ですみません。
データシートをよく読めば判る事ですが 残念ながらアナログはコンパレータしかありません ADというのはアドレスバスのことです
856 :
774ワット発電中さん :2009/07/04(土) 09:35:00 ID:NEeaGsPO
>>855 >>854 すみません、こんな初心者なのにちゃんと答えていただいて恐れ入ります。
854さんのリンク先の方法を確認してみます。
レス消費すみません、854ではなく856さんの間違いでした。
電子工作初心者です。 AVRISP Mk2で簡単なLED点滅のプログラムの書き込みに成功したのですが、 AVR Studioのアップデート(4.16)とAVRISPファームウェアの更新(01.0C)を行ったところ、 Programボタンを押した際やヒューズビット読み取り、シグネチャ読み取り等の際に Entering programming mode.. FAILED! というエラーが出るようになってしまいました。 エラーの際に、ピンの接続が合っているか、またISPクロックの周波数が CPUの1/4以下になっているか確認すべし、と表示されましたが、 配線は以前動いたときと全く同じ配線で、問題があるようには見えず、 ISPクロックはいろいろな値に変えてみましたが、効果がありませんでした。 使用していたのはtiny26ですが、他に13と2313も試してみたところ同じ結果でした。 何か思い当たる点があればアドバイスお願いします。
>>859 一つなら間違って外部クロックに変えたんじゃね?って言おうと思ったが。
ファームウェアのダウングレードできるならやってみては?
AVRISP mk2は付属ソフトも含めてVistaに対応していますでしょうか?
863 :
774ワット発電中さん :2009/07/05(日) 10:14:07 ID:dpHwOevu
>>859 私はヒューズビットいじくって同じ表示が出ましたよ
>>860 さんの
内部/外部クロックかリセットピンをいじるとそうなりました、ただAVR Studioは4.13です。
だめもとで買ってみるかな
>>863 フルスイングクリスタルかセラロック付けてみてもだめなら・・・
って全部の石がそうなるならライター側か電源周り?
>>864 一応聞いとけってw 動かん買ったら文句いえるだろ?
正式対応じゃなければここで動いたっていう人いても
環境違うと動かねーかもしれないし
xmega欲しい
>>861 正式にはわからないけど、うちではまったく問題なく動いてるよ。
ちなみにvistaでusbシリアルを通した自作書き込みケーブルが不安定でどうしようもなくて買った。今は非常に満足してる。
wiki落ちてる?
wikiって聞くとハワイに行きたく(ry
AVRISP mk2って電源供給できないってマジ?
まじ! ってか、ライターから電力供給する意味がわからん mk1 もできないだろ
電池をつなげればいいと思う ところで電池のマイナスとライタの接地線は接続してもいいの?
電池じゃ5Vにならないお
USBケーブルを改造して、5Vを取り出せばいいんじゃないかな? 途中で、電源の線だけ抜き出してみたり…
5Vの電池を使えばいいんじゃね。
まあArduinoがあるんでそこから5Vは取れるんですがね
そうだ、AVRで昇圧回路を作ればいいんだよ
なんでAE-UM232Rが話題に出ないんだろう ライタにもなるしそのままシリアルでデバッグできるし5Vも3.3Vも取れるし・・ 純正ライタいらないじゃん もしかしてタブーだったり?
>>879 おれもそれつかってるよ。
でも、さすがに3.3Vを取り出すのはキツイ気がする。
FT232内蔵のレギュレータじゃ、ターゲットの回路によっては燃えかねないと思う。
>>880 50mAまでとれるから結構重宝してるよ
usbaspxとhidaspxがあれば十分です
趣味の工作なんだけど、相次ぐ設変によりなかなか完成しない_| ̄|○
885 :
774ワット発電中さん :2009/07/08(水) 21:35:34 ID:3gcD444V
「やってしまった」って状態だと思います。 ちょっと確認して頂けませんか? 新品のATmega88pをchanさんのcomポート制御ライタで >avrsp -rf すると、Highのところが High:0111 1111 と出力されました。 次にためしに出力された値と同じ値を書き込もうかなと思って、 >avrsp -FH01111111 としました。 すると、Device Connection Failedになってしまいました。 今のところパラレルライタを作らないといけないなと思っていますが、 他の対処策はありますか? それとavrsp -FH0111111はどこが間違っていたんでしょうか?
886 :
774ワット発電中さん :2009/07/08(水) 21:37:15 ID:3gcD444V
>>885 パラレルじゃなくて、高電圧プログラミングするライタですかね
mega88 リセッター で検索ですかね
>>885 それおかしくないか?mega88pは出荷時
Ext: 1111 1111
High: 1101 1111
Low: 0110 0010
になってるよ。だいたいFH=0111 1111じゃ、外部リセット端子も無効だわ、
シリアルプログラムも無効だわで、書込みそのものができないはずなんだけど。
avrspだったら-Dn (nは5ぐらいから適当に調整して)あたりのオプションを足して試して見れば?
889 :
774ワット発電中さん :2009/07/08(水) 22:17:06 ID:3gcD444V
>>887 ttp://zampoh.cocolog-nifty.com/photos/uncategorized/2008/09/13/mega168reset_sch.png これですかね。12Vは可変定電圧電源から取ることにしてブレッドボードで組んじゃおうかなと思います。
>>888 最初にリダイレクトして保存したファイルをそのまま載せてみます。
Low: 01100010
ウウウウタチチチトト CKSEL[3:0] Clock source selection
ウウタチトト SUT[1:0] Startup time
ウタトト CKOUT (0:Output system clock on the CLKO pin)
タトト CKDIV8 Clock division ratio (1:1/1, 0:1/8)
High:11-11111
ウウウウウタチチトト BODLEVEL[2:0] (111:Disabled, 110:1.8V, 101:2.7V, 100:4.3V)
ウウウウタトト EESAVE (Retain EEPROM at chip erase 1:No, 0:Yes)
ウウウタトト WDTON (1:WDT normal, 0:WDT always on)
ウウタトト SPIEN (1:Disable ISP, 0:Enable ISP) *Available only in Parallel mode
ウタトト DWEN (On-Chip debugging via RESET pin 1:Disable, 0:Enable)
タトト RSTDISBL (RESET pin 1:Enable, 0:Disable(PC6))
Ext: -----001
ウウタトト BOOTRST *Refer to data sheet
タチトト BOOTSZ[1:0] *Refer to data sheet
Cal: 168
>>889 Hiはデータシートどおり 11-1 1111 (SPENはシリアルプログラムできないから-)になってるじゃん。
なんで>885みたいに 0111 1111だと判断したの?
あと、>888のExt.は328pのだったわ・・・88pなら1111 1001なので>889であってる。
いずれにしても、avrsp -FH01111111を正常に書き込んじゃったのならシリアルプログラミングは無理
(Reset端子が一般I/Oピンになっているので、外部リセットすら無理)
891 :
774ワット発電中さん :2009/07/08(水) 22:30:20 ID:3gcD444V
>>890 申し訳ありませんが、
仮にデフォルトのHigh:11-11111 を正しく再書きこみするとしたら
avrspでどう指定するんでしょうか?
>>889 一発 コマンド プロンプトからUSと叩く
>>891 avrsp -fh11011111
通信が不安定とか上手くいかない場合
avrsp -d10 -fh11011111
とか-dオプションで調整。
あと、fuse_j.txtをfuse.txtに変更(上書き)すれば、文字化けがなくなるよ
(俺は逆にusコマンド打ってusモードにしてから使っているけど)
894 :
774ワット発電中さん :2009/07/08(水) 23:11:20 ID:3gcD444V
>>894 > ハイフンは0と読むべきだったんですね
ちがう。データシートのデフォルトにあわせるってこと。
データシートはavrspでは'-'になっている部分も0/1の別が載っている。
あとAVRのFuseビットは0がprogrammed, 1がun-programmedだから気をつけてな。
ChanさんのCOMポート接続ライタを作ってみたのですがうまく動きません FreeDOSを使って A:\> avrss /r とやってみると Device is not working or not supported device <FF,FF,FF> と出ます。 ライタの配線はあっているはずなのですが…… ターゲットのATTiny2313は秋月電子で買ったものなのですが、デフォルトのヒューズビットは 内部発振になっていますよね? もし外部発振なら手持ちのクリスタルが12MHzと16MHzしかないのですが大丈夫でしょうか
897 :
774ワット発電中さん :2009/07/09(木) 00:11:37 ID:KyYENUjU
>>895 ありがとうございます。
3行ともとても重要な点ですね。
>>896 使用しているCOMポート(デフォルトはCOM0)があっているか?
使っているPCでCOMポートをアクティブにしているか(BIOSやデバイスマネージャで確認)
ところで、avrspならWindows2000以降のコマンドプロンプトからも対応可能なのに、
なぜにavrssを使ってるの?
RTSが出てないから無理だねー RSTも出てると便利 秋月で買い直した方がいいよ
>>901 残念。
どうせ買うならAVRISP mk2買うことにしますー
そんなの買っても意味ないぞー
あ、どうせ無駄な買い物するならSTK500の方がいいと思う
>>905 純正ってだけで他のと一緒のただのライタだよ
デバッグすらできない
>>907 そうなんですか。
でもAVR Studioから直接書き込めるんですよね?
純正ならではですよね?
その辺は好みだからご自分で判断を おれはいちいちAVR Studio起動してポチポチやんの面倒だし コマンドラインからコピペで十分だと思う
チップ以外純正なんか使ってない俺
>>896 900にも書かれてますが、COMポートはあってますか?
もしや25ピンのRSケーブルをパラレルポートに刺してないよね?
あとRSケーブルが長すぎるとか、質が悪いとか
ATTiny2313でソフトウェアシリアル通信したいと思っているんですが 良いライブラリありますでしょうか? ArduinoではNewSoftSerialを使っていたのですが・・・
タイマーとカウンタの併用って可能でしょうか? って、試してみろって言われそうですね・・・
新しく買うなら、FT2232D USB−シリアル2ch変換モジュールの方がよさげじゃね? そのまま使えるかどうかは知らないけど、原理的には動きそう。
FT2232もBitBangModeを持っているので基本的に動くと思う。
>>917 ありがとうございます。
何やら勉強になりそうなサイトです。読んでみます。
919 :
897 :2009/07/10(金) 00:04:06 ID:KyYENUjU
おかげさまでリセットを無事終えました。 はじめに12Vの制御に2SC1815を使ったんですが、どうも抵抗値とかが 合わないようなので、手動でON,OFFしました。どうせブレッドボード上なんだから 最初からそうやれば良かったと思います。
>>915 FT2232にはSPIモードがあるらしいから、うまく使えばBitBangより効率よくできそう。
ただ、シリアルを2ポートつけても、俺には必要がないんだよな…
FT232と、外形とピンがコンパチで、機能が2232並みのがほしい。
40ピンはちょっと長すぎる
ATTINY2313のヒューズビットを -fL11100100にすると 外部発振子なしで8Mhzで動作してくれるんでしょうか?
>>924 データシートくらい嫁
ATTINY2313 日本語とかでググレカス
ATTINY2313 を使って正弦波を作りたいと思ってます とりあえず sin テーブルを用意してラダー抵抗回路で...とやってるのですが、正確に 120Hz と 300Hz を作るにはどうすればよいでしょう? gcc で組んでるのですが、任意の周波数を作り出す方法が思いつきません
927 :
774ワット発電中さん :2009/07/10(金) 11:27:21 ID:lH4IBt0C
>>926 出力=A*sin(2πft)を地でいけばいいんじゃないの?
sinはいちいち計算したら間に合わないので、テーブルを用意して。
矩形波を高次ローパスフィルターに通すという手もある。
>>926 有る程度正確に作りたいなら個体差とかも出るからオシロスコープは必要だね。
ただ温度でも変わるだろうけど。
どなたかArduinoのanalogRead()をWinAVRに移植してくれませんか?
931 :
774ワット発電中さん :2009/07/10(金) 15:40:37 ID:lH4IBt0C
>>930 ADC読み取りのことか?
探せばいくらでも例題あるんじゃないか?
というかほとんどIO操作なんだから、データシートの例題見て自分で作れ・・・
>>930 データシートのExample codeそのまんまでいいんじゃないの?
ググっても見つからないのですが・・・
私はArduinoにあるサーボコントロールのが欲しいかも
>>928 セラロックか水晶使えばいくね?
ってか、周波数カウンタかな?
歪を見たいならオシロが欲しいけど、
歪を測るなら歪率計か。
936 :
774ワット発電中さん :2009/07/10(金) 16:06:41 ID:lH4IBt0C
>>933 ググったら山のように出てくる。がんがれ。
>930 Arduinoが呼び出しているgccは最初からWinAVRだ。
上のほうに アセンブラで書いたソースをCから呼び出せるって書いてあったけど どうやれば良いのかな
ATTiny2313にAE-UM232Rから書き込んでLEDチカチカできましたよ。 ちょっと感動。
〉〉939 p://avrwiki.jpn.ph/wiki.cgi?page=avrgcc%A4%C7%A5%A2%A5%BB%A5%F3%A5%D6%A5%E9%A4%F2%BB%C8%A4%A6 p://elm-chan.org/docs/avrlib/asm_gcc.html
あーでもmega128のクロックは8MHzか。ちょっとおしい。
web鯖ってだけならmega88クラスでもどうにか作れるけど 素人が手を出しにくいmega128にSRAM32K、FLASH512K増量、 しかもTCP/IPHWスタック付きでこの値段はおいしすぎる。 arduino+ethernet shieldを潰す気満々か。 USBシリアル付けたらソフトウェア資産がほぼそのまま流用できるじゃないか。 ethernet単体モジュールも苺扱いで買いやすくなったけど、 SPIのくせにブレッドボードにそのままさせないのはちょっと残念。
>>946 >SPIのくせにブレッドボードにそのままさせないのはちょっと残念。
これは自分もそう思った。1列のピンヘッダ、2個使いとかにしてくれるとありがたいよね。
>>934 サーボのソース見るとタイマーでやってる。
だから、9pinと10pinでしかあのライブラリ使えなかった。
949 :
sage :2009/07/10(金) 23:53:52 ID:vCo1tOqG
ATTINY2313 ってすぐに「ISP MODE ERROR って出るんですけど。。これって、ヒューズの設定間違えたら出るの? も〜何個だめにしたことやら。。。 復活するには、高電圧しかないのかな?
自分はこういうのの為に2列のピンヘッダを1列x2にするようなの作ってあるが、お前らは作らないのか?
>>951 1列x2にしてしまうと場所とりすぎるから、
>>950 の連結フレーム外側ピン折り曲げでジャンパ這わすやり方で
できないかと考えてる。
連結フレームの足はブレッドボードに差すと少し浮くぐらい長いから、
折り曲げ精度も必要ないはず。
>>948 thx! PWMですよねー。これしか方法ないんかなー。。
オシロ見ながら_delay_usやらで10〜20ms周期のパルス作ってやっても
まともに動いてくれずムカっと来てる。
arduinoはWi-shieldやWiflyで遊ぶ時代だろ。 いまさらW5300で有線とかWizもあせってるんだろうね。 安価な無線チップ無いんだろうな。
mega164のPWMが動かない(´・ω・`)
958 :
859 :2009/07/11(土) 22:05:44 ID:q+/M+Bcu
AVRISP mk2で書き込めないと言っていたものですが、
STK500買って試したらISPで書き込めました。
>>865 さんの指摘のようにライタが電源周りが怪しいようです。多分電源。
そこら辺はおいおい調べるとして、まずは日曜電子工作を堪能したいと思います。
みなさんありがとうございました。
PWMは、デジタルなのか、アナログなのか
論理的にとらえるならデジタル信号、 物理的にとらえるならアナログ信号。
・・・んで、どっち?w パルス幅変えてるだけであって電圧はかわんないんだっけ。 じゃぁデジタルだ。。
tiny2313でソフトウェアUARTの受信側を作ってます。 ピン変化割り込みとタイマ割り込みで115200bpsの1ch分の受信は 満足できるレベルになりました。 が、複数chの待ち受けをどうすべきか悩んでます。 2ch以上は割り込みでは無理っぽいのでピン変化割り込みをトリガに、 メインループでタイマ値を読みながらポーリングするという方向で考えてます。 他に良い方法あるでしょうか?
>>961 電圧が変わらないからデジタルってのはちがうだろ
あれもある種のD/A変換みたいなもんだし
>>964 tiny45×4でそれに近いことをやったことがある。
その時思ったんだけど、マルチコアのAVRって出ないかしら・・・
電源だけ共通で、内部にtinyが4個ぐらい入ってて、I/Oが
マトリックススイッチに一度繋がってるようなやつ。
まぁ、ほとんど需要ないか・・・
それなんてParallax Propeller?
タイマで常時ポートを取り込んで、空いてる時間に解析。 //ボーレートより3倍くらい速い割込み ISR(TIMER~) { buf[] = PINx & 0x0F; } /* bit0 : 0ch bit1 : 1ch bit2 : 2ch bit3 : 3ch */ ここまで解析済みインデックスとか、 0~4chスタート位置インデックスとか準備して、 後はバッファーオーバーランさせなければ良さそう。 しかし2313はメモリ少ないしなー
968 :
774ワット発電中さん :2009/07/12(日) 16:46:38 ID:IlgtOE5S
>>965 タイマも1つか2つ、読み取り部分だけは共通にすると面白いかも。
ポーリングで試してみましたが6割読めればいい方という感じで
成功しそうにないです。ピン変化割り込みからポーリングに移るまでに
他の処理が入ると、どうしても遅れが出て既にデータがないということも。
>>967 ありがとうございます。
そういう発想はありませんでした。
SRAM大きめのやつで試してみます。
tiny2313でシリアル通信しようと思って avrlib使ってみたら6kbあって入らなかったorz いったいこのマイコンは何ができるんだ!! 使いものにならーん
973 :
774ワット発電中さん :2009/07/12(日) 19:18:20 ID:IlgtOE5S
>>973 必要ないのに、小数点演算(またはprintfでの小数パッケージ)をリンクしていると思う
「使い物にならん」とか言ってる奴って、だいたい言ってる本人が使い物に・・(ry
(ry を最後に書いて煽るやつは馬鹿が多い。
それにレスをつける
>>976 も馬鹿な訳だがww
その理屈はよくわかりませんw
良スレがだんだんとすさんでいくのはいやだ・・・
大丈夫、馬鹿なことをいってるのは1人か2人だけだ。
981 :
774ワット発電中さん :2009/07/12(日) 21:14:54 ID:IlgtOE5S
>>978 >>973-974 をチェックですな。
○WinAVRで、print系の関数はむっちゃプログラムが膨れます。メモリ足りなくて他に手段があるなら使わないこと。
○浮動小数点演算は小さいAVRには辛い(コードサイズで)。整数演算でできる道を探す。
○よくあるパターンとして、_delay_ms()などのマクロ関数に変数をぶち込むとここで浮動小数点演算が入ります。
_delay_ms()は定数専用と考えてください。
○煽りは笑ってスルー
tiny2313くらいのマイコンってどのへんかな?と思って探してみた
ttp://www.geocities.jp/ryochan_home/onebode.htm このへんかな?
これが入出力以外ワンチップで、しかも20倍速(10MHz動作時)かあ。まあエライのかな。
サイズのメリットを生かすような工作をして遊びましょう。
>>981 これがあんなちっちゃなチップの中に入ってると考えると夢がひろがりんぐ
>>981 QFNパッケージならわずか4mm角だしね。
恐れ入るとしか言いようが無い
使用者の能力の問題だよね
それをマイコンの容量のせいにされたらこの世も終わりだ
まあ、mega168買ってきますよん
いやいや君はmega128を買いなさい
988 :
774ワット発電中さん :2009/07/12(日) 21:52:12 ID:IlgtOE5S
>>986 というか、あなたが何がしたいかをまず決めてから
チップを選ぶべきかと。
場合によってはAVR以外がいい場合も有るだろうし。
8-PDIPのtiny13Aが楽しいな。 内部発振 9.6MHzで、しかもA/D変換器付きと来てる。 ちょっとしたことなら色々と出来るから相当に可愛い奴だ。
うげ 168でも足りないや。328買ってきます。
>>990 マジ話するけど、あとから足りなかった〜!というまえに mega644買っておけば?
>>991 AVR Studio 4.16 Build628のAtmel AVR Assember使ってる
いったい何を作るんだ
644pは1個持っとくべきだね でかいけど、とりあえず好きなように組める
アセンブラで16KBでも足りないっていったい……
997 :
774ワット発電中さん :2009/07/13(月) 02:34:01 ID:vXuiWuVn
>>996 アンカー追っかけてみろ。tiny13Aの話だぞ。
あ。hexファイルのサイズで見てたけど 実質は7kbだった。mega168でも入る。やったー。
1000だったら真面目に仕事する
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。