_____
/ /|
/ ( ゚∀゚) /.∠フ 個人でも手軽に使える
/ /.∠フ || . Atmelの8-bit RISCマイクロプロセッサを
/ __ o/.∠フ || 中心に語るスレッドです。
∠| ̄ ̄凵 ̄ ̄|∠フ || *AAは「AVR H8 etc. マイコン総合スレ Part3」からいただきました。
.|| |_____|/||
Atmel AVR 8-Bit RISC
http://www.atmel.com/products/avr/
Part12のテンプレをそのまま持って来ました。 修正あったらよろしく! We can fly!
おチンチンびろーん ∩___∩ | ノ ヽ/⌒) /⌒) (゚) (゚) | .| / / ( _●_) ミ/ .( ヽ |∪| / \ ヽノ / / itow ML / | _つ / | /UJ\ \ | / ) ) ∪ ( \ \_)
8 :
774ワット発電中さん :2009/01/12(月) 13:12:54 ID:JV+xIgyk
itow ML
おまいらAVR使って何作ってるの? まさかライターだけってのは無いよなwww
10 :
774ワット発電中さん :2009/01/13(火) 23:35:40 ID:YlAvSlQB
マインドストームのセンサとかが多いかな。
>>9 ライターに始まりライターに終わるでごわす
抵抗4本のチープなものから始まって5.0〜1.8Vの電源範囲カバーするのとか作ったりして
いろいろやってるうちに道具箱がライタだらけになった
あ、さっきからUSBaspで2つのターゲットにスイッチ切り替えで書き込めるやつを作ってたw
SPIで設定が必要なICを初期設定して 定期的にデータが改編されたら表示、 スイッチが操作されたらSPIで設定変更、 なんだかそんな物を作ってる…。
直接AVRと関係してるわけじゃないけど、USBTinyでつないだAVRを libusb経由でスクリプトから操作する実験をしてる。 Arduino 買えって意見はあると思うが、これはこれで楽しい。安いし。
作りたいモノはあるけど、AVR以外のアナログ的なスキルが足りなくて企画倒ればかり。 最近はオペアンプ入門みたいな本ばかり読んでて、ライターがホコリかぶってるorz
なんで今更8ビットで苦労せなあかんのだ と思ったけど、1チップの規模ならこれもありなんだな でも何かの補助って用途しか思いつかない
>>16 ワンチップ向けの開発環境って、結局はイニシエの時代からあまり変ってないと言えば変ってないのがねぇ…
移植とか意外と手間だからリファクタリング向けのツール(トランスレータ+α的な)物が広まっていても良いんじゃないの?とは思うのだけど
下手に規模が小さいもんだから手作業と根性でも動いちゃうってのが、かえって手間を増やしてる悪寒。
太陽電池の制御とかもやったけどいまはSONYの液晶つき充電器がエラーばかり吐くから時間かけてまったり充電できる充電器作ってるとこ。 ついでにセリアの100円ニッケル水素を10本買ってきた。
>>16 鉛筆削るのにチェーンソーを持ってくるような真似をしちゃだめってことでしょ。
8ビット20MIPSが活かせる仕事って一体何だろう。
>>9 みたいな疑問に答えられない。
メモリが広いわけでもなく、ソフトウェアで何か賄うにも
クロックが半端だから、何かやろうとするとすぐ壁にぶつかってしまう。
ほとんどの事は専用ハードウェア使うことを考えた方が早い。
ライタや開発環境が入手しやすくコードも書きやすいってのが
最大の利点だけど、その先がないね。
PICの置き換え用途に…w
へー8ビットで20MIPSもあるんだ かつたMC68000が1MIPSとかスゲーーって思ってたんだけどな
>>24 レジスタ長(というか、アキュムレータの基本ビット長)とMIPS値って直接の関係は無いだろ?
そんなことを語っているのか?
生活リズム計 や アクティグラフ のような ログ装置を作りたいけど 製品並みに小型化するのは無理?
28 :
774ワット発電中さん :2009/01/15(木) 03:15:33 ID:KjGQHlXg
生活リズム計とは
29 :
774ワット発電中さん :2009/01/15(木) 08:32:43 ID:dxrVSMUd
ウエブサーバとか、メールサーバ、プリントサーバ、 ファイヤウオールあたりができると有用そうな
>>25 メモリーの自由空間はさておき、
当時の68000(10MHz)よりも速いのは確かだ。
生活リズム計=結局は時系列ログがとれる万歩計のようだ。 センサーをどうするか。
32 :
774ワット発電中さん :2009/01/15(木) 11:17:48 ID:2CM8qbKm
スピリチュアルセンサーで
流行の加速度センサーで、走ったときとか階段を登ったときの記録を取って、 一日の消費カロリーが表示されるような奴だと楽しいかもねぇ。 飛行機に乗った日はきっとすごい消費カロリーだぞ
34 :
774ワット発電中さん :2009/01/16(金) 20:18:37 ID:Fm9SlROz
>>1 乙
今度からは
>>4 のテンプレはUSB接続のだけでいいような気もする
最近増えてきたAtomのPCはCOM付きが標準だし、COMのライターを排除する必要はないと思う。 だが、紹介するサイトや商品の内容は見直して、変更、追加、削除があってもいいかもしれんね。
COMだけは根強く残ってるね。流行ののATOM PCなんかパラレルまで現役だし。
>>27 生活リズム計のIRをプロトコル解析して受信側をAVRの方が無難。
パラレルが無いと高速なPSコントローラ変換機が使えないのです。 格ゲーでは20msec(1.2フレーム)の遅延でさえ致命的なのですから
カタカタ ∧_∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ (・∀・ )< ついでだし これも買っとこ。 大人買い、大人買い。 _| ̄ ̄||_)_\_______________________ /旦|――||// /| | ̄ ̄ ̄ ̄ ̄| ̄| . | |_____|三|/ そしてまたゴミが増える・・・・
>>40 秋月とdigi-keyの罠ですねわかります
とりあえず買っておいたものが本当にあとで役に立つことが結構あるから衝動買いを止めることが出来ない。 LEDとかスイッチング電源とかコネクタとかケーブルとか抵抗とかキャパシタとかインダクタとかレギュレータとか・・・。
いや、俺のことだ
俺、俺だよ。俺。
俺だってば
まとめ買いしたを忘れて、またまとめ買い そして再び…(ry
部品ばっかふえて 完成しないぞごるあ
しょうがないよな。必要なパーツは千円分くらいだけど送料もったいないし とかいってなぜか1万くらいになるわけだが。秋月は危険だw
あまったパーツでなんか作ろうとするとまた数点足りなくて注文 ↓ 無限ループ
ISPのピンがLEDのアノードに繋がっていて、 ISP以外のピンにカソードが繋がっていると、 書き込みのときに支障出る?
>>54 無いと思うよ。LEDには抵抗が直列に入ってる?
入れる予定です。 支障があるかないかによって回路を変えます。
あと気になるのは直列に入れる抵抗の値だね。 あまり小さいとISPの信号の電圧レベルがちゃんとでないかも。 どのくらいまでOKかはAVRのデータシートとライタの仕様でも 確認してください。
出力ピン数よりも多数のLEDを制御したい場合はどうするのが普通なんですか?
>>58 シフトレジスタ、CPLD(FPGA)、複数のAVRを使用
ケースバイケースで色々な方法があると思うよ
「ダイナミック点灯」でググって下さい。
点灯専用のTiny2313を用意してI2Cあたりで直接やってもいいよね。コスト的に。 下手するとロジックICのが高いこんな世の中じゃ。
>>62 この回路、全消灯が出来ないように思えるけど良いのかな?
H,L,Zで全部Z状態なら全消灯でない??
最近はI/O ExpanderっていうSPI / I2Cの部品もあるね。 ATtiny2313の方が安いけど。
67 :
58 :2009/01/19(月) 07:45:08 ID:2v8l2KuA
>>59-66 ありがとうございました。tiny2313が安くて扱いやすそうに感じました。
まぁアレですね、技術者としての意地というかポリシーでどうするか選択するってことなので MPU2個使うか専用IC使うかディスクリートでやるかTTL探すか コストだけみればtyny2313使うっていうのは魅力だよね、スレ的にもw
Arduinoって何するもんなの? avrが乗ってるらしいけど・・・
>>69 センサつないで情報収集システム作ったり、表示器つなげてアンビエントシステム作ったり。
ロボットに乗せて制御システムとして使ってる人もいるし、芸術分野で作品に組み込んでる人もいる。
>>69 コンピュータや制御とかの専門家でない人向けのオ−プンなハード・ソフト開発環境
リアルタイム性の要求される「きつい」機器制御には向かないが、「ゆるい」制御とかに向いている
プロトタイピングツールとしても使えなくも無いし、そのまま最終物に持っていくことも可能
このスレ的には遊べるし、ものによっては実用品製作に使える
72 :
774ワット発電中さん :2009/01/19(月) 13:22:19 ID:7TsOOFBn
>>71 >ものによっては実用品製作に使える
それは遠慮したいな
>>72 Arduido 言語(gcc に変換されコンパイルされる)で書けない処理は出来ない
(ライブラリは自分で拡張できる)
Arduidoで出来ることは簡単にできる…(アナログを含む)ビット単位の入力や出力とか
SPIやI2Cも扱えるから、簡単なコマンドで操作できるものならセンス&制御は可能
例えば、「あるセンサーモジュールを評価したい」とかは楽チン
そのまま、Arduidoで実用になるなら Mega168なりに完成したバイナリーを焼けば完成品に
(AVRのブートローダーを使っているので、バイナリーはハード構成が同じ環境なら互換)
ま、作りたいものとの兼ね合いかな
>>72 実用っていってもピンキリだからいいんじゃない?
一発ものだったら、こういうのを使うのも悪くないとおもうんだけど。
16bitのタイマー割り込みで1秒を数える時の誤差を少なくするには、 @できるだけ分周して割り込みを入れる Aできるだけ分周しないで割り込み入れる どちらの方法がいいでしょうか?
>>75 誤差というのはどのような誤差を言っているのでしょうか。
タイマ割り込みの周期が1秒の整数比なら蓄積されていく誤差は無いと思うので
周期が長いか短いかは関係ないと思います。
説明下手でスミマセン、、、 具体的には、tiny2313で水晶発振器12MHzを使い 誤差をできるだけ少なく1秒ごとにタイマー割り込みを入れたいのです。 割り込み中の処理でも誤差が出たりしますよね? 60分で1秒の誤差くらいの精度が出れば良いです。
12MHz / 1024 = 11718.8だから 1秒 / 12MHz * 1024 * 11719 = 約1.00002秒。 60分では3600.08で0.08秒の誤差。これが許容できるなら 1024分周で11719とコンペアマッチすればいいんじゃないかな。
正確に1秒にしたいなら12.8MHzの水晶に換える。 12MHz / 1024 = 12500と割り切れる。
間違えた12.8MHz / 1024 = 12500ね。
>77 >割り込み中の処理でも誤差が出たりしますよね? 次の割り込み発生が遅れるんじゃないかという心配なら、それは関係ないぞ。
10msの割り込みにすればいいんじゃないかな?
>>82 12MHzで1024分周で60秒に6000回割り込むとして、
その内117での比較を4875回、118での比較を1125回
やれば誤差がなくなりますね。タイマ0で作れるし。
>>78 12MHz / 256 = 46875 と割り切れるから
256分周で46875とコンペアマッチすればいいんじゃないか?
タイマ1な
>>84 あーなるほど。
一応
>>83 を簡単にすると16回中117を13回、118を3回、これで0.16秒。
このサイクルを375回繰り返すとちょうど60秒。
ということはタイマ0でやる場合、256分周だと125で コンペアマッチすれば375回目で1秒ですね。
TCNT0 += 130; //ほんとは131 (256-125の値で10msec毎にTIMER0_OVF_vect) 130は間違って255から125を引いてる みたいな馬鹿やって 秋月で売ってるキンセキの高精度水晶ユニット(12.8MHz)使って「なぜ遅れるんだ?」と悩みまくること9時間。
ATtiny2313で水晶発振子12MHzの8文集を システムクロックとしたい場合のヒューズビットは、 Low: 01101110 でおkでしょうか? 自分で調べてみたのですが不安で聞いてみました・・・あってますかね? あと、ヒューズビット書き換えの注意点とかありましたら教えてください。
>>84 それでキレイに割れますね。気付きませんでした。
あと聞きたいのですが、
タイマー割り込み発動
↓
すぐにTCNTリセット、カウントアップ開始
↓
自分が記述した処理
↓
割り込み終了
みたいな流れなんですか?
>>89 割り込み処理じゃなくてCTC動作でリセットすれば良いと思いますよ。
これでも正確に1秒になるはず。 3:1の比率で10msecカウンタを調節。 10msec単位ではあまり正確ではないが、1秒以下のカウンタが欲しい場合。 不要な場合はint_countをuint16_tにして375と直接比較すればいい。 volatile uint8_t int_count; // 割り込みカウンタ 0-3 or 0-4 volatile uint8_t ten_msec_count; // 10msec毎のカウンタ 0-99 volatile uint8_t sec_count; // 秒カウンタ // 0-255 ISR(SIG_OUTPUT_COMPARE0A) { int_count++; if ((ten_msec_count&3) == 3) { // 3 => 25 if (int_count == 3) { // (4 * 75) + (3 * 25) => 375 RATIO=3:1 goto update_10msec; } } else { // 0,1 2 => 75 if (int_count == 4) { update_10msec: ; int_count = 0; ++ten_msec_count; if (ten_msec_count == 100) { // 10msec * 100経った ten_msec_count = 0; sec_count++; // 秒を更新 } } } } void timer0_init(void) { int_count = 0; ten_msec_count = 0; sec_count = 0; TCNT0 = 0; OCR0A = 125; // 1.0 / 12000000 * 256 * 125 * 375 =>1.0 TCCR0A = 2; // CTC動作 TCCR0B = _BV(CS02); // 256分周 TIMSK=_BV(OCIE0A); // タイマカウンタ0比較A割り込み許可 }
タイマー割り込み発動 ↓ マイコンが勝手にTCNTリセット、カウントアップ開始 ↓ 自分が記述した処理 ↓ 割り込み終了 ちょっと書き直しました。 上記のような流れで動くから、1秒ごとの割り込みで、 割り込み中の処理が仮に0.2秒かかったとしても、割り込みの間隔が ずれないで、ずっと1秒ごとに割り込みが行われていくと・・・ そういう認識で大丈夫でしょうか?
indentが・・
かちゅ〜しゃで
>>91 を見れば存在するんだけど。
>>91 は忘れてください。
分周64、比較値125、カウント15でやれば素直に1msecになる。
95 :
774ワット発電中さん :2009/01/19(月) 22:47:33 ID:MzBxCqn3
winavr20081205のchengelogを読みたいんですけど、どこにあるの? (すげー探したけど見つからないので教えてチョ)
96 :
774ワット発電中さん :2009/01/20(火) 08:04:35 ID:FBTf+zqX
AVRでスイッチング電源を作りたいのですが、 どこかに参考になるサイトはありませんか?
いきなりの質問で失礼します。 先日秋月にてAVRISP mkIIを購入したのですが、動作しません…。 USBで接続した際にWINDOWSからドライバのインストール画面が出たのでインストールしたのですが、 インストールエラーが出てインストールできませんでした。 またAVRstudioからアップグレードしようとしても、認識できないとの旨のエラーが出ました。 OSはXPを使っています。これは初歩的なミスなのでしょうか?それとも初期不良の類でしょうか…?
インストールに失敗したUSBドライバをデバイスマネージャから削除して再インストールしてみれば?
>>99 レスありがとうございました。
何度か削除→再インストール(&再起動)を試したのですができませんでした・・・。
ネット上にある画像を見ると、USBケーブル側にLEDが1つ、平型配線側にLEDが1つあるようですが、
現在平型配線側のLEDが赤く光ってるだけです。接続する瞬間のみ1度USBケーブル側が光ります。
ドライバがインストールされていないと両方光らないのでしょうか?
タイマーの比較一致割り込みで、 COMPAとCOMPBの割り込みを2つとも許可したら、 2つの割り込みのタイミングは干渉するんですか?
>>102 同時に割込が発生しても干渉というか、ハード的には問題ない。まず優先
順位が高い方の割込が受け付けられ、割込処理内で多重割込を許可するか、
割込処理を抜けた時点で優先順位が低い方の割込が受け付けられる。
データシートのタイマ割り込みの優先順位の項を嫁。
>>101 参考にしながら色々試していたら無事接続できました!!
皆様本当にありがとうございました。
>>96 昔のトラ技の記事で、tiny26あたりを使った記事があったはず。
確か、研究室のトラ技ライブラリで読んだ。
AVRとは関係ないがAtomPCにPCカードが無いのはなんで。
ほんとに全く関係ないな。 自作板ででも聞けよ。
PCMCIA自体レガシーだからさ。
レガシーが駆逐された今こそ AVRもUSB付きのLineUpを増やして欲しい。
FT232とかFT245(と、同等の機能)を内蔵したtinyシリーズとか出ないかねぇ・・・ USI用のピンとオルタナティブになってるようなやつとか。
まぁ、FT232並にUSBシリアルが簡単にTinyで使えればそりゃ嬉しいけどねぇ。 同等機能っていってもUSBならシリアルに限定する方が手間なので、 AT90USBと似た感じにしかならんだろう。 CDCクラスの実装となると、Tinyだとフラッシュがそこそこ食われそうだしなぁ。
PCカードスロットに挿す物といえば、モデム/EtherNetNIC/USB2.0拡張カード/ワンセグ と、この程度だが、いずれもUSBで間に合うし、USB2.0カードが必要なPCなんて、それ自体 のほうがレガシーなわけなので、今のマシンではスロットごと省略されていると思われる。 感想文終わり
113 :
774ワット発電中さん :2009/01/21(水) 15:08:21 ID:LAtHjKEj
>>106 OEM向けにAtomやWinXPは一定のハード制限を呑むとかなり安く買えるわけだが
そこら辺の事情も含まれてるかも知れん
研究用でPCカードがつけられる安い軽量ノートが欲しいんだよね。
ATtiny2313でC言語を使ってプログラムの開発を行っているのですが、 プログラムのサイズが収まりきらないときがあり困ったことが何度かあります。 そこで、質問ですがプログラムをコンパクトにするには どういった点に気をつけてコーディングすれば良いのか教えて下さい。
どんなにコーディングを工夫しても収まらないものは収まらない、 こう言っちゃ何だけど、そういうことだってあるさ。 割り切るとか悟りとかの気持ちで機能を削除する。ときには必要なことさ。 このくらいの機能ならこの容量で収まるかな、って感覚がそのうち身に付くさ。 iアプリ30KBの壁で苦労した俺さ。
外部バスが使えるmega8515やmega162を使ってみたいんですが、 DIPのやつを秋葉界隈で入手できませんかね。 mega128のボードが安ければそっちでもいいんですけど。
高いけどatmega162がマルツで見つかりました。
まぁ、printfやscanfを使わないとかが常套手段だけど、こうやって、アレも使わない・コレもダメ ってやってくぐらいなら、最初からアセンブラの方が良かったってことになるわな。 漠然とした印象だけど1000ラインぐらいまでだったらアセンブラで開発してもそんなに苦にならん。
>>115 マジレスだけど
コンパイルしたmain.binを逆アセンブル(avr-objdump)して
じっくり眺めてみると解決策が見つかることがある。
やや足が出ている程度なら、gcc-4系でなくgcc-3系のやや古い
avr-gccを使うと5%くらい小さくなる。
絶対ムリだと思っても、数バイトずつ削っていけば収まることもあるよ。 まぁ8bitマイコンで遊ぶなら基本的な技能ではあるし、 無駄といわれようが、一度血の1バイト遊びにじっくり取り組むのはアリ
便乗で質問です。 WinAVRのCでmainで生成されるpush/popがえらい無駄な気がします。 mainからはどうせ戻らないし、レジスタ破壊したままでも良いと思うのですが、 このmainのpush/popを抑制する方法あるでしょうか?
あ、無限ループになってればpopのコードは省略されるみたいですね。 しかしmain呼び出し時にこれだけ無駄なコードが生成されます。 4f 92 push r4 5f 92 push r5 6f 92 push r6 7f 92 push r7 8f 92 push r8 9f 92 push r9 af 92 push r10 bf 92 push r11 cf 92 push r12 df 92 push r13 ef 92 push r14 ff 92 push r15 0f 93 push r16 1f 93 push r17 df 93 push r29 cf 93 push r28 16ワード、32バイトです。
16ワードのpushということは、スタックとして16バイトのSRAMも無駄に 消費されることになります。2313のような環境では馬鹿になりませんね。 mainだけアセンブラで書けってことかな。 連投すいません。
と考えてたら、別の環境でnakedを使っていたのを思い出しました。 __attribute__ ((naked)) int main (void) 〜 AVRでもこれで良いようです。
avrstudio4.14とWinAVR20080610で makefileを自動的に作ってもらえなくて 面倒くさい思いをしているのは 私だけでしょうか?
>>125 gccに定番のオプションがある。-fomit-frame-pointer だっけな。
それって基本レジスタ渡しでフレームポインタのないAVRには関係なさげですよ
教えて君の素人で申し訳ないですが、教えて頂けないでしょうか? ATTINY2313-20PUが壊れることを恐れ、AVR WRTに載せられている ATTINY2313-20PUのバックアップを取りたいのですが・・・。 シリアル接続のAVRSPでプログラムコード、ROMデータ、FUSEデータを 保存し、新しいATTINY2313-20PUに書き戻して AVR WRT に載せたのですが うまく動作しませんでした。やはりプロテクト的な物があるのでしょうか?
133 :
774ワット発電中さん :2009/01/22(木) 21:30:42 ID:dr5e4r6/
人の販売したものをコピーするなや。
AVRの不正複製防御は米国軍のお墨付きだったよね。
>>133 コピーではなく壊れたときの為の私個人用の保存です。
でも無理なようですね。書き込み失礼しました。
それをコピーって言うんだ
つーかAVR WRT作ったとこに聞けよ
コピーかバックアップかどうでもいいけど、そんなことで時間を潰すのは、 趣味としても楽しくないだろ?仕事なら1000円ちょっとのものの バックアップなど無意味だし。 で、AVRの学習の一環としてなら自力で解析しなさいな。
>>125 へぇ?しばらくさわっていないけど2007バージョンあたりではそういうことはなかった気がするが・・・
2313程度の中身でも コピーだのなんだのっていうほど 見えなかったり読めなかったりする構造になってるんだ?
つーかライタ程度なら仕様書読んで自分でソフト作った方が面白くない? 素人なら良い腕試しだと思う。 この程度作れなかったら今後のマイコン遊びも難しそう。
>>135 AVRチップのプログラムが壊れた→ライターの故障→修理に出せ
(上と関係ない) ATtiny2313で、ある条件で一部のSRAM内容がランダムに書き換わる (バッファオーバーランみたいな症状。配列は使ってないのに) という不具合に遭遇してしまった。 同じ環境で違う固体に差し替えると全く症状が出ないから 固体不良だと思うけど、100円だからあきらめるしかないかな? 5個程試したうち、不具合が出るのはその1つだけだった。 いつのまにか壊したのかもしれないけど 固体の不具合と判るまで丸々1日潰れた。
どうも特定のポート(PD2)に問題があるっぽい。 PD2に大雑把に100KHz以上のクロックを加え続けるとSRAMが書き換わる。 幸い、兼用機能は使ってないので、別のポートに変えてから症状は出なくなった。 なんでしょうこれ。
後学までに正常個体と異常個体の読みだしたそれぞれのヒューズ値を教えてくれないか
>>146 lfuse de
hfuse df
efuse ff
lock 3f
すべてこの設定です。
クロックは20MHzで、セラロックと水晶の両方試しました。
>145 100KHz以上20MHz以下どの程度の値でもそうなるのかい?
はい、100KHzといわず30KHz〜1MHzで確認。20MHzはちょっと試してないけど。 PD2を入力(DDRD:PD2=0 PORTD:PD2=0 ハイインピーダンス(Hi-Z)) にしてクロック入れ、その値を読み出す事が条件っぽい。 あまり遅いクロック(30KHz以下から)だとならない。
電圧を3V付近まで下げる意味がある
152 :
150 :2009/01/24(土) 23:00:02 ID:6loUvB6c
USBの信号の電圧は0〜3.6V(LS/FSの場合)と規定されています。 問題あるかどうか(回路をどうするかどこで妥協するか)は自分で判断するしかないと思います。 レギュレータを使ってバスパワーから3.3Vを作っている事例もあると思います。
154 :
150 :2009/01/24(土) 23:15:39 ID:6loUvB6c
よくわかりました。ありがとうございます。
何の問題無いって言ったらお前はそれを信じるのか? データシート見ろよ
抵抗分圧やツェナーダイオード使うのは見たことある。
SDカード(3.3V)繋げる場合も同様の回路になる。
>>156 の回路はツェナーダイオードだね。
ATTiny45だと内蔵RCでPLL使うのかな?
>>149 個体差があるってことだし、電源不安定になって化けるとか
そんなんじゃないの?
亀すぎるけどTiny26廃盤なのか…ショック
すいません、PICから移行してきたのですが、 AVRで読み出されないようにプロテクトをかけるには どうやったらいいのでしょうか?
Memory Lock Bitsあたりですかね?
事故解決しますた
Lock Bits
千石通販でもAVR扱いだしたな
一方、秋月の通販カタログから多数商品が消失 LED、セラロック、ICソケット、基板類とかすら殆ど何も無い…データ更新ミス?
update in progress.......
秋月、サイトリニューアルしたのか。 更新トラブルだったの? 今は普通に見られるよ。 基板もセラロックも、取扱商品は従来と変わってないようだ。
更新トラブルというより更新中って感じだと思われる。
169 :
774ワット発電中さん :2009/01/26(月) 20:30:52 ID:gw0cv5nT
カード決済だが、電子部品で素人が1万も買うこと無いよな。
Digikey効果が働けば無いこともない。
AVR の Mega48 とかの TWI (I2C) モジュールで、master として slave からデータ受けとるとき、 ACK/NACK (TWCR の TWEA ビット) って事前に決めておかないとだめなんでしょうか? 受けとったデータを見て (例えばそれが 00 だったら) 終了 (NACK)、00 以外だったら続行 (ACK)、 みたいなことをやりたいのですが。 (slave は I2C EEPROM を想定してます)
そうですね。 終了条件に達したら次のデータを空読みNAK応答するロジックになります。
173 :
774ワット発電中さん :2009/01/28(水) 08:41:48 ID:jYXgqFjh
プログラムを書き込む時にも外部発振子がないと壊れたりします?外部クロック設定するときだけでいいと思ってたけど、書き込めないようなのでorz
xtalつけてないけど 壊れた事は無い ただし fuse bit間違えてつかえなくなったことはある
Tiny2313あたりを使って、パラレルプログラムモードで フューズビットを工場出荷状態にリセットするだけの 装置を作れないかな。
ぐぐるとあったはず
ムッハー!
やはり既に製作されてる方々が!
作る気力が沸いてきた
>>176-178 あんがとね。
MEGA168-20PIでタイマー1が変なんだけど、タイマーだけ壊れるって事ある?
クロックは内蔵クロックで8MHz。
下記サイトのタイマー使わないウェイトルーチンを使って
1秒毎にLED点滅させるテストは成功するのね。
ttp://www.geocities.jp/kuman2600/c_memo.html#t25 だからクロックはキチンと8MHzで動いてる。
コレをタイマー使ったウェイトルーチンでやると遅くなる。
カウンター調節して約1秒毎に点滅するようにすると、どうも1MHzくらいなのね。
じゃあ1MHzって事で0.2秒毎にオーバーフローするように作ると、
なぜか0.8秒くらいになっちゃう。1秒と大差ない、これは変。
じゃあじゃあって事で4分の1にすると0.7秒くらい?
で、真っ赤になってカウンターを65536-1にすると早すぎて判らない。
現時点で一番怪しい俺様の思考回路は、
「クロック8MHzなら8,000,000回カウントしたら1秒」
「オーバーフロー使うならカウンターには65536-カウント数」
を基準に考えてる。何かアドバイスあったら聞かせてください。
181 :
774ワット発電中さん :2009/01/30(金) 02:49:06 ID:aP4lJ9R6
>>180 前置分周器はいくらにセットされていますか。
8MHzクロックなら、256分周で 31250カウントで1秒になります。
オーバーフローなら 65536-31250=34286 を設定することになります。
ヒューズビットが8分周になってるだけでは。 データシートよく嫁って事だけど。
bascom avrの日本語マニュアルがほしい
184 :
180 :2009/01/30(金) 23:00:58 ID:R0sTHdGp
どうもです。
>>181 はい、その考え方でやってます。分周も解ってます。
>>182 ヒューズの事は言われると思ったんで
「タイマー使わないウェイトルーチンは期待どうり動く」と…
赤外線リモコン>PS/2キーボード作ってて、通信やらキーリピートやら…
幅は38KHzとか50usとか600msとか1/4秒とか、
使用法はウエイトだったり経過時間の判定だったり。
とりあえず上記のウェイト使って動く物は完成してるんだけど、
リモコンのリピートと手押し連打の区別がつかん状態で困ってる。
タイマーが使えたらリピート間隔以上空いたらボタンを離した事が解るんだけど。
ソースコード公開すれば?
>リモコンのリピートと手押し連打の区別がつかん リモコンによっては区別できないのがあるよ リーダ|コード|リピート|リピート|・・ ってNECフォーマットのやつと、 リーダ|コード|リーダ|コード|リーダ|コード|・・ がある。後者(家電協)がそれ。 まあタイマの件は他のAVRで試せばはっきりすると思うけど。 >タイマー1が変なんだけど、 タイマ0はどうだったよ
一応、タイマ0でも256分周で250のCTC動作にして、 そのコンペアマッチ割り込みを125回カウントすれば1秒と計算できる。 (256 * 250 * 125 = 8000000)
あとおそらく、リモコンのリピートを区別できたとしても、 そのままでは間隔が速すぎて非常に使いにくいはず。(押し過ぎる) マイコン側で適当にチャタリング処理して遅らせることになる。 リモコンパルス |a|a|a|b|b|b|c|c|c|c| キー変換 | a | b | c |
データシートにIOポートは40mAが定格って書いてあるけど、 同時に全てのIOポートから40mA流しても平気なの?
定格で40mAってどのあたりに記載されてますか。 とりあえずATTiny2313では絶対定格でVCC,GNDピンで 200mA超えるなって記載はあるので、全てのポートから 40mA流すことは無理だと思いますが・・・
Operating Temperature.................................. -55°C to +125°C *NOTICE: Stresses beyond those listed under “Absolute Maximum Ratings” may cause permanent damage to the device. This is a stress rating only and functional operation of the device at these or other conditions beyond those indicated in the operational sections of this specification is not implied. Exposure to absolute maximum rating conditions for extended periods may affect device reliability. Storage Temperature ..................................... -65°C to +150°C Voltage on any Pin except RESET with respect to Ground ................................-0.5V to VCC+0.5V Voltage on RESET with respect to Ground......-0.5V to +13.0V Maximum Operating Voltage ............................................ 6.0V DC Current per I/O Pin ............................................... 40.0 mA DC Current VCC and GND Pins................................ 200.0 mA ----------------------------------------------------- Notes: 1. All DC Characteristics contained in this data sheet are based on simulation and characterization of other AVR microcontrollers manufactured in the same process technology. These values are preliminary values representing design targets, and will be updated after characterization of actual silicon. 2. “Max” means the highest value where the pin is guaranteed to be read as low. 3. “Min” means the lowest value where the pin is guaranteed to be read as high. 4. Although each I/O port can sink more than the test conditions (10 mA at VCC = 5V, 5 mA at VCC = 3V) under steady state conditions (non-transient), the following must be observed: 1] The sum of all IOL, for all ports, should not exceed 60 mA. If IOL exceeds the test condition, VOL may exceed the related specification. Pins are not guaranteed to sink current greater than the listed test condition. 5. Although each I/O port can source more than the test conditions (10 mA at VCC = 5V, 5 mA at VCC = 3V) under steady state conditions (non-transient), the following must be observed: 1] The sum of all IOH, for all ports, should not exceed 60 mA. If IOH exceeds the test condition, VOH may exceed the related specification. Pins are not guaranteed to source current
193 :
774ワット発電中さん :2009/02/01(日) 05:27:33 ID:0yGzqCAX
>>190 40mAは絶対最大定格ですから一瞬でも超えてはいけない条件です。
これ以外に日本語データシートのp117の注意書きに
@全ポートのIOLの合計が60mAを超えるべきではありません。
@全ポートのIOHの合計が60mAを超えるべきではありません。
と書いてあります。
これは厳しい条件ですが、測定条件のポートあたり10mA程度にしておくのが良いのではないでしょうか。
それ以上に、全消費電流が200mAを超えられないわけだが・・・
前スレあたりでガイシュツだったハズだが・・・
もう全ポート電流とか絶対定格規格の事はテンプレにいれようぜ。
余ってるI/Oを電源に繋いだら全ポート電流は増えるの?
天才発見
>>197 その原理を利用すればトランジスタなしで白熱電球ぴかぴかできるな。
>>197 前に、寝ぼけてSinkポートの電流がsourceポートに出てくるようなこと書いた奴がいたな。
俺ですけどorz
202 :
774ワット発電中さん :2009/02/03(火) 09:25:03 ID:9WCUr+qn
久しぶりにAVRに書き込もうとして、家の中ライタを探した。 すると,AT2313・HC4066・MAX232を搭載したライタが出てきました。 AVRDUDEであれこれ試しましたが、NG。 だれぞこないな古典的ライタを、後生大事に使っている香具師さんが いたら、使えるソフトを教えてください。
AT2313の中身がわからないとなんともいえないけど それって秋月のライタですか?
204 :
774ワット発電中さん :2009/02/03(火) 12:05:37 ID:9WCUr+qn
失礼。自作といってもSWとか回路はコピーです。 トラ技のバックナンバーのダウンロードをあさったがなし。 早速のレスありがとうございます。
205 :
774ワット発電中さん :2009/02/03(火) 12:09:57 ID:9WCUr+qn
失礼。自作と言ってもSW、回路はコピーです。 トラ技のバックナンバーにもなさそうです。 HC125が出てきたので、chaN式を製作開始中。 早速のレスありがとうございます。
大事なことなの(ry
>>197 電源ピンに流れる電流を低減するということなら効果があったりして。
余ってるポートの半分をVCCに接続してH出力にすると、Pch FETがONして低抵抗で内部の電源ラインに繋がって、
残りをGNDに接続してL出力にすると、Nch FETがONになって低抵抗で内部のGNDに繋がる、と。
FPGAだと、L出力してGNDを強化するのはよくやるよね?
>>202 デバイスに単独給電してから、プログラマ接続して、ってパターンかも?
209 :
774ワット発電中さん :2009/02/04(水) 10:19:42 ID:yTJgbf7H
コメントありがとうございます。ChaN方式完しましたので、あとで試して見ます。 この数年間H8&SH2ばっかりだったもので、復帰が大変です。
210 :
774ワット発電中さん :2009/02/04(水) 19:43:33 ID:q/ed5awj
tiny2313にてLEDをダイナミック点灯させる方法として #include<avr/io.h> int main(void){ DDRB=0xFF while(1){ portB=0x01; portB=0x02; portB=0x03; } return; } このようなプログラムでダイナミック点灯しますか? それともやっぱりタイマー等を使用しないと出来ないものなのでしょうか? 分かる方、ご教授ください。お願いします
Ainy2313の動作クロックに近い早さで { PB0につないだLEDが点灯(PB1につないだLEDは消灯) PB1につないだLEDが点灯(PB0につないだLEDは消灯) PB0, PB1につないだLEDが2つ共に点灯 } を繰り返すので、結局2つのLEDが点灯しっぱなしに見えると思う。 あまりダイナミック点灯としての意味が無い様に思えるのだが…
>210は 0x01、0x02、0x04で3つのLEDをダイナミック駆動したいんじゃないか、 とエスパーしてみる。
212のいうようにやれば、ダイナミック点灯になるけど 他の処理も何かするならタイマつかってやったがいいよ。 PORTB = 0x01; PORTB = 0x02; PORTB = 0x04; 〜なんか処理 } ってすると3個目だけON時間が圧倒的に長くなって他より明るく見えると思う。
214 :
774ワット発電中さん :2009/02/04(水) 21:45:29 ID:q/ed5awj
>>211 あwwwwwwwすみませんwww
>>212 さんの通りです。
>>213 なぜ、ON時間が変わってしまうのでしょうか?
よかったら教えてください^^;
ループエンドでジャンプが入るから、何もしなくても三つ目のLEDだけ数倍明るく点等しちゃうよ。 タイマー使うのが一番簡単で合理的(他でタイマー使っちゃってると厄介だけど)。
一応こういうのもありだ 「なんか処理」が長ければ暗くなるが n=0; while(1) { PORTB = 1<<n; なんか処理 if (n == 2) n = 0; else n++; }
暗くなるというか、ちらつきが目立つようになる、か
>>216 べつに本題からしたらどうでもいいんだけど。
n=0x01;
while(1)
{
PORTB = n;
なんか処理
if (n == 0x04) n = 0x01;
else n = n << 1;
}
てやったが、効率がいい。
219 :
774ワット発電中さん :2009/02/05(木) 04:28:07 ID:o4dR/7Pb
「ダイナミック点灯」って何?ダイナミックの意味不明。 もしかして「点滅して見える?」という質問ぢゃ無いのでは? 君のwhile();から「消えないで〜」と言う叫びが聞こえる気がする… タイマーって言うから「点滅の為のウェイト」かと思ったが、 「一瞬で消えてしまう(と思い込んでる)LEDを、高速に何度も点け直さねばっ!!!」 っと言う事なのでは… ええとね、PORTB|=1;と一回1を書いたら点く。点きっぱなし。 PORTB&=0xfe;で0を書いたら消えるよ。 点滅させたいなら、 PORTB|=1; // 点くよ for(i=0; i<255; i++); // ウェイトだよ。時間稼ぎ。 PORTB&=0xfe; // 消えるよ for(i=0; i<255; i++); PORTB|=1; // また点くよ for(i=0; i<255; i++); PORTB&=0xfe; // 消える こんな感じだが… この時の「ウェイト」を関数にして、中でタイマーを使う事が多いね。 だからみんな「タイマー」と聞いて「点滅だ」と言うんだよ。
220 :
219 :2009/02/05(木) 05:18:55 ID:o4dR/7Pb
もしかして、AVRとLEDを抵抗なしで直結する気では… なんか霊感が冴えて来て眠れないぞ!! LEDは豆電球と違って抵抗がほとんど無い。銅線と一緒。 例えば電池の+と-にLEDを直結したらショートしちゃう。 だから普通は抵抗を挟む。そういう事はOK? AVRにはポートのピン毎に「プルアップ抵抗」が内臓されててプログラムでON/OFF出来る。 先人の回路とかを拝見するとAVRにLEDを直結してる事が多いけど、 それは「先にプルアップONにしてからポートを出力に切り替える」 と言うプログラムになってるからショートしない。 いらんお世話だったら御免な。 あ、ついでに…LED点けるなら5Vで。3Vの回路では点かないよ。
3Vでも大丈夫だろ
222 :
774ワット発電中さん :2009/02/05(木) 08:28:38 ID:2vyhT0xD
3VはLEDの色によるかと、赤とかならいけるはず。
何を言ってるのか意味がわかんない・・・ 変な電波受信しないほうがいいよ ダイナミック点灯は点滅じゃなくて、 省電力とポートの節約でおこなうもの これの場合はポートは減らないが、点滅させたいって話じゃないよ あと、プルアップ抵抗をONして出力に切り替えるって 内臓プルアップはポートが入力のとき専用だろ 釣られてんのかな
224 :
のうし :2009/02/05(木) 08:39:36 ID:spA/WcGk
Rなしでもダイナミックならいけることがある。 桁数が多いと各桁を一瞬でフラッシュするように点灯さすからRなしなんてことあった。 またTTL時代とは違って最近のI/O端子は出力に電流制限が ついているのがある(普通?)からR無しでもいい場合がある。AVRはどうだかわからないけど意外といけたり‥
>>243 スタティックでもダイナミックでも消費電力は同じだろ
226 :
774ワット発電中さん :2009/02/05(木) 09:04:53 ID:oEN6wUm8
>225 マトリクス組んだら違うと思うが
全部が同時にONなのと 同時には1個しかONじゃないのは違う あと、ダイナミック点灯だと全体でのデューティ比を調整することもできる
>>226-227 スタティック点灯と違い、ダイナミック点灯は実際に点灯している
期間が短くなるから点灯時の電流を増やして輝度を上げる必要
がある。
スタティック点灯と同じ電流(制限抵抗値)では、平均化されて暗く
なる。
発光効率が変わらない限り、輝度は消費電力に比例するので、同じ
輝度条件であれば、消費電力は同等。
>>224 AT90SなAVRなら状況次第でそれ可能だったんだけど、
megaになってからは無理だな。
>>228 平均的にはスタティックと同等の発熱になるからちょっと無理した電流でもおk、ってこと?
231 :
774ワット発電中さん :2009/02/05(木) 12:07:06 ID:oEN6wUm8
>>228 >輝度条件であれば、消費電力は同等。
勝手に条件設定ktkr
表示器か投光器かでかわるよね。 表示器なら目の残像効果で明るく見える。 例えば8*8のドットマトリックスとか使ったことあれば解ると思うが 各列のデューティ1/8でも十分きれいに見える。 でもスタティック点灯で定格電流の1/8でつけたりしたら相当暗くなるよ。 見た目 スタティックで定格電流>ダイナミックで定格電流>>>スタティックで定格電流/8 みたいな関係になるから、省エネ。
>>220 の言っているプルアップ抵抗で電流制限っていうのは嘘ですよね。
できるならすごく便利なんだけど。
>>233 ものすごーく暗くてもいいなら、できるw
データシート上はmega88でVcc5V、Vf2.0Vの条件で、80μAくらいは流れるはず。
まあ、できないと言った方がいいな。
ちょっと妄想してみた。 LEDのカソード側をGND、アノード側をAVRのポートに接続 ポートをLOW=消灯、ポートをHiZ=点灯(内蔵プルアップ経由で電流が流れる?) けど内蔵プルアップって50KΩくらいですよね。LEDには0.1mA程度しか流れないか・・・
ピコーン(AAry 100μAで点灯するLED作ればいいじゃん。 って放置してても点灯しそうだがw
>>231 概念的にはそんなもんじぇね?
LEDのデータシートの効率カーブとか
見比べたら色々条件は出てくるけれども。
入出力設定ミスってて、内蔵プルアップで点灯したことあるよ。 赤色なら点滅してるのはっきり分かったけど緑とかじゃ無理かも。
>>224 AVRの短絡電流保護はなかなか強力だったぞ@Mega88
回路ミスで出力がGNDに短絡してたことがあったが、普通に動作してたんでしばらく気付かなかったことがある
妙に消費電流が多いんでAVR触ったらかなり熱かったんで気が付いた。その石は今でも元気です
>>230 LEDのデータシート見れば、ダイナミック駆動用の定格が書いてある
連続点灯時の数倍の電流が流せるはず。ちゃんと駆動パルス時間とかも守れよ
抵抗とかTrとか面倒くさいので、 3桁7セグLEDのアノードもカソードもtiny2313に直結してドライブしたことある。 PWMで電流抑えるとかも無し。 10時間ほど使ったけど、発熱も無く普通に使えていた。 でも電池の消耗が激しいので、セグメント側に8本抵抗を付けた。 コモン側は二つのピンから出力するようにしてるけど。
>>228 人間の明るさに対する特性がリニアだったらその通りだが,実際は違う.
人間の感覚は対数特性だし残像効果も加わることから,
ダイナミック点灯時にLEDに与える電力量がスタティックのそれと比較し半分程度あれば同じ明るさと知覚できる.
それはLEDの特性にもよるぞ。 平均電流が同じでもダイナミックにすると暗く見えるのと明るく見えるのがある。
じゃあ、スタティックの回路でも点滅させれば電力削減できるんじゃね?
それはつまりPWMだな。
AVRって最低電圧1.8Vってなってますけど 1.5Vでも動きますか?
>>241 >人間の感覚は対数特性だし残像効果も加わることから,
LEDむき出しだとそう思うけど、
チリ紙とかで拡散させると意外とリニアに見えるんだぜ。
>>245 乾電池で?
内部1MHzなら行けそうな気もするけど、
ロットや個体差も激しそうなので保障はできませんけど。
1.2Vくらいで死ぬだろうから電池の持ち
は恐ろしく悪いので止めた方がいいと思う。
乾電池1本で動かそうとおもったんですけど、やっぱ無理ですか
乾電池で動かしたいだけなら昇圧で動くよ
1Trブロッキングの奴で出来るとパーツ少なくてよさそうなんだけどねー LEDを繋ぐようなもんじゃないから、あれって不安定かな
乾電池なぁ 液晶時計の工作で1か月は持つってどっかで見て、 自分は7セグで作って006Pで動かしたら(レギュレータで5V)、 1日で電池無くなったなぁ。
ATTiny13Aと最近流行のOLEDで作るとか。
OLEDって流行っているのか…
>253 液晶と7セグLEDは全然違うだろ たとえば秋月のSC1602なんかだとバックライトつけなければ 待機時なら1mAも食わないけど 7セグLEDだとダイナミック点灯で1セグ当たり10mA位流して 平均4セグ位は点灯してるだろうからそれだけど常時40mAとか 食ってないか? 006Pだと500mAh程度だろうから 1日で切れるのは当然だね。
うん。今なら分かるよw AVR(というかマイコン)さわり始めて初めて時計作ったときの話。 いやー、マンガン電池で1日、アルカリでも1日半で切なかった。 1セグ10mAくらいだったと思う。4桁をダイナミックドライブ。 1桁点灯毎に数msスリープなんて小細工もしたけど焼け石に水だったというw
>>243 それスタテイックって言えるの?
ダイナミック=動的
スタテイック=性的
って事でしょ?
>257 うんうん。LEDって省エネってイメージだけどマイコンで省電力動作 させようと思うと、とたんに大電流に思えてくる。
オレなんか、性的にダイナミックだぜ
261 :
774ワット発電中さん :2009/02/07(土) 00:16:54 ID:ean7Wt21
ちじんだりちじんだりするんですね。 わかります・・・
>>260 体力持たないので(COM側ポート電流許容値越えるので)
大人のおもちゃに頼る(トランジスタかませる)のですね
低電流化の肝はなんなんでしょうか?
AVRだけでいけば如何にクロックを下げるかじゃないかな。 低クロックですめば電源電圧も低めにできるし。 できるだけスリープ掛けるようにしといて、ウォッチドッグも止めて。 これで結構減る気がする。
>>257 時計なら、見てないときは光らせる必要ないんだよな。
・・・・焦電センサーつけて人間を感知しなくなってから数分で
表示を止め計時と定期的焦電センサー監視だけにするとか。
トイレの自動照明みたいに、じっとしていると消えそうだけど。
>>264 data sheet みると tiny 2313内蔵RC発振器,CKDIV8=プログラム(0),500kHz
5Vで0.2mA程度なんですけど 1.8mA ながれてますわ
コンパレータOFF 内部基準電圧 etc やっても1.2mA程度
1.8V対応のライタ作ったときに性能評価も兼ねて実施したことがある。 水晶発振20MHz駆動のATTINY2313で1.3V辺りまで落としてもちゃんと動いてた。 1.2Vから怪しくなって1.1Vはほぼ動作不能だった。
>>266 それ、アイドル動作スリープ時の消費電流みたいだけど、意図とあっています?
時計みたいなもんなら、スリープをうまく使えば大部分アイドル動作になるはずだとは思うけど・・・
標準動作時なら、0.8mA。それでもちょっと多めですね・・・
>>253 シリーズレギュレータ使った?あれって、出力電流を流さなくてもレギュレータで消費してしまう電流
(quiescent current)が数mA〜10mA程度流れるよ。
006Pだと300mAhぐらいしか容量ないから、無負荷でレギュレータをつないだだけでも30時間ぐらいで
電池切れを起こす。
Low quiescent currentタイプのレギュレータを選べば数10μAまで絞れるけど・・・
>>268 どうもです
みるところがちょっと違ってたようですね
271 :
210 :2009/02/08(日) 19:28:13 ID:CcwDZge1
遅レスすまそ
>>219-210 >「ダイナミック点灯」って何?ダイナミックの意味不明。
動的点灯、そのまんまだと思いますが。ネトか本か、どこかの資料から
覚えた言葉なのでそこまで特殊な単語ではないと思いますが・・・。
>もしかして、AVRとLEDを抵抗なしで直結する気では…
なんか霊感が冴えて来て眠れないぞ!!
ちゃんと電流制限抵抗を用います。
>
LEDは豆電球と違って抵抗がほとんど無い。銅線と一緒。
例えば電池の+と-にLEDを直結したらショートしちゃう。
だから普通は抵抗を挟む。そういう事はOK?
すみません、知りませんでした^^;
絶対定格を超えると焼ききれるという知識しかありませんでした。
定格を超えると短絡してしまうんですね。ありがとうございます。
>それは「先にプルアップONにしてからポートを出力に切り替える」
プルアップ回路を制限抵抗の変わりにできるんですね。
じゃあこれを有効にしておけばいいんですね。
>>271 >プルアップ回路を制限抵抗の変わりにできるんですね。
できねえよ
そのレスから下を読めよ
271を初心者質問スレに誘導しなくていいのか?
>>271 キミにはPICがお似合いだよ、さようなら。
霊感がさえてる人の話は気にしないほうがいい LEDってかダイオードは 印加電圧がVf以下:絶縁(R = ∞) 印加電圧がVf以上:Vfの逆起電力 + 導通(R = 0で仮定) で通常の用途では考える。 だから定格を超えたら短絡するってのは違う。 定格の範囲内でも順方向電圧を印加してれば短絡してるような動きだから。 元のまま、絶対定格を超えたら焼ききれるって考えてていいよ。
AVRのPWM機能を使いたいのですが、 PWMの周期は、タイマー0の場合OCR0(A,B)で決めれるようなのですが、 デューティ比はどのレジスタで決めるんでしょうか?
282 :
280 :2009/02/09(月) 13:44:20 ID:6iXfscM/
自己解決しました OCR0AでTOPを指定して、OCR0BでON時間を指定するのですね(非反転の場合)
>>281 ELMさんのにもこんなノリのがあったなあ・・・
予想を上回る出来に吹いたw
コメントにも書いたがメッセージ差し替えたライタプログラムも作ってがんがれw
「もう、ISPケーブル外してもいいよね・・・」
「あかん、まだまだや、EPROMとかVerifyとかまだまだやること一杯あるんや」
失礼しました>ポカーンとしている方々
が、がお・・・
アニオタうざ
出来ない香具師は黙ってろ
288 :
774ワット発電中さん :2009/02/10(火) 00:02:02 ID:Ldotk9kU
なんだ キモアニヲタ図星かよ 死ねって
>>283 「もう、Writeしてもいいよね・・・」
「あかん、まだまだや、あの機能追加、ここの速度改善、まだまだやること一杯あるんや」
って感じだな・・・
デバッグはいつまでも続いていく・・・・
AIRライタいいな。 オレも一つ自作るか。
ageんなよ、無能。
いいね
これだからニコ厨は嫌われる
すごいね
プローブをどこにもつないでないのに、時々オシロに波形があらわれることがある
フロート状態ならどんな波形があらわれても不思議じゃありません。
ATmega88 とかのマニュアルにのっている 「本製品での新規設計は推奨されません」って どういった意味で推奨されないんだろう?
それより新しいデバイスがもうあって、 生産してないからとかかね?
遠くないうちにディスコンにします。という意味だと思う。
うむー。ATtiny2313には書いてないんだけどね・・・。
う〜ん。そういう意味であれば問題ないですね。
何か新規設計しても長期運用に向かない問題点があるのかと思ってしまった。
>>298-299 安心を有難う
>>297 ATmega88はATmega88P若しくはATmega88Automotiveへ移行して終息。
#既にATMega88はAtmelの本家AVR Productページには載ってない。
で、ATmega88Pも終息。
つまりATmega88PAにようこそ、って事。
Mega88がもうディスコンなのか、早いなぁ。
書き込みにCHANさんのavrsp使ってるんだけど、 デバイスシグネチャが、88は1E-93-0Aで、88Pは1E-93-0Fなので Unknown Deviceと表示されてしまう
>>303 私もその状態になったのでもう一度ダウンロードして上書きしたら認識したお
バージョンアップされたのかな?
305 :
303 :2009/02/10(火) 22:28:53 ID:kbwyE3vf
ソースに自分でデバイス追加して再コンパイルして対処しました
秋で売ってるmega88Pも買わず未だに88を使っているよ。壊れんし
88と88Pは何が違うんですか?
>>307 どこかでピコパワーがうんぬんかんぬん書いてありましたね
>>302 pico power化出来て数が出てる奴は順次pico powerになるんじゃないかな…
レジスターも増えてるんだね
汎用レジスタが増えてくれたらうれしいのに
そんなに精度が必要なんて、何作ってるの? 俺なんてADCはいつも左揃えで上位8ビットしか使ってないよ
>>313 んー。0〜1023だとレンジ切り替えやらが面倒なので・・・
計測器のほうで使えたらいいなとですね・・・
話の進めをとめてすいません〜。 そろそろ寝ます。安心ありがとうでした
その16bitのうち実質意味があるのは上位何ビットだろう
mega88PAと88Pの違いは 使用電圧範囲の統合だけかな
>>316 確かに、4層基板起こさないと意味ない気がするな。
>>314 16ビットADCを外付けするより、MSP430を使った方が安上がりだけどね。
>>318 両面基板でも、片面の大半をベタGNDに出来れば、結構ノイズを抑えられるよ。
>>319 アートワークにもよるけれどADC12ビットくらいならベタグラでもいけそうだけど、
ADC16ビットは厳しいと思うけどね。
tiny2313って、ADコンバータついてないんですか?
そんなことまでいちいち人に聞いてたらこの先大変だから データシートは見た方がいいよ。
自分で判断しろやゴルァみたいで感じ悪いんで一応回答w 付いてないよ。 ついでに「tiny2313 ADコンバータ」でググるといろいろヒントが見られる。
tiny261に移行しようぜ
入手性考えたら現実的には秋月で250円で買えるmega88pじゃまいか ピン配置が気に入らないけど
326 :
321 :2009/02/11(水) 23:12:42 ID:LKUkDsen
コンパレータで用が足りました
>>320 個人で精度、確度ともに12bitちゃんとだせる設備もってるってスゴス
新しいマシン買ったので取り合えず使ってなかったwin2000 いれてWinAVR-20081205入れて 今まで作ったプログラム(20060421)をコンパイルして 動かしたら動かなくなった・・・ 書き込み環境かと思ったけど2006のバイナリを新マシンで 書き込む分には動くので2008で作ったhexファイルが悪いみたい。 いま調べてる最中なんだけど、2008で気をつけるポイントってあるのかしら?
取り合えず2006入れたら動いたけど、謎だ・・・ どこが原因でおかしいのか調べるにもプログラムが でかいので調べる気がおきない・・・ こんど暇になったら調べてみるか・・・
どうせ最適化とかそのあたりじゃねぇの?
最適化が原因なら、割り込み内や空ループで使う変数にvolatileを付ける。 WinAVRの最近のバージョンから影響が出るようになった気がする。 動くようになったら、廃止されたマクロとか定数定義も置き換えかな。
>>328 「Win2000」の時点で間違ってる気がする。
Win2Kでも関係ないっしょ
334 :
774ワット発電中さん :2009/02/12(木) 08:56:26 ID:IXimSGJ5
>>328 20060421で正常に動いていたインラインアセンブラのプログラムが
20081205では正しく動かない。(コンパイルエラーにはならない)
原因はまだわからないが、2008では動かない。
大方クロバーリストに入れるレジスタが足りてないとかだよ レジスタの使い方が変わって今までたまたま動いてたのが動かなくなったと
>>334 両方のアセンブラリストを比べればわかるんじゃないか?
Automotive AVRなんてシリーズがあるけど 車載用ってことだよね? 採用実績はあるの?
329です。 情報どーも。 確かにvolatile付けてない変数もそれなりに あったからそれかも・・・ 液晶の制御なんだけど、画面がぐちゃぐちゃになる・・・ インラインアセンブラは使ってません。 原因の場所がわかればそのコード比較すればわかるけど、 コードがデカいんで挫折中。 わかったら報告します。
339 :
329 :2009/02/13(金) 01:15:11 ID:hQ+feEv/
もしかして2006のmakefileまんま2008で使ったからかな・・・ makefileの中なんて殆ど見てないや。
331です。 念のためなるべく正確に伝えると、 割り込みルーチン外で宣言していて、割り込みルーチン内で値を変更する変数にはvolatileを付ける、 のつもり。 ちなみに自分の環境は、WinAVR-20080610、WindowsXP-Pro-SP3
>>338 wait関連のトコロを_delay系に書きかえる、とかだね。
>>338-339 F_CPUマクロ変数使っていて、それが違う値になっているとかは・・・ないのか。makefileはそのまま使っているのだな
あとはウェイトループが最適化次第で待ち時間が変わってしまうようなものを使っているか。
>>340 > 割り込みルーチン外で宣言していて、割り込みルーチン内で値を変更する変数にはvolatileを付ける、
> のつもり。
自分は以下のような目に遭いました。
typedef struct
{
char prm1;
char prm2;
} FOO;
volatile FOO gFoo;
割込み中で gFoo.prm1=1; にして、メインループで
while(1){
if (gFoo.prm1==1){
(処理)
break;
}
}
としたら gFoo.prm1=1 になったのにブレイクしなかった。
アセンブラソースを見ると while ループの直前に gFoo.prm1 をレジスタに
代入してループ内ではレジスタしかチェックしてなかった。
typedef struct
{
volatile char prm1; ←ここに volatile をつける
char prm2;
} FOO;
としたらちゃんとできた。
>>343 こういうの困るなあ
gcc自体のバグなのか仕様なのかAVRポートにバグがあるのか
こんな穴があったら眠れなくなるじゃねーか
gccのバージョンいくつですか?
>343は >としたら gFoo.prm1=1 になったのにブレイクしなかった。 まで読んだ時点で先がわかって、 >volatile char prm1; ←ここに volatile をつける こうするものじゃないかと自分は気付いたけど、 これはバグでも穴でもなくvolatileの付け所はもともとこういうものだと思うのだが。
>>344 最適化では、どのルーチンが割り込みで実行されうるかというところまでは把握せず
単にそのルーチンの流れに沿って見て、その範囲で変更され得ないと判断したらそのように扱うと言うことだろうな。
(ここではwhile節内にgFoo.prm1を書き換える処理がない=>一度だけレジスタに入れてそれチェックで充分)
割り込みで変えられて、それをチェックするなら、そういう変数にはみなvolatileつけろってことだろう。
もしもmain側に初期設定としてgFoo.prm1=0;なんてのがあれば、if分毎最適化でなかったことにするのかも。
>>345 じゃあ構造体にvolatile付ける意味は何すか?
348 :
343 :2009/02/13(金) 15:00:18 ID:Nc4X6BEq
>>345 > これはバグでも穴でもなくvolatileの付け所はもともとこういうものだと思うのだが。
もしかして
volatile typedef struct
{
char prm1;
char prm2;
} FOO;
て書いてたら良かったの?
>347 構造体の代入をするとき。 「volatile 構造体」でググるだけでもいろんなことが出てくる。
>348 「volatile 構造体」でググってみるとまさに例が出てくるよ。 こういった話だともうCのスレ行った方がいいかな。
>>349-350 具体的に判りやすい例を1つ挙げてもらえませんかね。
ググってもgccのバグとしか思えないんで。
>>352 たぶん、
>>343 のようなコードだと、gFooという変数=gFoo.prm1/prm2があるアドレスに対するvolatile属性がつくだけなのでは。
つまり、構造体を指し示すアドレスは変更されるかも知れないと考えてくれるが、
アドレスの示す先のデータが突然変わるなんてことには無頓着だとか。
まあそれでも内容が変わりうるには違いないので、本当は構造体内の変数全部volatileにならないと変じゃないかとは思うのだけど
実際あちこちのコード例見ると、AVRGCCに限らず、メンバーにvolatileつけてるのがあたりまえってことは、それが暗黙の了解なのかなと・・・・
volatileをちゃんと解説してる本なんて持ってないからよくわからない・・・
型修飾子は、常に変数に対して作用する。 だから、「volatileな構造体型」というものを定義することはできない。 「volatileな構造体変数」を宣言するか、「メンバ変数がvolatileな構造体」を定義すること。
ごめんよく見てなかった、構造体につけてるね。 バグだと思う。
>>353 そういやlinuxのカーネルソースにも
こんな感じの怪しいvolatileがあった気がする。
こういうとこでコンパイラを信用できないのは辛いなあ。
手元のプログラミング言語C++のリファレンスの型指定子の説明には
「volatile配列の各要素はvolatileであり、volatileクラスオブジェクトの
関数でない非静的メンバはそれぞれvolatileである」とある。
K&Rには「それは最適化に関係のある特別な性質をもつことになる」としか書いてない。
>>355-356 ありがとうございました。
>>355-356 テキトーな回答すんな、迷惑だろが
K&Rの定義ではvolatile型修飾子は最適化を抑制するべきものとされているが
ANSI C規格においてはその実際の動作は処理系定義であるとされている
つーわけでgccのマニュアルに書いてあれば仕様、なければバグ
>>343 ところで、この時のWinAVRのバージョン覚えてたら教えてくれないかな。
うちのWinAVR-20081205(-Os、-O3)では再現しなかった。
while(1){
if (gFoo.prm1 == 1) {
lds r24, 0x0094
cpi r24, 0x01
360 :
343 :2009/02/13(金) 17:33:42 ID:Nc4X6BEq
>>359 > ところで、この時のWinAVRのバージョン覚えてたら教えてくれないかな。
> うちのWinAVR-20081205(-Os、-O3)では再現しなかった。
20060421 で オプションは -03 でした。
gFoo.prm1をwhileを抜けた後で参照(書き込み)してるとか?
う−ん 俺も構造体メンバにvolatile指定することはあっても 丸ごと指定するっていう発想は無かったな
>359,360 WinAVR 20050214 (gcc 3.4.3)、avr-gcc 3.4.3, 4.3.2 でも再現しない。 volatile の解釈は正しく >351 になっていた。 i386用だが 4.1.3 も同上。最適化かえてみたが同じ。
俺は丸ごと指定する派
volatileなんて使うぐらいなら、全部アセンブラで書いた方がすっきりすると思う
>>360 ありがとうございます。
インスコ失敗したんでちょっと確認できませんでした。
>>365 それは極論
俺も丸ごと派
メンバにvolatileなんて考えたこともなかった
勉強になるわ
秋月でATmega88Pを買う予定なんですが、 ATmega88PってATmega88とは刻印で区別が付くでしょうか?
秋月のATmega88っていつから「P」になったんですか?
一時 在庫切れになったけど そこからだとおもう 在庫切れ前なので おれのはP無し
2−3ヶ月前にかったけど Pありがあるなんて知らなかった・・・・
前からあるやつの発売日おかしいよね
割と最近、mega88の在庫切らしたじゃん。そこからmega88Pに変わったんじゃないかな。 発売日2008/02/18はmega88(Pなし)を取り扱い開始した日なんじゃない? で、サイトリニューアルのタイミングで商品名称変更と説明補足と。 在庫切らす直前にたまたま店頭でmega88買っていたが、その時点ではmega88Pは無かったよ。
>>375 リニューアル前にmega88(P無し)を注文したら、P付きが届いたよ。
んでメールしたでふ。(当時)いま発注分は全てP付きになっています。
サイトの更新が間に合っていませんとのことでしたでふ
なんと。じゃぁ自分の勘違いかな。 在庫切れのレスがあった気がするので遡ってみたw >244 名前:774ワット発電中さん[sage] 投稿日:2008/11/08(土) 22:41:23 ID:02r3Hgjc >秋月のmega88売り切れって誰か100個買いでもしたんかー 自分が買ったのは2008/11/01で、これはmega88(Pなし)。 そういえば、店員に「メガはちはち下さい」と言って取ってもらった気がするので、 88Pがあったとしても88(Pなし)を渡してくれたのかもなぁ。
あ、いや待て、>375と>376は別に矛盾してないな。 在庫切れの時に88Pに変わったと仮定して、次回入荷が2008/11/08以降。 サイトリニューアルは2009/01/26。 …ていうかどうでもいいですね。スマヌ。
まぁ、でも秋月は良心的だったよ。 メールしたらmega88(P無し)をわざわざ送ってきたよ。 返信用封筒付いてたからmega88Pを送り返したけど。
ATMEGA168のアナログ入力ピンの最大定格って何Vですか? 仕様書にはVccと書いてあったと思うのですが、これ以上かけると壊れてしまうのでしょうか?
Reading signature .. 0x00, 0x00, 0x00 .. OK!
アナログ入力の最大定格ってVcc+0.5Vくらいじゃなかったけ? 「絶対最大定格」ってのはそこに書かれている以上の 電圧とか電流とかを、一瞬でもかけたり流したりすると 機器はあぼーんするよって言う数値なので 建前上は「壊れる」 でも俺は実際に絶対最大定格を越えた値で使ったことが無いので 実際のところはどーよ?ってつっこまれると 「壊れるんじゃないかな? ま、ちと覚悟はしておけ」 としか言えない。
13Vまでおおけえです
ピンにVCC以上掛けたら保護ダイオード通ってVCCのほうに流れていくだろ Vcc+0.5Vくらい の 0.5Vくらい はダイオードの電圧降下分。
1023VまでOKです
AVR ISPmk][でもAVR WRT2でもArduinoDuemilanoveからもsignatureが「00,00,00,00,」になっちゃうんだけど コレってチップ自体がダメぽ?
>>387 ロックビットが設定されてたらデバイス自体が認識しないんだっけ。
00,00,00,00になるってどういう状態なんだろうね?私も知りたい
389 :
380 :2009/02/16(月) 09:00:46 ID:UtthB8ht
そうですか、、 アナログの測定対象がVcc以上になる時があるので 分圧でもした方がよさそうですね。
>389 適当な抵抗噛まして,過電流さえ対処しとけば大丈夫。 (A/D端子はVCC+0.5V迄しか上がらない)
391 :
343 :2009/02/16(月) 09:29:40 ID:QyeeIfCb
343 です。
>>344-367 あたりでアドバイスをくれた皆さん、お騒がせしてすみません。
問題になったソースを確認してみましたが、私の勘違いだったみたいです。
typedef struct
{
…
} FOO;
volatile FOO gFoo;
この書き方は思った通りに動く事を確認できました。
volatile typedef struct ←ここに volatile を書いてもダメ
{
…
} FOO;
FOO gFoo;
これはバグではなく正しい解釈という事です。
>387 ISPプロセス初期段階のリセット失敗。 ISPではリセットを速いパルスで叩くけど、比較的ハイインピのラインなので 回路によっては内部的に L に落ち切れなくなる。 保護ダイオードに過電流がながれてたりとか、 入出力端子に巨大なキャパシタが直接ぶらさがってたりとか。 どっか(ISP周り以外の)回路がおかしいから配線をみなおせ。
>>389 Vcc以下とそれ以上について、どちらも精密に測りたいのか、Vcc以上は測れなくてもいい(壊れなければ)のかで話が違うかな。
前者なら、分圧などで制限、
後者なら、制限抵抗(+できれば外付けのダイオードクランプ)
13VはH8系のネタでした。
>>392 いやそれがブレッドボードでやっても同様なんダス。
共立AVRボードとかでも同様だったス。
ISPのライタしか持ってないのも今後困るだろうしって事で一応AVRドラゴン注文しておいたっス。
>>387 Vcc繋がってないとそんなんなった希ガスw
まさかとは思うが念の為
本来Vccはつなぐものじゃないとは思うけど、 ターゲット側のVcc給電は必要だし、それがライターのVccとあってないとおかしいことになるんだろうな・・・ ターゲットに電源亡ければVccもつなぐ事になるだろうし。 IOピンの保護ダイオード経由で中途半端に給電されちゃって中途半端に動くことはあるらしい。
ISPのVccって電源検出用だと思ってた。 Advancedで出てくるアレの。 と言うか、Vcc入れてないとAVR ISPmk][がそもそも使えなかった気がするっス。 ライタのVccってUSBバスパワーなのかな…?(AVR ISPmk][) だとしたら、合わせるってなるとライタからVcc引っ張り出せるようにしないと? 新品未使用(多分。買ったまま)のヤツでも同様の現象があるんで 多分、どっか俺が間違えてるんだと思うんスけど、ブレッドボードから直接ISPにブスブス刺してもなるんスよね…。 共立さんが出荷の時点でリセット無効とか書き込み禁止とかになってるって事ってないっスよね?
ISPコネクタのVCCはISP用信号のレベルコンバータに使われていると思いますよ
>>398 ブレッドボードでやるときの回路図というか結線図を書いてみそ
AVRISPmkIIの場合は1.8〜5.5Vという幅広い電圧に対応するために ターゲット電圧を取り込んでいるんだろうね。 ターゲットに電源供給してしかもVccを接続しないといかんということか。
>>400 職場なんで図は描けませんですorz
ISPコネクタからジャンパ線でMISOやらMOSIやらそれぞれ直接ぶち込んで
VccとGNDは外部から5Vのアダプタで、0.1μパスコンに。
VccとGNDはアダプタからとISPのVccとGNDに。
Arefは何も繋がず宙ぶらりんで。
って感じです。
今になって気付いたんスけど、AVccとAGNDってNCです?
>ISPコネクタからジャンパ線でMISOやらMOSIやらそれぞれ直接ぶち込んで うっかり逆だったり、とか?
>>403 直結のみも、プルアップもダメでやんした。
ちなみにATmega168で。
>>404 一度、うっかり逆でダメだったんで入れ替えてリトライしたのですが、やっぱりダメでやんした。
まさかここまで皆様に親身になって頂けるとは…感動です!
ATmega168のデータシートを読む Notes: 2. VCC - 0.3V < AVCC < VCC + 0.3V, however, AVCC should always be within 1.8 - 5.5V とあるけどAVCCの処理は?
>>407 Vcc→AVcc
GND→AGND
といった具合に繋いでました。
まさか発振してないなんて基本中の基本からミスってることは……ないよな、うん。
AVR RWTでねちっこく見たらリセット無効になってました。お騒がせして申し訳御座いませんでした!
ID変わってんぞ?
ATmega644PでRTCを使いたくてデータシートを読んだのですが、いまいち理解できませんでした。 RTCはタイマーのクロックとして32kHzを使用させるという解釈でいいのですか? 具体的にレジスタをどのように設定すればいいのでしょうか?
追記 32kHzの発振器がマイコンの中に内蔵されていて 専用レジスタの設定で、それをタイマーの発振源 に変更するのでしょうか? それとも、外部に用意されたクリスタルを 指定されたピンに接続してそれをタイマー の発振源にするのでしょうか?
どっちでも使える クロックソースの設定はレジスタじゃなくてヒューズで行う
LM35ってピン間違えるとチンチンになるね。 精度狂ったかな?
416 :
774ワット発電中さん :2009/02/16(月) 22:20:01 ID:jyuzsDTa
今、tiny2313を利用したちょっとした工作で、PD5に接続された トランジスターの1秒あたりのON(PD5がloになる)時間を計測し、 0.7s以上loの時とPD5のlo時間が0.4s以下の時とloの状態が0.4s〜0.7s以内続く時の 3つの状態によってそれぞれ分岐をさせるプログラムを作りたいのですが、 どんな命令を使用したらいいか分かりません。 どなたか、何かヒントになりそうな意見ございませんか? 助言、指摘なんでもかまいませんのでよろしくお願いします
>416 ループでも割り込みでもいいけど一定間隔でPD5を監視して"H"だったら カウンタ+1して。 1秒後にカウンタの値で分岐すばいいんじゃない(カウンタクリアも) ピン変化割り込み使うと軽くなりそうだけど、PD5じゃ使えないか。 それにしてなぜPD5固定?
418 :
416 :2009/02/16(月) 23:03:59 ID:jyuzsDTa
>>417 >それにしてなぜPD5固定?
プリント基板を作ってから割り込み変化に気付きました^^b
PD5のままで、なにか良い方法はないものでしょうか^^;
だから・・・例えば10ms毎のタイマ割込みでサンプリングして 1秒(100カウント)中にPD5=Loのカウント数(〜39, 40〜70, 71〜) で分岐すれば・・・ってこと。
タイマー割り込み使って、10msくらいの割り込みで無限カウンタ(PD5アサート0でも可だが)で ニゲート時の数値比較ですんなり行くんじゃないの? タイマー無いなら無限ループ中でそういう事をすればOKだと思うが。
タイマーの使い方をまだ熟知してないようだな
DIPのチップとブレッドボードで試作してからプリント基板に移した方がよかったのでは あとAVR Studioにデバッグ機能があるから、それである程度は確認できる デバッグ機能ははじめて使う人にはとっつきにくい感じだけど、 これ使いこなせないようじゃこの先大きなプログラム組むときに大変だよ
>>416 cnt=0;
for(i=0; i<10; i++){
if(!(PIND&0x20)) cnt++;
wait100ms(1); // ウェイトは
>>180 のリンク参考汁
}
if(cnt<4){ // 〜0.4s
} else if(cnt<7){ // 0.4s〜0.7s
} else { // 0.7s〜1.0s
}
単純に、これで良いという話?
あ、スペースは全角だから。ソースにコピペしないでね
>>416 >トランジスターの1秒あたりのON(PD5がloになる)時間を計測し、
うーん、その信号のLo/Hiの持続時間はそれぞれどれくらい?
Loが0.7sec続いてHiが0.3sec続くようなのなら
>>423 でいいけど、
Loが7msec続いてHiが3msec続くようなのなら、これではだめになる。
ICPでいいじゃん、と思ったらピン限定か。じゃぁポーリングかなぁ。PD6だったらICPが使えたのにねぇ
ジャンパ飛ばせばいいんじゃね?
1秒あたりなんだから1秒計測しておしまい、ってわけにはいかないのでは。 cntが連続していくつになるか数え続けて、 PD5状態が変わった時に条件分岐する処理になるかと。 cnt = 0; for (;;) { if(!(PIND&0x20)) { // Tr = ON (PD5=lo) cnt++; if (cnt >= 7) { cnt = 7; //オーバーフローを防ぐ // OFFが0.7s以上 } } else { if (cnt < 4) { // ONが0.4s以下 } else if (cnt < 7) { // ONが0.4〜0.7s以下 } cnt = 0; } wait100ms(1); }
ごめん ×OFFが ○ONが
もしかしたら、416は電波時計作ってるのかな? トランジスタで受けて、1,0,マーカーを識別するとか。
例えば350msのONのとき、wait100msだと読むタイミングで 3回カウントしたり4回カウントしたりするので wait10msやwait1msにしないと精度がでないよ。
エスパーがいるスレはここでつか?
433 :
423 :2009/02/17(火) 21:55:38 ID:6785rpBI
もはや416の思惑とは別次元かもしれませんが…
>>431 最初にwhile(PIND&0x20);してHiのあいだ空ループ、
ループを抜けた直後から等間隔なら、
あまり高レートにしなくても制度は確保できると思う。
仮に
>>423 をdata_read();という関数にしたとして、
main()
{
while(1){
if(!(PIND&0x20)) data_read();
// 他の処理
}
}
データを取りこぼすようならdata_read();の先頭で
wait1ms(5);とかしてタイミングをチとズラすとかする。
ここまで書くと俺が良く作る赤外線オモチャの受光部アルゴリズムまんまだよ。
4倍レートでサンプリングして何カウント?みたいな判定で誤動作してない。
この手のプログラムって、やたらタイマー使いたがる人が多いけど
wait+loopで済むならその方が単純明解だし、
他のマイコンにも移植しやすいソースになると思うんだよね。
光速?
船
> wait+loopで済むならその方が単純明解だし、 うっわ〜素人くさ〜
437 :
431 :2009/02/17(火) 23:19:56 ID:MqIjCt1X
>>433 Lエッジからならwait100msで問題ないです。
data_read();中は /*他の処理*/ が1秒間止まるので用途によっては心配かな。
2313Vって時計用の32Khz水晶できちんと駆動するもんですか? まだ9個あまってる>32Khz水晶
適材適所. 必要がないのにわざわざタイマ割り込みを使わなくてもいい.
>>433 >この手のプログラムって、やたらタイマー使いたがる人が多いけど
スリープ使いたいならタイマーは避けて通れないと思うよ。
ループだと電力浪費しまくる。
表示器がLEDとかFLで常時表示とかだと、関係ないけど。
>>439 そんなコジキハウスみたいなのやめて、
基礎設計しようや。
タイマー使えるときには大抵タイマー使っちゃうな。 一見意味不明なエラーが出るときもたまにあるけど、 それでも開発の効率が目に見えて落ちるほど難しい仕掛けではないと思う。タイマーって奴は。
他の処理も考慮せずに平然とwait100msなんて使うべきでない.
玄人の振りをして結局何も意見出してない
>>436 が居るスレはここですか?
>>443 俺、結構そういう処理入れちゃうけど、タイマー利用(?)とかで
みなさんどういう風にコーディングします?
自分の場合、例えばだけど、タイマーは7Segダイナミック点灯させておいて
main処理では平気でWait1secとかガシガシ入れたりする。
他の例は、バッファに入れた文字列をタイマー周期でUART出力とか…。
タイマーの分解能以下ならWaitは必要かもしれないけど、 それ以上はタイマーを使用してフラグ管理するべき。 無駄なWaitは今後の拡張性を阻害する。 また、割込み中の処理は必要最小限に留め、 速やかに開放し、割り込み同士の衝突をなるべく避ける。 割込み同士が衝突せずとも待たされてブレが生じるので。 メインループはそれぞれの処理をひたすら呼ぶ。 メインに列記された擬似スレッド関数内ではFuncで 状態に応じた処理を施す。 一般的にはこんな感じ。
>>445 いや、タイマー処理入れておいてループでウェイトとったらずれちゃうだろ・・・
それほど正確さを要する処理じゃないかも知れないけどさ
タイマー割り込み内でvolatile指定した1バイト変数をカウントアップして、
もしくはタイマ内で多バイトカウンタを回して、必要周回数に達したらvolatile変数のフラグを立てて
mainでは、その変数チェック→出番まだ→Sleep→タイマで起こされる→loop
出番があれば処理に飛ぶ
の連続で行けばいいのでは?
みんな タイマーを使おうぜ wait関数はLEDを点滅させる入門用に用意してあるだけ。 wait関数でも目的は達成できるけど やっぱり みんな タイマーを使おうぜ
タイマ所持のスレはここでつか
タイマ割り込みを使ってタスク切り替えだ!と叫び AVRにOS(orマルチタスクモニタ)は必要か?スレと化す………訳で無く。
クロックを1kHzにすれば、100ms待っても問題ないような気がする。
やっぱりタイマーか外部割込みでタイミングとって、暇な時はSleepとか 普段使う石って数種類だし、まともに書いた一番機能使ってるプロジェクト持ってきて、 処理を削除したソースをベースにしてる main { init呼出し後、スリープのループ } init { 初期化 } タイマー割り込み { カウントのみ } その他割り込み関数とか 後はmainでカウンタ見て処理して、初期化とかタイマー調節すれば出来上がり むしろwaitで他の処理とのタイミング気にする方がめんどい クリティカルな処理は割り込み内に書くけど、それ以外はmainで処理するな
453 :
445 :2009/02/19(木) 00:06:02 ID:FZkk19Ey
みんなありがとう、勉強になる。
>>446 ,447
volatile uint8_t nFlag_hogeを用意してAVRの割り込み優先度のアレみたいにして
ISR(タイマ)で、旗揚げゲームさせて・・・。mainでは、関数へのポインタか
if()elseif・・・・あたりでごりごり処理するってところ?
なんちゃってマルチタスクってところでしょうか。
我流で似たようなことをいざ導入するとなるとグチャグチャになってしまう。
main内のスレッドA、B、C…あったとして、B処理中に(高優先)Aフラグ立って、
BでモタモタしてたらAのタイミング失うとか…。並列処理(?)しようとして
どれも中途半端で、スタックあふれてアボンとか。
>>453 複数の処理をするならmain内の処理はタイマーの1ループ内に収まるようにしないとえらいことになるよ
本気でマルチタスクっぽくするなら、タイマー割り込み内でスタック操作して、
処理A,B,Cに順にリターンさせるとか。優先度つけるなら処理中フラグ見て処理先を決める
することなくなった処理は、他にCPU資源まわさなくてもいいならSleep、
他に廻したいなら強制的にタイマー割り込み発生させて次の処理に行くとかかな
まあそこまでする様な事に出会ったことは無いけど
>>453 本格的なプリエンプティプな処理はオーバーヘッドと
デバッグの効率を考えるとAVR程度のマイコンではお勧めできない。
RAMの容量からしてナンチャッテで十分。
高校のマイコン倶楽部の課題でやったのは エレベーター制御。 モーターのPWM駆動ではなく単にシーケンス部分。 ゴンドラの制御に扉開閉及びスイッチ検知、 レゴとマブチモーターの組み合わせだけど、なかなか面白かった。 使ったのはH8だったけどね。
しかし考えてみたら、電力消費や正確さを優先するなら、ICPかなにかを使うわな。 それをせずに、Tinyごときにマルチタスクとか面倒な仕組みを導入するのは疑問だ いい加減なハードの欠陥を、大掛かりなソフトで隠すのはよくない兆候な希ガス
それくらいのことで、「大掛かり」などとは程度が知れるな。
>>457 そんなアナタはPICスレがお似合いだよ
>>453 マルチタスクなんて大げさなことを考えず、どちらがお手軽かでいいのでは?
たとえば、1回きりの初期化のwaitでタイマ使うのもばからしいし、それほど正確さは要求されない、たとえばLCD制御の100usウェイトでタイマ使うのもあほくさい。そういうのは_wait_us()とかでいいと思う。
それに対して、繰り返し出現する比較的長いwaitとかで、そこそこ正確さもいるなら、やっぱりタイマ使った方が楽に正確さ確保できると思う。
電波時計の奴は・・・消費電力が気にならないなら&平行して行う処理に時間数十msecとかかかるものがないなら、どっちでもいいかな?
AVRはレジスタ多いからタスク切り替えだけで大変だ H8みたいにレジスタを束ねられないしメモリも少ない やるとしたら必然的に協調型で作るしかない 時間の掛かるタスクは自前で切り上げるように書く必要がある
H8とかだとシンクとソースでドライブ能力が違うのでシンクで使いますが AVRだとソースとシンク、どちらを使うのがベターでしょうか。 VCC,GNDともピンが1本の石だとどちらでも大差無いような気もしますが。
>>457 ICP使うには、入力信号が信用できないとなあ・・・
まあ、連続入力で有効にする機能(名前忘れた)と、
あり得ないほど短いパルスを切り捨てる処理を入れれば大丈夫かもしれんけど。
・・・なんかICP使った方がとっても楽なように思えてきた。ややこしいけど。
>>462 mega以降はどっちでも同じなので、電源落ちてるとき・断線やショート時など含め相手の都合か、わかりやすい方、慣れてる方でいいと思う。
シンクとソースって何ですか?
台所にある排水溝と蛇口
いやいや、流し台と調味料
>>465 ソースはプラス側へ(PNP型ドライバー)
シンクはマイナス側へ(NPN型ドライバー)
シンクはすーっ、でソースはふーっ
ブルドッグ
さすがAVRスレ、書込みのレベルが酷いな。 もっと技術的な内容で議論しろよ。
さすがAVRスレ、書込みのレベルが酷いな。 もっと技術的な内容で議論しろよ。
gcc使えるし素直だし 特に議論する事ないんだよ
PICみたいなお子様チップと違ってねw
PICにだってgccぐらいあるぞ。しかもMicrochip純正でな。
1命令4サイクルのPICで頑張れw
考えてから、ソースも晒せってことだよ
ネタ切れと言ってもこれは酷い・・・
SPIでSDカードの読み書きがしたいのですが、 ATtiny2313でできるでしょうか? SRAMが128バイトしかありませんけど。
SDは1ブロック512バイトがデフォルトだけど、それはFATの制限であって 確かブロックのバイト数を変更するコマンドがあった気がする 1ブロック64バイトぐらいに変更すればtiny2313でも扱えるかもしれない
読み出して、要らないデータを捨てればいいんじゃないでしょうか。 2313を複数個使うという手もあります。
あとは何に使うのかということだ 音楽データみたいにストリーミングデータなら、読んですぐ処理すれば メモリにセクタ全部蓄える必要がないから、それほどメモリは多く使わない
俺は事故とか自殺とか拷問とか刑罰は平気で見るんだけど 自傷行為かつ死なないというシチュエーションだけはだめだ 自傷行為でも最後に死ぬのが分かってると、なぜか安心して見れる あと他人に痛めつけられてるのも見れる でも死なないのに自分を傷つけているというその行為、 たとえば死なない程度のリストカットとか、ペニスを真っ二つに裂くとかは、 なぜかとんでもなく嫌悪感を覚えて自分の体が傷つけられてるような気持ち悪さを感じる
すまんスレ間違えた
絶対定格越えで死亡するのはいいけど バグって無限ループで暴走しまくるのは苦手なんですね
489 :
774ワット発電中さん :2009/02/21(土) 10:09:16 ID:S0D2Zjt1
ブキミなスレ違いだな
>490 素直にVMware買ってください。 自分もメインはMacだけど何かとwinは必要になるよ。
>>491 それなら素直に中古のWindowsノートを買うほうが建設的じゃないでしょうか?
493 :
774ワット発電中さん :2009/02/22(日) 23:57:15 ID:sASxSaXb
>492 場所とるので2台もいらないのです。 ほとんどMacで事足りてるので。
>490-492 横レスながら。 パラレルポートも付いた古いデスクノートを買うと、いっそう良い。 と思うのはオレだけでしょうか? シリアルすら付いてないような新しいもの、携行型などは当然ながら避けるとして。
失礼、Power PC用のもあるみたいですね。 MacからのBitBangはまだ試してないので、ぜひやってみてください。
Mac?なにそれ、おいしいの?
Mac信者はこれだから・・・
>場所とるので2台もいらないのです。 >ほとんどMacで事足りてるので。 2台置けないならMacは捨てればいいよ
案の定の脊椎反射だなあ。 信者でもないんだけど、まいいや。
自覚が無いのも信者の特徴だな。
AVRでテスターを作ろうと思うのですが、 内蔵の基準電圧の1.1Vはどれぐらいの精度なんでしょうか 分かる方いましたら教えてください
505 :
490 :2009/02/23(月) 11:12:43 ID:lKWOZj3j
>>505 ターゲットチップ(2313)のクロックはどうなってます?
以前、AVRisp2をavrdudeで使ったときに、
クロック設定をまちがえて同じようなエラーを出した事があるので。
507 :
490 :2009/02/23(月) 12:32:55 ID:lKWOZj3j
買ってきたまま(秋月でレール買い)の状態です。 なので、8MHzの8分周で1MHzです。 ターゲットに送るSCKを調節してみます。
508 :
490 :2009/02/24(火) 04:01:55 ID:e7SaMkRF
>>476 ぶっ、PICでC言語ったって、使える域には程遠いだろwww
再帰的コード書いたら即死だろ。
マカにAVRやる資格はねーよw 失せろ
>>509 ぷっ、
小規模マイクロコントローラで再帰コード使うってwww
再帰できないと使える域に達しない
>>509 がいるスレはここでつか?
MACって書いたら怒るんだろ?Macって書かないとw あんだけインテルチップやらWindowsやらに罵声あげときながら 内側にはインテル入ってるのを使ってるマックユーザーw 変なプライド持ってるからマックユーザーって大嫌いだったりする。 マカを辞書で調べたら 「Linuxに変わってからやっとマルチタスクに感動してる数世代遅れている可愛そうな人たち」 と書いてあった。
Windows vs Mac PIC vs AVR
Windows vs Mac って、もともとvsって考えてないからw 宗教団体林檎を相手にしたくないからねぇ PIC vs AVR 、PICって昔あった画像形式?
んでもってAVRは無停電電源なのか?
はぁ?
UPSではなくて?
入力電位変動が大きいときに、それを安定化させるためのハードないし機能を AVR (Auto Voltage Regulator) と言う。 Uninterruptible Power Supply とは独立な機能だがUPSに持たせていることはおおいな。
スレタイにAVR「マイコン」って書いてあるの読めない?
>>520 AVR搭載マイコンでつね、わかりまつ。
このスレからいくとマイコンでAVRを作るべきだろ
>>512 ん? 実用に耐えないで堪えたか?
じゃレベルを下げて’文字列’すら満足に使えないPICのCですが何か?
文字列使えないとかまたまたご冗談をw………冗談だよね?
’文字列’を扱えるCってあるの?
int x = 'ab'; で memcpy(&x, "ab", 2); 相当の動作をする C が稀にあった。 で PICでたまに名が出てくる HiTech Cのどこぞのアーキ用が該当していたような... というのが '文字列' の真意じゃないかとエスパーしてみる。 文化圏が違うと冗談かどうかの判断が難しくてな。
>>528 まあこれはあくまで文字列ではなく、バイト文字を使って表現できるワード文字だよなあ。
VC++だと'abcd'が通っちゃうな。 バイト並びはエンディアンの関係で逆になるけど。
PICとマックな奴は、N88日本語BASICで良し。 ぴゅー太でもファミリーベーシックでも
C++ならstrigsクラスあるだろ… というかデータ型とそれに伴う演算をユーザで定義できるんで却下。
std::string
まさか、アセンブラーだと文字列が扱えないとか言い出すのか?
アセンブラで文字列扱えるの? つか、AVRのアセンブラでデータ領域を定義する方法を教えてほしいんだけど
え?文字列命令ってあるの?
おまえは、8ビットの整数だけ扱ってろよ
>>535 アセンブラではできないが、他の高級・中級言語でできることなんて存在するの?
(面倒くさいとかは別にして)
そんなこと、あり得ないと思うんだが・・・
AVRfreaksが重くてindex以外見れないんだが俺だけ?
AVRWikiも見れねえ
542 :
774ワット発電中さん :2009/02/27(金) 21:39:51 ID:LHM+mScC
神風じゃ〜 神チップAVRのご加護じゃ〜
でもいっそ買収されたほうが個人へのユーザーサポートはよくなったかもしれないね。
買収されたらAVRのチップは終息と思われます
不況で何処も厳しいからなぁ…
不況がAVRを救った。
そもそもAVRの利益って少ないんじゃね? 元々メモリーやPLDメーカーだし。
今さらPICのアセンブラ書けと言われても、もう無理なのでこの判断は素直に嬉しい。
PICが1命令1クロックで動くようになって レジスタの指定にバンク切り替えが必要なくなれば AVRを捨ててもいいと思っている
牛刀だな・・・
PICPICってさー、PICの話は画像フォーマットスレに逝け
>>551 あと、bit0−bit7まで連続して8ビットあるポートがあることも重要。
何気にうれしい ガンバレAVR
>>557 これmega88とどう違うの?
16MHzで安いってだけですか?
たいていの用はTiny2313で足りるから、Megaシリーズって買ったことないなあ 2313は100円だから、30個まとめ買いしてある
ADがないのが残念なんだよな
逆にISPやるのに余計なこと考えなくていいからmegaにしちゃってる
563 :
774ワット発電中さん :2009/03/01(日) 01:38:07 ID:wXvKC6cW
ちょっと教えてください。 ホストとシリアル(非同期)で通信したいのですが、ピン数節約のため内蔵RC発振で 動かしたいのです。 このとき、最初にホストから特定のデータを送ることにより、発振周波数を補正して 安定的に通信できるようにするというテクニックがあったと思うのですが、 これを使ってる解説かコード例のwebページをご存知でしたら教えてください。 だいぶ前に見たんですが今ググっても見つけられなくて。。 PICだったかも?
>>557 ちょ、、え、ま、、、、、
mjoy大量製作の為にマルツポチッったばかりなのにorzorzorz
書き損じたけど、mega8ってmega88やmega88Pの廉価版なの?マジ話
mega8はmega88が出る前の品種じゃないの? mega8はディスコン候補だったような気がする。 と、調べずに書いてみる。
mega88だとI/O領域が拡張されていて、拡張されたI/O領域には通常の IN,OUT命令が使えず、メモリアクセス(LD,ST)でしか使えない(当然遅い) 悪いことに、mega8→mega88系で通常領域から拡張領域へmega8の時から あるI/Oまでごっそりと移動している。 特に$00〜$1FまではSBIS,CBI等が使えて便利だったのに PIC乃バンク切り替えもそうだけど、無理に拡した場合の弊害って所かな
gccでC言語でしかやらない俺には関係ないですね
>569 でしょうね、話題にもあまりあがらないし。 なんかのUSB関連のところでI/Oアクセスが遅くなって mega8の代わりにはmega88が使えないって読んだくらいかな。
>>570 ま、300円くらいならお小遣い稼ぎということでいいんじゃね?
LED点灯するだけの本とか、インストール手順見せるだけの雑誌記事とかもあるわけだし。
>>570 ネット上に溢れてるのに買うやつの気が知れん。
サポートしてくれるなら300円は安いかも知れんよ。 2chで聞くよりいいだろ
>>559 本家のmigration noteを見れば一発だよ。
ttp://www.atmel.com/dyn/products/app_notes.asp?family_id=607 のAVR094:Replacing ATmega8 by ATmega88
これによれば、
・Interrupt Vectors
・Bit and Register names and locations
・Oscillators and Start up Delay
・Brown Out Detection
・USART Control Register access
・Internal Voltage Reference
・Programming Interface
・Operational Voltage Ranges
が違うぞと・・・もちろん対応方法も出ている。
あと、物理的な改良点として
・Extended operating ranges as e.g.
[email protected] ,
[email protected] ,
[email protected] ・Lower Power Consumption
・Decreased EEPROM write time
・Prescaler on system clock
・On-Chip Debugging with debugWire
・Pin Change Interrupt
・Enhanced Watchdog Timer with Interrupt mode
・10 bit resolution on all ADC channels
・Timer/Counter0,2 extended with PWM and Compare units
・Master SPI mode in the USART
・General Purpose I/O Registers
・Output the system clock on I/O pin
だそうな。
何気にデータシート読んでて、タイマーにCTCモードなんてのがあるのを初めて知った 今までいつも割り込みがあるごとにカウンタ0にリセットしてたけど、これは便利
う〜・・。 tiny2313で並列動作させる為にタイマー触ってるんですが ISR(SIG_OVERFLOW0){ に飛んでくれない。ググっても出てこないし最悪だー
ISR(TIMER0_OVF_vect){ でやって味噌
WinAVRが最新版なら
>>580 だよな
いつからか忘れたけどSIG_***は使えなくなってる(***_vectに変わって、移行期間も終わった)
コンパイラがwarning吐いてるはずだけど(そのメッセージでググれば見つかるはず)、
warningだけでコンパイル自体は通るのがミソ。むろん割り込み先には飛ばないけど
Cだとよくwarningでるけど、放置しないでちゃんと読んでキャストとか修正した方が後々困らなくてすむと思ふ
うはぁう。皆さん有難う御座います。 #include <avr/io.h> #include <avr/interrupt.h> 〜略(wait関数)〜 ISR(TIMER0_OVF_vect){ sbi(PORTB,1); // 黄色LED wait2(100); cbi(PORTB,1); wait2(1000); } int main(void){ DDRB = 0xff; PORTB = 0x00; TCCR0A = 0b00000010; /* 標準ポート動作 + CTC */ TCCR0B = 0b00000101; /* タイマ0の分周比=1/1024 */ TIMSK = 0b00000010; /* タイマ0溢れ割り込み許可 */ sei(); while (1){ sbi(PORTB,0); // 赤LED wait2(100); cbi(PORTB,0); wait2(1000); } } なんですが、赤点滅のみになってます。きびちい
CTCモードを使うなら、 オーバーフロー割り込みじゃなくて、比較A(OCR0Aってレジスタだっけ?)の コンペアマッチ割り込みじゃね?
こんなんでどうかな #include <avr/io.h> #include <avr/interrupt.h> 〜略(wait関数)〜 ISR(TIMER0_COMPA_vect){ sbi(PORTB,1); // 黄色LED wait2(100); cbi(PORTB,1); wait2(1000); } int main(void){ DDRB = 0xff; PORTB = 0x00; TCCR0A = 0b00000010; /* 標準ポート動作 + CTC */ TCCR0B = 0b00000101; /* タイマ0の分周比=1/1024 */ OCR0A=250; //この値を1〜255の間でいじると黄色LEDが点滅する周期がかわると思う。 TIMSK = 0b00000010; /* タイマ0溢れ割り込み許可 */ sei(); while (1){ sbi(PORTB,0); // 赤LED wait2(100); cbi(PORTB,0); wait2(1000); } }
自分で書いてて思ったんですが根本的な使い方間違ってますねw 並列処理は諦めたほうがいいのかな〜・・
ぬわぁ〜〜。折角サンプル頂いたのにだめっぽいです(涙 #include <avr/io.h> #include <avr/interrupt.h> #define F_CPU 1000000UL #define sbi(BYTE,BIT) BYTE|=_BV(BIT) // BYTEの指定BITに1をセット #define cbi(BYTE,BIT) BYTE&=~_BV(BIT) // BYTEの指定BITをクリア void waits(volatile long m){ while(m > 0){ m --; } } ISR(TIMER0_COMPA_vect){ sbi(PORTB,1); // 黄色LED waits(1000); cbi(PORTB,1); waits(30000); } int main(void){ DDRB = 0xff; PORTB = 0x00; TCCR0A = 0b00000010; /* 標準ポート動作 + CTC */ TCCR0B = 0b00000101; /* タイマ0の分周比=1/1024 */ OCR0A=250; //この値を1〜255の間でいじると黄色LEDが点滅する周期がかわると思う。 TIMSK = 0b00000010; /* タイマ0溢れ割り込み許可 */ sei(); while (1){ sbi(PORTB,0); // 赤LED waits(10000); cbi(PORTB,0); waits(30000); } } 赤点滅のみでした・・・
>>582 wait2()ってどんな関数?wait2(100)でどれだけ待つんだ?
割り込みの中に長時間waitなんて入れたらむちゃくちゃになるぞ。
やるならwait機能ごと割り込みに持たせて
char ISR_flag=0;
ISR(TIMER0_COMPA_vect){
ISR_flag++;
if (ISR_flag&1) sbi(PORTB,1); else cbi(PORTB,1); // 黄色LED
}
とか。
ところで、sbi(),cbi()ってどんな定義してるの?
標準ではとっくに廃止されてたと思っていたが。
>>587 #define sbi(BYTE,BIT) BYTE|=_BV(BIT) // BYTEの指定BITに1をセット
#define cbi(BYTE,BIT) BYTE&=~_BV(BIT) // BYTEの指定BITをクリア
で、sbiとcbiは定義しています。wait2は、巷に良く出ている
インラインアセンブラーの分でしたが、
>>586 のソースに変更しました。
>>588 まず、そのウェイトが割り込み頻度より長ければ、そもそも割り込みの意味をなさない。
なんだけど、黄色LEDがつかないと言うことは、そもそも割り込みがかかっていないことを匂わせる。
まずは、DDRBがちゃんと出力設定されているのか、ポートとLED接続ピンの関係は本当に正しいか、
配線は正しいか、LED逆につないでないかw、メインループで黄色LED点滅プログラム走らせたらちゃんと見えるか点検を。
それと、これクロックいくらで動いてる?
およそ250×1024クロックに一度の割り込みなので、10MHzで動かしていたりすれば1周期25.6msecで
点滅としては見づらいことになっているかもしれない。
それと、点灯時間も1000ループなので、おそらく数千クロック程度、こちらも10MHz駆動で1msec以下。
点灯として視認できていないだけじゃないのかなあ。
赤点滅の1/10の時間光ることになるはずだが、どう?
それと、
>>586 に間違い有り。
タイマー比較一致割り込み使っているのに、その割り込み許可をしていない(TIMSKはオーバーフロー割り込み許可のまま)
割り込みがかからないのはこれかも。
問題はこっちかな?
>>588 まあとにかく、割り込み内にループ入れるのはやめよう。
>>586 あ、クロック書いてあったな
#define F_CPU 1000000UL 1MHz駆動でいいですか?
ただ、このクロックはMakefile内に書いた方がいいかも。
ソース内に書くとしてもincludeより前がいいと思います。
その方がライブラリやインクルードファイルにもかかるので。
もう一つおせっかいを書くなら、間違いを減らすため、ビット名定義を有効に使おう。
明示的にゼロにするビットは、コメントに書くか、念を入れるなら(0<<bitname)で書くとか。
TCCR0A = (1<<WGM01); /* 標準ポート動作 + CTC、WGM01のみ1 */
TCCR0B = (0b101<<CS00); /* タイマ0の分周比=1/1024、WGM02=0 */
TIMSK = (1<<OCIE0A); /* タイマ0比較A割り込み許可 */
なんか皆さん本当に親身になってアドバイスして下さってありがとうございます。 言われた通りに色々とチャレンジしてみようとおもいます。 とにかく感謝感激です。さて頑張ります
もしかしてコンパイラの最適化でwaitが効いてないんじゃない?
あっでも赤は点滅してるのか
割り込み許可がちがうんじゃね?
(1<<ビット名定義)よりも _BV(ビット名定義)の方がスマートに見える
皆さん、ありがとうございます。とりあえず点滅しはじめました。 #define F_CPU 1000000UL #include <avr/io.h> #include <avr/interrupt.h> #define sbi(BYTE,BIT) BYTE|=_BV(BIT) // BYTEの指定BITに1をセット #define cbi(BYTE,BIT) BYTE&=~_BV(BIT) // BYTEの指定BITをクリア void waits(volatile long m){ while(m > 0){ m --; } } ISR(TIMER0_COMPA_vect){ PORTB ^= _BV(1); // 黄色LED } int main(void){ DDRB = 0xff; PORTB = 0x00; TCCR0A = (1<<WGM01); /* 標準ポート動作 + CTC、WGM01のみ1 */ TCCR0B = (0b101<<CS00); /* タイマ0の分周比=1/1024、WGM02=0 */ OCR0A = 250; TIMSK = (1<<OCIE0A); /* タイマ0比較A割り込み許可 */ sei(); while (1){ sbi(PORTB,0); // 赤LED waits(10000); cbi(PORTB,0); waits(30000); } } まだまだ勉強と実験は続いています。皆さんのアドバイスのおかげです。
C言語だとsbi cbiマクロの方が一瞬で判るし間違いもなくて良いイディオムだと思う。 ビット演算直接は新しい版でなぜか推薦されてるっぽいけど改悪じゃないかな。 定義した時アセンブラのヘッダと共有できないって理由なのかな?
599 :
774ワット発電中さん :2009/03/03(火) 20:55:26 ID:aZzzHHCF
■ おすすめ2ちゃんねる 開発中。。。 by FOX ★ このスレを見ている人はこんなスレも見ています。(ver 0.20) 【スバル】サンバーバン/ディアスワゴン【1BOX】28 [軽自動車]
>>598 たぶん、特殊な許可フラグとかの絡みでトラブルになるのを恐れたのでは
なんていったら|=とか&=も一緒か。
>>598 mega88や168世代になって、もとのアセンブラ命令のcbiやsbiではアクセス
できない拡張I/O領域が出てきたからそこら辺の配慮もあるのかも
その辺配慮しなくていいのがCの良さなんだけどな。 同じビット操作でもアドレスによってアトミックになったりならなかったりするのが嫌んな感じ。
おまえらの優しさに涙した 少数派は団結だよな
>>598 アセンブラのsbiやcbi命令との混同を避ける為では?
頭の中では理解していても、sbi()やcbi()ならアセンブラのsbiやcbiが使われる物と勘違いする場合もあるだろうし。
AVRってさ業務用とかに使われてんの? 趣味とかホビーだけ?
業務用にも使われてるよ。
少なくともここでは趣味だけだろうな。 業務に使っているような人がこんな所で情報収集してるとは思えん。
さーせん
>業務に使っているような人がこんな所で情報収集してるとは思えん。 どうしてそう思うのか・・・ プロは数人居るぞ
>>605 俺の使っているキーボード(Kinesis)は開腹したらAVRだった。
コンシューマでは使われているよね。
>>604 いっそ、インラインアセンブラでsbi/cbiマクロを作るといいかもな。
対象外レジスタだとエラーになってくれるし。
>>605 玄人指向の玄箱とか、相当のバッファローのNASには使われているな(メインではないが)。
制御系やゲームとかだと割り込み中ではフラグやカウンタ処理のみだけして、 メインループで疑似マルチするけどね。 高度な人とかだと多重割り込みをうまく使ったり再帰したりしてるけど。
613 :
774ワット発電中さん :2009/03/04(水) 12:05:50 ID:55/tiq3v
■ おすすめ2ちゃんねる 開発中。。。 by FOX ★ このスレを見ている人はこんなスレも見ています。(ver 0.20) 【MoE】-Master of Epic-E鯖隔離スレDay97 [ネットwatch] 【MoE】-Master of Epic-E鯖隔離スレDay96 [ネットwatch] WRT■リンクシス製品ユーザー集まれ-8■BEFSR [ハードウェア] ASUS Terminator … ターミネーター8 [自作PC] 【スバル】サンバーバン/ディアスワゴン【1BOX】28 [軽自動車]
>>612 フラグだけを使うなら割り込み自体要らないしね。
>>614 結構使うよ。非同期で複数の割り込みが発生する場合なんかに重宝してる。
>>615 うん、AtmelのUARTサンプルとかにも使っているしね。
>>605 KORGのnanoKey(MIDIキーボード)にmega32が使われているらしい
上で話題になってるWinAVRの割り込みベクタの指定方法、 ISR(TIMER0_COMPA_vect) こういうの。 これってプログラム中で割り込みベクタを別の用途に切り替える事が出来ないよね。 あとPORTDとかも。 1つのサブルーチンをPORTCとPORTDで使いたいとなると 同じプログラムを2つ入れるしか無いじゃん? こういう場合メモリマップ上のレジスタ直指定とかで ISR()もPORTxも使わないで書くしかないよね。 ついでに言うとsbi、cbiなんかも移植性を考えて使わない。 (1<<OCIE0A)とか、そもそも「何ビット目か」を示す変数だってのが間違っている。 C言語のファイルオープンとかだってモードなんかは単に「|」(or)するだけ。 俺の場合そういう事が多くて、 どうもこのWinAVRって仕様が御粗末に思えて仕方ない… みんなは何かスマートな技とか編み出して使ってるの?
>>618 そもそもプログラム領域のフラッシュって実行時書き換えできないきがする。
>>619 AVRの場合、割り込み中の関数呼び出しは若干どころじゃなく、
論外に片足突っ込むレベルだと思う。
ベクタを直接修正できない以上、switchやgcc拡張のラベル配列、
もしくはアセンブラでジャンプテーブルでも使うしかない。
622 :
618 :2009/03/06(金) 05:09:38 ID:pKyX372c
>>619 リンクありがとう。
結局、公式にもソコだけ標準スタイルを崩すしか無いって言ってる訳ですね。
それにしてもアレの「この工夫されたマクロ」とかは論外だよなぁ…
公式がああも質問側の意図が理解できてないのに泣き笑いした…
>>620 結局
>>619 や
>>621 の言うベクタ内で別んトコへ飛ぶべしと言う事ね。
それをスマートにやる技は何か有る?という話。
inline関数が使えるならswitch方式がマシっぽいかなぁ…
WinAVRってinline関数って使える?
(どのバージョンでも安全にという意味も含めて)
そもそも動的に何かを行うのが、静的に行う場合よりも オーバーヘッドが少ないなんてあんまりないんじゃないかと思うんだけど。 ループだって手で書き下した場合のほうが概ね速いコードを吐くし、 クリティカルなところは泥臭くなっても仕方ない。
>>619 というか、そもそもAVR程度のマイコンで割り込み内でできる処理なんてそんなにでかい処理無理なんだから、
#define TIMER0_COMP_PROC_A (0)
#define TIMER0_COMP_PROC_B (1)
#define TIMER0_COMP_PROC_C (2)
volatile char TIMER0_COMP_SELECT=TIMER0_COMP_PROC_A;
ISR(TIMER0_COMPA_vect)
{
if(TIMER0_COMP_SELECT==TIMER0_COMP_PROC_A)
{
/* PROC_A処理 */
}
else
if(TIMER0_COMP_SELECT==TIMER0_COMP_PROC_B)
{
/* PROC_B処理 */
}
else
if(TIMER0_COMP_SELECT==TIMER0_COMP_PROC_C)
{
/* PROC_C処理 */
}
}
なんて処理で充分なのではと思う。TIMER0_COMP_SELECTをメインで切り替えればOK。
割り込みベクタや関数ポインタすげ替えるのもいいけど、実際問題それで切り替える処理がいくつあるのか、
そのいくつかの処理は事前に分かっている処理じゃないのか?と思うので。
>>622 >それにしてもアレの「この工夫されたマクロ」とかは論外だよなぁ…
>公式がああも質問側の意図が理解できてないのに泣き笑いした…
訳文はIOポート名とありますので、それならマクロでも問題ないのですが、オリジナルを見たら、IOポート名とも定数とも書いてありませんね。
>How do I pass an IO port as a parameter to a function?
確かにこれだけだとIOポートアドレスが変数である可能性もありますから、マクロで解決する場合には引数がポートアドレスを表すマクロである場合限定だと注釈は要りそうです。
626 :
618 :2009/03/07(土) 00:04:20 ID:pKyX372c
返事書いてたら長文になったから捨てた。
失礼ですけど、気になったトコだけ…
>>625 そもそもPORTDがポインターだったら
質問も回答側の勘違いもする要素が無かったと思うんですよね。
「変数と同じ感覚でポートが使える」なんて仕様は作者の自己満足機能かと。
>>624 俺としては定数に名前付けるのも長い変数名も大嫌いなんですが…
define使って下記のように書くくらいなら
#define TIMER0_COMP_PROC_A (0)
#define TIMER0_COMP_PROC_B (1)
#define TIMER0_COMP_PROC_C (2)
enum使ったらば?
enum {
TIMER0_COMP_PROC_A=0,
TIMER0_COMP_PROC_B,
TIMER0_COMP_PROC_C
};
defineと違ってenumはint型なんで注意。
知ってたら御免。
>>618 >>619 は的確に答えてると思うんだが。FAQも普通だ。
俺にはあなたの意図がわからない。
BVも、コーディングが楽になるからやってるだけで、_BVマクロ通した後は
>単に「|」(or)するだけ。
じゃないのかね。
後、関数ポインタよりswitchの方が優れてる理由は何?スタック?
>>621 論外になるのは相当割り込み周期が短いときだけじゃない?
しかもそこまで短いときは関数呼び出しよりも割り込み自体の
オーバーヘッドの方がよっぽど効いてくるわな。
俺は普通に関数使うし、シミュレータで確認しても全然問題ないレベルだよ。
>>627 割り込み内から関数を呼び出すのが問題になるのは、時間よりもスタックの要求量じゃないかな。
実際、これやると割り込みルーチンのpush/pop量が半端じゃなくなる。
呼び出す関数にもよるし、RAMが多いAVRならこれもたいした問題じゃないけど。
>>626 3つくらいで、その後増える見込みがないなら、enumより列挙を選ぶなあ。
行数増えるし、あなたが書いているとおりintだし(使用する側で(char))
つづき あなたが書いているとおりintだし、たぶんchar変数と組み合わせても、 比較時点で型変換はいるのではないかな 使用する側で(char)を噛ませる手もあるけど、めんどい 可読性とか標準Cの流儀もいいけど、AVRのプログラムなんで、ある程度はサイズも きにしなければいけないと思うよ。8kRAMのmegaとかならあまり関係ないかもしれんけど。
まあ、AVRを使ってるならavr-gccに限定しても良いと思うから __attribute__((packed)) 移植性がなんちゃらとかいうなら、コンパイラの種類拾って #ifdef とかで、gccの時だけ有効にするとか
>>629 同意。
ハード要素をenumはあまりお勧め出来ない。
>>626 おそらく、あの手のFAQって実際のQ&Aと自作自演のw想定問答集が混ざっているんでしょうが、
大元のよくある質問ってのは、マクロ定義名を渡すだけで、マクロで済むような用途がほとんどなんだろうとは思う。
動的にPORTDをPORTBにしたいってのじゃなくて、ソース上で呼び出し元でPORTDをPORTBに
書き換えればいいような、関数もどきがしたいという用途。
たぶん、そのFAQの元になった問答ではちゃんと質問者の意図を読んでいたのだろうと思いますよ。
だが、そういうのはちゃんと書かないとわからねえよな。このFAQみてマクロでやって、
実際にはvariable=hogehoge;に展開されてるのを知らずに動かねぇぞ(゚Д゚)ゴルァなんて
やる人もいる気はする。エラーも出ないしねえ・・・汎用FAQにするにはちょっと問題がある。
>「変数と同じ感覚でポートが使える」なんて仕様は作者の自己満足機能かと。
それは読み過ぎでは?ただのCプリプロセサのマクロであって独自仕様でもなんでもないのだから。
ただ単に、「(PORTDマクロ定義を渡すだけなら)、マクロで展開させて最適化に任せるのがベターですよ」
といってるだけでしょう。はっきりと前提条件()内を書いてないからアレだけど。
昨日から千秋ゼミのページのavrspxライタを作ってた。 全くライタを持ってない状況からだったので、そこの下のCOMだけで書ける奴で 鶏卵問題を解決しようとしてハマったorz 最初にユニバーサル基板上で同回路を作りつつ書いたAVR(念のため2個作っておいた)が 原因ではまることに。 USBのHID認識だけは正常で、write&verifyがいくらやってもおかしい。 USBにするために最初の回路は破棄してしまっていたので(ブレッドボードは 使ってないのでそこからが問題ですけど)再度回路作る。 ICソケット上に立体配線版を作って書き直したらあっさり成功。 先人達の功績に感謝しつつ、これから何を作ろう。
今回の反省点を生かして新しいライターを作ればいいんじゃないでしょうか。 どんどんライターの完成度を高めて行って下さい。
ライターだけじゃなく、ぉぉぉぉおおおと思わせる面白いものも作ってください〜 俺も何つくろ?もう1年作ってないや。
Loto6用 ランダム数字発生器
手抜きじゃなく、まともなRNGを使うという縛り付きか?
いやゲイル理論搭載機 笑 なんか オカルト満載なきがしてしょうがないのだが 今週はえらい結果になった
エンジンの制御コンピューター製作中 車じゃなくてエコラン
四角い穴あけ大変だよね
ubuntu 8.10の標準のgcc-avr(4.3.0)はバグがあるので注意が必要。
>>628 割り込み内で関数コールすると入口/出口の push/pop が合計20個ぐらい増えるよね。
でもアセンブラで書いてた時代のソースを移植したりすると便利さに負けてついつい
やっちゃうw。
アセンブラなら関数ポインタによるコールでも
lds ZL,ptr_L
lds ZH,ptr_H
icall
でできるし、必要なレジスタだけ退避したり、割込み専用レジスタを決めて
push/pop 自体を排除できたりもしたよ。
gccならスタック退避させない関数も作れるから void __attribute__((naked)) subfunc(void) { ... } ISR(HOGEHOGE) { subfunc(); } て感じでソースは別関数だがオーバーヘッドはjmp/retの分だけに できるんじゃないかな?試してないけど。
tiny2313で適当に見積もってみた。
それぞれ比較や分岐とかのクロックは省略。
1) 割り込み中の関数呼び出し
無条件にr18-r31の12レジスタについて退避復帰が発生する。
レジスタ数 * PUSH * POP = 12 * 2 * 2 = 48clk
関数自体の呼び出し復帰に 3+4clk
呼び出し関数内のレジスタ退避等でもclkが掛かり、
毎回55clk以上掛かることになる。スタックも余分に使う。
ただし全関数でインライン展開が効く状況だと短くなる。
2) swtich
一定の条件数に達するとジャンプテーブルに切り替わる。
その際Zレジスタを使うのでr30-r31が余分な退避対象になり8clk
間接ジャンプに3clk
毎回11clk
3) ラベル配列
static void *table[] = {&&L1, &&L2, &&L3};
goto *table[state];などとする。
2)と同様にジャンプテーブルを使うコードになる。
ただの間接参照なのでswitchよりも若干短くなる。
同じく毎回11clk
4) 割り込み中の関数ポインタテーブル呼び出し
間接呼び出しでZレジスタを使う以外は1)と同じ。
インライン展開も効かないので効率は一番悪い。
そのぶんコードは見やすくなる。
毎回55clk以上
自分では割り込みだけわざわざアセンブラに直したりする。
>>647 naked指定はローカル変数や暗黙の一時変数を使う状況だと
やばいかもしれない。どうやばいのかはうまく説明できない。
出力リストの確認が必要。
↑正確にはYレジスタを除くr18-r27,r30-r31の12レジスタ
>648 どのソフト使ってADPCMの音楽ファイルつくった?
652 :
648 :2009/03/08(日) 10:55:52 ID:7RjW61SM
>>651 ADPCMは、Windowsのサウンドレコーダーで作りました
そこのページで公開されてるソフトは、エンコード中に落ちてしまいました
ADPCMならMP3のように統一フォーマットとでも思っているのでしょうかねぇ。
655 :
648 :2009/03/08(日) 11:44:29 ID:7RjW61SM
鳴りました!IMA ADPCMにしたら鳴りました どうもありがとうございました
最近アイディアが浮かばない俺に面白い電子工作を提案汁
>>656 ぱっと思いついたのは
>>648 とRTCを使って
現在時刻を読み上げる時計。
で、
>>648 のPWMってインチキだよね。
本当のPWMはアナログと三角波との比較で
PCMはある地点の値をCode化したものだから
n倍アップサンプルして各地点と仮想的な三角波との比較をするべきなんだと思う
>>658 >本当のPWMはアナログと三角波との比較で
それはPWMの実現方法の一つであって、
パルス幅変調するなら手段はなんでも文字通りPWMなんじゃないの?
>>658 それにラジオの時報で時刻合わせする機能を追加してくれ
そして自爆装置
>>656 キッチン電子はかりにマイコン付けて「こさじ少々」とか喋らせたい。
あの歪みゲージってどうにかなるもんなのだろうか?
>>648 のソース読もうと思ったんだけど、長すぎてワケワカメ
ファイルシステムの知識がないと読むのは無謀なのか
Cならまだ読めるんだけどなあ
どうにかなるってのは? 昔、共立でキットを買ったけど、今は売ってないみたい。 ストレンゲージだけなら手に入る。
>>662 はかりの方の出力部から信号盗んでしゃべる方式にすればストレンゲージは
自分では調達不要じゃないか?
電子工作だけ、だとワリとすぐネタ切れになって、ひたすらライターを作るハメにw もっと広い範囲の工作に電子を付加、だとアイデアも沢山でるよ もともと、こんなのやる人間はモノ作りすきだろ? メカとかと組み合わせるのも楽しいよ
ひたすらライターを作りたくなってきたよw ピックアップが死んでるDCが余ってたりするので、電源がそのまま色々使えそう。 3.3,5,12Vが使えるのでHVライタもターゲットに給電も可能そうだし。 フタをあけたらノンプレッシャーソケットというのがいいかも?
ギャングライターを作ってくれ
ついでにDVDが焼けるとか、。 AVRとPICを自動判別してどっちでもOKとか。
ライターは多いけどBootLoaderは少ないんだよね。 ファーム入りSDカードを挿すと勝手にVerUpするとか、 UARTを直接繋いで焼き込めるとかなにげに便利そう。
石焼ビビンバでも焼ければ最高なんですが
>>670 UARTとか、USBのブートローダは結構いろいろあるだろう。
SDカードも、難しいことを言わなければ簡単だと思う。
ATmega88+AVR STUDIO+WINAVR gccでA/Dやってるんですが電圧計が作れない。 LCDでADC0からの数値は表示されてるんですが・・・。 色々調べて 電圧=(AD変換値/1023)×5.0でやってもだめだし、 プルアップ無しや有りで試してるけど電圧に変換するのがさっぱり。 内蔵RC8MHzの分周期128で、基準電圧は内部AVCCやAREFでの5Vに。 3.15Vとか表示したいんですがどうしても出来ません・・・ Googleで調べたら皆さんきちんと表示されてる・・・。しかも電流まで。 12Vくらいまで計れる電圧計が作りたいんですが教えて頂けないでしょうか? 小数点すら出ず1週間以上気合いれたのですがギブアップです
>>673 すまんが、何ができていないのかが全然ワカラン。
固定小数点表示か?ADC自体か?できたけど結果がでたらめだってことか?
とりあえずどういう状態だから「できません」と言っているのかを書いてくれ。
AVR使いにエスパーはいない。たぶん。
AD変換値を10bitでやってるとすると ADの値は 0~1023 これを1024で割ると、必ず0になる(整数の場合)。 やるなら、 (AD値*5000) / 1024 [mV] とか (AD値/1024.0)*5.0 [V]
皆さんエキスパート&エスパーでございます m(_ _)m 3.58とかの電圧値をLCDに表示させようとした場合、 以下のソースのlcd_put_str()では無理ですよね? void lcd_put_4bit(char bitdata){ LCD_PORT &= ~(LCD_DATMASK << LCD_DATS); LCD_PORT |= (LCD_DATMASK & bitdata) << LCD_DATS; LCD_PORT ^= LCD_E; wait(10); LCD_PORT ^= LCD_E; } void lcd_put_ch(char ch){ lcd_put_4bit(ch >> 4); wait(10); lcd_put_4bit(LCD_DATMASK & ch); wait(10); } void lcd_put_str(char *str){ while(*str != 0){ lcd_put_ch(*str); str ++; } } 出来ていることは、ADCからの数値を取得しLCDに表示するところまで。 行いたい事は、12V程までの電圧を0.00V単位くらいの精度で LCDに表示させたいです。
一部じゃなくてソース全部さらしてくれ
長ったらしくて見苦しくないかな・・・迷惑かと思って一部にしたのですが
>>676 ADCのからの値は表示できてて、lcd_put_strもあるって事は、
数値をLCDに表示ができない、つーか文字列に変換できないって事かな
ADCを表示してるって事はitoa()をつかってると予想
まず内部的には電圧値は1000倍とかにして整数値であつかう方が楽、っていうかfloatは容量食いすぎるので却下
計算時に0にならないよう、計算順は
>>675 の指摘に注意
おなじくintがオーバーフローしないようにlongへのキャストも必要かも?(実際にコンパイルしてないので不明)
あとは文字列への変換時に小数点を入れてやる
int voltage = (int)( (((long)AD値) * 5000)/1023 ); //mVに変換、MAX500万超えるので計算時はlongでオーバーフロー防止
int upper = voltage / 1000; // 整数部
int lower = voltage % 1000; // 小数部
char buf[5]; // オーバーフローに注意
buf = itoa(upper);
lcd_put_str(buf);
lcd_put_str("."); // 小数点表示
buf = itoa(lower);
lcd_put_str(buf);
AD値の範囲によってはintじゃなくてuintやulongで、オーバーフローしないように注意
あくまで分かりやすいように書いたから、かなり無駄なコードになる&有効数字分の0が出ないけど
小さく、速くしたいなら0.1%くらいの誤差は無視して1023ではなく1024で、あとビット演算をうまく使うべし
そもそも1023までしか無いA/Dで12.00Vを0.00V単位では表示できません。 10.23Vにすると小数点を入れるだけで済みますよ。
>>680 int voltage = (int)( (((long)AD値) * 5000UL)/1023 );
せっかくならこうしたが良いかも。
まあ、どうせ同じコードを吐くと思うけど。
あと、直接12Vをマイコンに突っ込むことは無いと思うけど
分圧すれば当然計算式が変わる。
お返事送れてすいません。皆さんアドバイスありがとうございます。 いまから早速やってみます。
mega164とかXTAL1, XTAL2が共用ピンになっていないAVRって、 内蔵RCで動かすときに、XTAL1, XTAL2の処理はどうするのが推奨? オープンでいいのかなぁ・・・探し方が悪いのか、データシートに見当たらない。
685 :
673 :2009/03/10(火) 23:55:35 ID:54Wdo+1i
何とか出来たような出来てないような?
3端子レギュレーターで5V作ってるのに4.98〜5.00と変動があるので
毎回ソース若しくは半固定ボリュームで調整する必要があるのかな・・・。
あと何も接続していない状態だと0Vじゃなく揺らぐんですね
適当にアップローダーを探してアップしました。pass: 673
http://77c.org/d.php?f=nk6265.zip
686 :
673 :2009/03/11(水) 02:13:21 ID:pkih9t1d
ADC0とGND間に4.7kΩ入れ忘れてた・・。揺らぎは止りました。 しかし、基準電圧を確実に5.00Vにする方法って無いのでしょうか・・・。 安定化電源から三端子レギュレーターへ入れているわけですが、 きちんとパスコンや電解コンデンサー等はいれてあります。
そもそも、本当にその測定結果が正しいと言えるの?
688 :
673 :2009/03/11(水) 05:59:36 ID:pkih9t1d
>687 他のデジタルテスターで1次電池などを計測して比較してみました。 アドバイスのおかげで正確に出ていました
>>686 >きちんとパスコンや電解コンデンサー等はいれてあります。
データシートにあるような回路工夫はとってます?
最下位ビットまで信用するなら、あそこまでやらないとダメだと思うよ。
>>685 流れちゃったなあ・・もう見られないわ
>>684 XTAL1/2は反転増幅器の入出力らしいので、理屈の上ではXTAL1をプルアップかなにかしたほうがいいのだろうけど、
たぶん発信源としてXTALを選ばない時点で内部でプルアップか増幅器自体電源切っているかしてるのでは?
>>690 d。どうにもデータシート上での記述がみつからないんだよね。とりあえず、
オープンで動きはするけど、ちょっと不気味・・・
>>688 一次電池やデジタルテスタは電圧が変動するし誤差だらけでアテにならないぞ。
そもそもそこまで精度を求め始めるとA/D変換の誤差が(略
693 :
673 :2009/03/11(水) 14:05:38 ID:pkih9t1d
695 :
673 :2009/03/11(水) 14:56:43 ID:pkih9t1d
>>692 一応デジタルテスターのほかにオシロスコープでも比較はしてあります。
>>694 パンツの写真見せてって言われるくらい恥ずかしいな。
>>693 > upper = voltage / 1000; // 整数部
> lower = voltage % 1000; // 小数部
> itoa(upper, buf, 10);
> lcd_put_str(buf);
> lcd_put_str(".");
> itoa(lower, buf, 10);
このやり方だと、10.001を表示させると10.1になってしまったりすると思いますが・・・?
ゼロを補う工夫が要ります。
また、整数部と小数部にわけるのもいいけど、この場合は、mV単位のintで計算して、
それを固定小数点文字列に変換する関数、もしくはダイレクトにlcdに送る関数を作った方がいいと思う。
基準電圧を正確にしたいなら、AREFにツェナーダイオードとCRDの組み合わせで定電圧源を
供給するってのでどうでしょ。それか、内蔵定電圧源を使うとか。どうせ12Vを入力するので
分圧か何かするでしょうから。
測定リファレンスになる電圧源もこういうので作ったらより安定すると思う。
それと、電圧への変換だけど
>voltage = (int)( (((long)data) * ADC_STDV) / 1023 ); // mVに変換
ここは/1024でいいんじゃないかな。
出力1023は、Vin=Vrefではなく、Vin≧1023/1024*Vrefだと思う。
データシート上はADC=Vin*1024/Vrefになっているよ。よってvoltage=ADC*Vref/1024。
切り捨てで電圧値を表示するならそうするべきだと思う。
四捨五入するなら512で割って1足してから2で割ればいいか・・・そこまでする精度あるかどうかしらんけど。
自分でwait_usやwait_msを作らずとも util/delay.hを使えば良いんじゃなかろうか。 あと誤差がうんぬんっていうなら、A/D変換は loop_until_bit_is_setなんかで待たずに、 Sleep&割り込みでCPUをとめてみたら?
>>695 >パンツの写真見せてって言われるくらい恥ずかしいな。
せめてアナログ部GND面がデータシートのような状態になっているか+回路図。
699 :
673 :2009/03/11(水) 16:44:58 ID:pkih9t1d
皆さん、アドバイスありがとうございます。
まだまだ改良点がありそうですね(T_T
>>696 5.0Vの時に/1024だとなぜか5.0Vにならず、/1023だとだとキッチリ5Vに・・・。
LCDに直接送る関数ですかー。まずは基準電圧を正確にかな?
うぐぁ〜 頭がパニくってきました。
>>697 一度 delay.h でシンプルにやってみます。
697さんが言われた通り実験してみますね
>>698 ノイズ対策ですよね・・・。現在はたぶん怒られるくらいの状態・・・。
皆さんのアドバイスで改良を加えていきたいとおもいます。
本当にありがとうございます。
>>699 >5.0Vの時に/1024だとなぜか5.0Vにならず、/1023だとだとキッチリ5Vに・・・。
そもそもADCにVrefジャストの電圧を計測する能力はなく、
1023/1024*Vrefが、測れる最大電圧なんだと思います。
だからVrefが5VのADCを5Vの計測でチェックしても本当はだめじゃないかな。
>一度 delay.h でシンプルにやってみます。
delay.hの_delay_ms()と_delay_us()マクロは、かなり短いウェイトしか実現できませんので注意してください。
8MHz駆動だと、_delay_ms()は32.768msecまで、_delay_us()は98usecまでしか使えません。
また、このマクロの引数に変数を突っ込むと無駄にメモリ食いますので注意です。
登場場所が多いとそのたびにループルーチンを挿入されてしまいますので、
厳密さが要らないなら関数化した方がいいでしょう。
void delay_ms(unsigned int time) { while(t--) { _delay_ms(1); } }
delay_usの方は、ループや関数オーバーヘッドもバカにならないのですが、lcd用途ならこれでいいかと思います。
void delay_10us(void) { _delay_us(10); } /*8MHzなら関数オーバーヘッドで1usくらい狂う*/
誤差が出るのはあたりまえ
>>695 基盤見せるの恥ずかしいってのスゲーわかるw
コードも恥ずかしいけど、基盤は・・・
基板
706 :
705 :2009/03/11(水) 23:10:23 ID:7BFATNj3
リロードせずに書き込むのも恥ずかしい。
707 :
673 :2009/03/11(水) 23:31:39 ID:pkih9t1d
皆さん親切な人が多いですね(^^) 心強いです。
暇で寂しいんだよ 俺だけ?
709 :
673 :2009/03/12(木) 01:37:41 ID:wnHZEj+O
この板の人たちで会社作ったら凄いでしょうね
案外そうでもないかもしれないよ?w 好きと仕事は別の方がうまくいく事が多いし。 AVR-DoperってHVSPの12Vはセルフインバートで作ってたのね、回路図見て驚いた。 しかもかなり簡易かつ正確っぽいし。
HVSPはいらんけど、USB一本でデバッグ用のシリアルモニタと、 ISPが賄えるのはいいなぁ。AVR-Doper
>>746 まあそろばんはメモリだけって感じだな。
ALUとソフトウェアは人間が持っている。
746だと明後日ぐらいかなー
>>714 俺のそろばんは背中を掻けるし楽器にもなるぞ!
・・・・いいかげんにやめます
って誤爆な俺に温かいレスありがとうorz
HI-TECHがMicrochipの完全子会社になることで合意…双方のサイトで告知済み これでHI-TECHのコンパイラーがサポートするのは Microchipの製品だけへ ATMEL買収断念の後は、こう来たか…AVRはGCCで良かった
PICも16/32bitはGCCなんだけど。 さすがに8bitなPICはgccでは無理だったみたい。
ROMとRAMのアドレスぶった切りな構造だからさすがのGCCも面倒見れないよね。
719 :
716 :2009/03/12(木) 22:11:07 ID:mYuX5xEl
>>717 C18以降のコンパイラがGCC(C++抜き)なのも、下位Chip用のGCC移植断念も知ってる
AVRは、Microchipの「競合各社の開発環境を潰す」戦略に巻き込まれないで済む
という意味で書いた
俺の中ではMicrochipはすっかり腹黒会社です。
オールドタイプだからな。
AVR用の環境を作って成功すればMicrochipに買ってもらえるってことか・・・
公式の開発環境もEclipse用のプラグインもあるのに さらにどんな環境を作るつもりなんだ?
>>723 そりゃ、きっとなんだ・・
萌えなアレがあれこれアシストしてくれるんだよ。
「ご主人様、コードがダメすぎてメモリ内に収まりそうも無いですぅ。おとなしくアセンブラで書きやがれ!」みたいな。
>>723 シミュレータでIOレジスタが萌え擬人化されて一生懸命働いているAVRStudioは・・・・ちょっといいかもw
今後予想されるMicrochipの動きとしてはAVR互換チップの開発だな。
>>726 「あなたのために数えてあげてるんじゃないんだからね!」by TCNT0
hidspxできたので「よーしパパ、usbRS232つくるぞ〜」と頑張ったら、 もう一つライタになったorz ほとんど同じ回路だしねw
731 :
774ワット発電中さん :2009/03/13(金) 22:24:14 ID:aoODcHpy
Mega88でシステムクロックが8MHzなのでa/d変換クロックをck/64 にしているのですが、A/D変換が行えません。ちなみにck/2に設定 すると変換が行われます。なぜでしょうか? 8MHz/64=125KHzでちょうどいいと思うのですが・・・
待ち時間が短いんだろう
ちょっと位自分で調べようという気持ちがあってもバチはあたらないと 思うけどね
>>734 どこまで調べたかとか、どういう方法でADCしてるのか書かない時点でどっちもどっちでしょう。
>>731 というわけで、情報は小出しにせずにうざいと言われるくらい出さないと、スレが荒れるだけ。
ADCルーチンだけでもここに書いてみましょう。
ATmega164のPCINTなんだけどPCMSK3 = 0b00111100としてPD2〜PD5までの PCINTを許可した後、 PIND |= (_BV(PD6) | _BV(PD7) ) ; とPD6, PD7のトグルアクションをしたときPCINT3割り込みが 発生しちゃうのって何故なんだろ。ちなみに、この部分のコンパイル結果は in r24, 41-32 ori r24,lo8(-64) out 41-32,r24 になってる。 ここを PIND |= _BV(PD6) ; PIND |= _BV(PD7) ; と分けて書くと、予定通り割り込みはかからないんだけど・・・ (こういう風に書くと、コンパイル結果も sbi 41-32,6 sbi 41-32,7 になってる。当たり前の結果だけど)
>>736 トグル動作でどうしてPINを読み込んでる(|=)んだ?
1を書けば反転するんだから、読み込んだ値に1があったら勝手に反転するぞ
>>737 いや、PIND |= 0b11000000なわけだから、PD0〜PD5は影響を受けないはずではないの?
>>737 あぁ・・・すまん。その通りだわ・・・何勘違いしてたんだろorz
740 :
774ワット発電中さん :2009/03/15(日) 01:13:32 ID:jKKX1D79
簡単に購入できる一番安いAVRって秋月の2313なのかな? 8ピンで十分なんだけど50個くらい必要になったんだ。
ピンが多くてもいいなら2313でいいんじゃない?A/Dついてないけど。
AVR400: Low Cost A/D Converter
>>740 秋月ならtiny2313-20PU、18個以上 @90円 だね。
送料やクレジットカードの使いにくさを割り引いても
安いからいいか。
なんかほかにも買う物あるならDigiKeyで適当に見繕ったが安いかも。 種類も色々選べるし。
ふと思ったんだが、同種の大量のAVRに同じ内容を書き込みたいときってさ、読み出ししなければ重ねていっぺんにできないかな。 できる確証は無いけど、できない理由もいまいち思い付かなくて。
パラレルプログラミングならBUSYbitをORして出来ると思われる。 シリアルは何となく不安。
COMを使って1ビットで書き込む方式なら、何も見ないで一方通行で書くから 重ねても可能かもしれないが…根本的に間違ってる気がしなくもないw 安全に書く方が(本来)目的だとは思うけど、実験として数十個同時書き込み可能な 方法を考えてみるのも面白いかもね。 もしくはギャングライタとかw
748 :
740 :2009/03/15(日) 22:34:56 ID:jKKX1D79
やはり秋月で2313が手軽そうだね。 デジキーは手頃そうなのが見つからなかったよ。 そういえば、50個も書き込み作業が発生するのか。 ゼロプレッシャーソケット位は買った方が良いかもな。 教えてくれてありがとう。
>>747 そのあとのベリファイが結局個別になるから、
パラレルでもシリアルでも、ベリファイするなら一気にというのは無理になりそうだ。
>>748 制作物、ISPコネクタはつけないの
>>749 ブートにCRCチェック入れとくだけじゃ駄目かな?>ベリファイ
書き込み用電源利用して、書き込んだ後にリセットして特定ピンが立っていたらアウトみたいな。
>>750 なるほど、領域がもったいないけど、可能ですね。
ただそのCRCチェックとその出力領域が化けていれば困るんで、
特定ピンが立っていなければアウトとか、何か特定パターンでLEDでも点滅させる
(その装置がLED使うなら)がいいかな。正常起動通知を兼ねて。
でも、2313クラスなら、詰め込むプログラムがぎりぎりなら辛いかな・・・
752 :
478 :2009/03/16(月) 10:26:16 ID:2V6I5JoP
>>749 ISPはパターンだけ引いて実装はしない予定です。
755 :
754 :2009/03/16(月) 11:25:42 ID:6xt4jG6l
WinAVR-20090313がリリースされている
ttp://arduino.cc/en/Tutorial/AnalogInput このページの変数valはloop()の中のローカル変数でもよいのに
グローバルに宣言されています。
グルーバルで宣言した方がよいことがあるのでしょうか。
スタックの関係?メモリ消費量の関係?
ちなみにArduinoのコードは
int main(void)
{
init();
setup();
for (;;)
loop();
return 0;
}
こんなコードとがっちゃんこされて普通にgccでコンパイルされます。
>>757 対象がプログラム初心者だから、一箇所で宣言しているだけだと思う
>>757 他の関数をつくって拡張するとき、グローバルを使った方がやりやすそうな
タイプの変数だけどね。
>>760 そうだったんですか。ろくに調べずに失礼しました
Bluetoothのシリアルポートを使ってAVRに書き込めた人いる? 最近小型化が進んでるから数センチ角のモジュールを繋いで書き込む対象から電源もとれれば手軽になれば便利そうだが、無理だよねやっぱり。
自己書き換えにすれば何でもいける。 BluetoothでもJigBeeでも赤外線リモコンでも。
連休で時間ができたから
>>648 のやつ組んでみた
結構いい音で鳴るもんなんだな
まあ再生だけならMP3プレーヤがあるから
録音機能がつくと価値が出てくるかもしれない
必要に応じてそれぞれ決められた音声(肉声)をスピーカーから出すってなると、 SDカードに音声ファイル入れて、どのファイルがどの音声かの番号を覚えておいて 再生させる以外方法ってないですよね? 2MbitのEEPROM(23EE020)とかなら大量に在庫があるんだけど生かせれば・・・
>>766 ユーザーが音声の差し替えする必要がないなら、ファイルシステム使わなくてもいいんじゃない?
case1ではEEPROMの何番地から何バイトを再生とかでもいいと思う。
768 :
766 :2009/03/21(土) 11:54:18 ID:nqSoHRsm
>>767 なるほど。SDカードの変わりにEEPROMっていう感じですね。
ちょっとEEPROMのデータ調べてみます。(過去のものなので・・・)
アドバイスありがとうございます。
769 :
766 :2009/03/21(土) 11:56:45 ID:nqSoHRsm
PH29EE010の間違いでした。
>>768 一番安いmicroSDに直接ハンダ付けしてみるって手もある、もちろん使うときはファイルシステムなしで。
>>771 いやアダプタにではなく直接。
最近のmicroSDは安すぎだよね、数百円で512MBが買えるし500円出せば2GBとおつりがくるしさ。
最近はカードよりソケットの方が高いからな。
>>771 [ブレッドボード用SDCARDアダプタの試作]ってやつだよね
すっごい。これは思いつかなかった。
変換ソケットだけはどんどんあまっていくから作ってみよう
>>774 ああ、たしかにシリアルEEPROMを買ってくるよりmicroSDは安い。
しかもmicroSDの容量はAVRの64Kの中から見たら無尽蔵だ。
気温や湿度のデータロガーに使ったら2GB埋まるのに何日かかることやら。
>>776 1年分を記録させてグラフ化・・・
そして1年後、SDカードが壊れてたとか orz
>>774 へぇ、SDカードって100milピッチなのか・・・これはいいな。
L字ヘッドピンを使えば便利になるかな?
変換基板でええんちゃう? カード検出端子も出てるし。
>>778 いや100milではないんですよ。
でも微妙にずらすとギリギリ収まってくれる。
F特性なんてパスコンにも使いたくないな。せめてX7R。
誤爆
>>778 おー、L字のピンヘッダー使えばいいね、アッタマい〜
早速やってみようっと。
Tiny45が一度も書き込むことなく(直前のavrspx -rは反応した)お亡くなりになり 取り合えずヒューズリセットしてみたいんだが 手軽なリセット回路とか載ってるとこあったら教えてくれ
45ならぐぐれば見つかるだろ
>>789 好きにやればいいじゃね?
俺は共立のこのセットで使ってるけど。
BOXプラグ6P(直型) JS-1200-06 (-/) 55円
ケーブル圧接型ソケット6P FC-6P (-/) 55円
ありがとう。 フラットケーブルを持ってる場合はこっちの方が楽みたいですね。 5Pケーブルなら工具無しでも圧接できそうだし。
ATtiny85−20PU って8k使い切れないんですけど
自分は秋月で売ってるピンヘッダの2列のメスを切って削って使ってる、いままでミス無し。
796 :
774ワット発電中さん :2009/03/24(火) 23:27:34 ID:nqzC/zUX
ピンとピンを導通させるプログラムができてしまったんだが、そんなことあり得るのか?マイコンがおかしいのかと変えてやってみたがどれも同じ結果、テスター変えても同じ、導通してるのにマイコン壊れない・回路の動作に影響ない、電源切ると導通しなくなるという状況。
ソース晒して他人の環境で再現実験が確実かと・・・
それ以前に、電源入った回路内の導通なんか正しく測れるの?
799 :
774ワット発電中さん :2009/03/25(水) 00:22:48 ID:d1TOvis9
>>798 信じてくれないかもしれないが、晒す為の環境がない。
>>799 取り外しできるように、mega64サイズのはマイコン乗ってるだけの基板使ってるんだよ。マイコンのピンそれぞれをユニバーサル基板にさせるぐらいに延長させて。部活動でやってる事だから、下級生がマイコン殺したり回路ミスったりすることがよくあるからな。
800 :
774ワット発電中さん :2009/03/25(水) 00:24:05 ID:d1TOvis9
いや、だから、たとえマイコン単体でもそれは回路なんだよ。 電源入った状態じゃテスターでピン間の導通なんて正しく測れるとは限らないでしょ。 と言ってるつもりだったのだが、ご理解いただけなかったところを見ると素なのか・・・・・orz
そんな事がありうるのかどうかを聞きたいなら 「そんなこと」の詳細を書いてほしいね。 もし両方出力ポートで同じ向きになってるなら Vcc、あるいはGND経由で導通するかもしれないし、 電位差がある状態なら、抵抗測定モードで テスター繋いでも計れるはずないし。 マイコンをどうしたら、どんな状態になったのか。 なぜ導通してると判断したのか。 その辺を書いてよ。
導通テスターはリード棒に電圧が掛かってます。その電圧がゼロになると導通。 "ONしているトランジスタと電源" "ONしているFETとFET" でも導通します。
つーか、出力ピン設定でHighになったピン同士は当然「導通」してるんじゃないの? 両方ともFETでVccに接続状態ですよね?
はい、High-HighやLow-Lowだと電源経由で導通します。 High-Lowでもゼロ電圧以下になる場合は導通と判断されるでしょう。 又、入力ピンに導通テスターをあてると電源以上の+電圧やGND以下の−電圧が 掛かるので(インサーキットテスター以外は)マイコンを壊す可能性があります。
806 :
774ワット発電中さん :2009/03/25(水) 02:43:48 ID:d1TOvis9
>>801 その説明で理解しました。はい、ほとんど素なのは認めます。回路設計は自分じゃないですし。
>>802 状況はマイコンのVccピン及びGNDピンのみ、それぞれVcc、GNDに接続、導通ピンはどちらも出力設定で何も繋いでない状態でした。GNDにも繋いでません。導通テスターの結果で判断しました。
ねぇねぇ。プルアップ・プルダウンって 2k 〜 4.7kΩ が多いみたいですが、 自己放電の為にGNDに落とす時って0kΩ以外なら何でもいいのでしょうか?
E=IRでIが耐えられるならOK?
>>807 2K〜4.7Kって小さくねえ?
AVRだよね、47K〜100Kくらいでいい気がするけど。
配線の引き回し延長も考慮して決めろよ
811 :
774ワット発電中さん :2009/03/25(水) 10:37:49 ID:3yGXmrRB
AVR未経験者です。ATMEGA48のライターで使いやすいのを教えて。
>>811 人に教えてもらう時の話し方を・・(略
まずググれ。
>>808-809 なるほど。サイトによっては2kや4.7kになっているんですよね。
AVR内部に搭載のプルアップ抵抗値は、20kΩ〜100kΩと書いてますね。
もう少し調べてみます。
プルアップ/ダウン抵抗にあまり大きい抵抗を使うと波形が鈍って 立ち上がり/下がりが遅くなったりする、みたいなことをどこかで 見たんですが、合っていますでしょうか?
OD出力のことではないですかね。
未使用ピンに対するプルダウン/プルアップと、オープンドレインに使うのだと抵抗値も違ってくるね。 波形がなまって困るところなら、小さくするか、そもそもプルアップなんか使わない。 AVR板だから、プッシュスイッチのオープン防止なんかだろうと思って100Kでいいと言いますた。
>>807 入力容量の充放電だけ考えれば小さい分はそれでいいけど、
入力元のインピーダンスが高かったらあまり小さいとHi/Lowにならないぞ。消費電流も増えるし
あまり大きいと離れたスイッチとかに使うならノイズに弱くなる
多くの回路で無難な値が4.7kあたり、ってだけ。AVRの入力なら
>>809 くらいでもOK、ノイズ多そうなら小さくする、後は回路しだい
>>814 だいたいあってる。「あまり」が回路によって違うけど。
AVRの入力なら具体的に、・・・と思ったら入力容量載ってないよ。等価回路に記号だけ書いてある
TWIの方から推測すると10pF位?まあMHzオーダーの入力入れなければあまり気にしなくてもいいんじゃね
スイッチング用のFETをドライブする時とかはかなり重要になるけど
>>811 趣味の工作なら半田付け必要だけど、AVRDRAGONでない?
みんなはどんなライター使ってるんだろう。
ジッポーだろ、JK マルマンはパイポだ。
好きなライターは王雀孫です 茄子は臭すぎてだめでつ
チルチルミチルに決まっておろうが。
チルチルお兄ちゃん♪ チルミルってチルチルミチルの略なんかね
おや、マルマンってライター無かったかい?
「わたしはコレで会社を辞めました」のCMでパイポがあんまり売れて、 本業のライターの売れ行きに響いたので、そのCMの発案者がクビになった。 っていう都市伝説があった。
>>825 まぢすか?! 有りそうで怖いな。
JTの売れ行きにも響きそうですしねぇ<当時
ネタがなくてつまらんので、自分がAVRマイコンを使って作ったものを紹介していきましょう。 俺は、テレビリモコンで動く車を作ったよ。タミヤのギアボックスとか使って。 あと、温度計とか大麻ーとか
大麻取締法には気を付けてな。 自分は時計用の水晶発振子で時計を作ったり、タッチセンサとか既にあるものの模倣と味付け程度のレベル。 紛失したアンプのリモコンの代わりをどうにかできないかと考えてるが、どう考えても無理だよなぁw
かなりむずかしい
USBBLASTERマイコンでエミュレートした奴をAT90USB162に移植中 …ごめんまたライターが増えちゃう
おれはテレビに映るアナログ時計かな、 チャイム付きで。
mega8で、PSのネジコンを、デュアルショック2互換にするアダプタを作った。
>>831 秋月でカメラモジュール買って、目覚まし時計を映しとけ。
AVRはじめようとおもうが 秋月の買うとしたらATMEGA88Pあたりを買っとけば だいたい間違いないです?
何を作りたいかによる
>>836 自分がたいした事できないんで、
まずは簡単な温度センサとかをいじって
そのうちグラフィックLCDとかに波形を表示してみたりとかできたらいいね
くらいのイメージです、ハイ。
温度センサー使うなら、AD変換使うと思うんで、88Pでおkだと思う。 グラフィックLCDは88Pだと、ちと厳しいかも試練。
>>838 ちと厳しいすか。
将来的にやってみたいという感じですので
そのときにまたチョイスしてみようかな。
とりあえず88Pで遊んでみます
841 :
774ワット発電中さん :2009/03/31(火) 21:17:22 ID:9R9sHNv6
ハイ。
>>832 切実にうp希望
デュアルショック互換に出来ればXFPS経由で箱○でネジコンが使える…
>>840 温度センサーがアナログ出力なら、ADポートに繋げばいいだけなので、
グラフィック液晶に15本くらい取られても、88だったらなんとか。
他にスイッチとかいろいろつけるならピン数が足りないかも
>>840 GLCDの表示画像やフォントで容量食われるから、もしやるならmega128とかの容量と足が多いのをオススメ
俺は、ネジコンをGTFproにするのをつくった。
液晶はフレームバッファを違うマイコンでやらせるのも面白い。 間はSPIとかにしといてやって。
tiny261とかだと温度センサ内蔵なんだけどね・・・
秋月にないだろが
>>846 それはnegtusbが有るからいらないかな…
でもグランツーリスモはGTFは補正掛かるんだっけか?
>>850 俺も持ってるよ、アレ。
でも、某氏はGTFproに対応する気がないみたいだし、
自分で作ってみたかったんだよね。
>>852 ネジコンでよく出来るねw
ハンコンだとフィードバック遅くてシュルハンしてたらスピンするけど、ネジコンだとクイック過ぎてまっすぐ走れなそうな気がするwww
試しながら学ぶの一番最初の回路が動かない。だれか助けてください ISPで接続してのATtiny2313へのプログラム書き込みはちゃんと成功するのにLED点滅しない テスターでちゃんと回路できてることは確認した。LEDが壊れてるわけでもなかった なんでじゃああああ
>>853 そのあたりは調整してて、センター付近はだるいようになってます。
逆に俺は、ハンコンでは真っ直ぐ走れません。
ごめん違うtiny2313にしたら動きました
>>856 ちょっと興味ある。それって秋月で買った?
俺もレールで買ったやつのうち、一個だけ動作がおかしい
(出力がHに上がりきらない。まるで中途半端なプルアップを
しているオープンドレイン出力みたいな感じ)
ロット不良じゃあるまいな?
一個だけなら、静電気くらって出力が半死状態なんじゃね?
分かりました。ごめんなさいマイコンのせいではありませんでした。
最初はとりあえずすぐ打てるC言語の方のサンプルで試していたんです。
それで動かなかったので違う2313に交換したんですが、その交換する前に
アセンブラでコード打ち直していたんです。
そしてそれを消去にチェックを入れずに書き込んでいた。もちろん動かない
でも、新しい2313は空だから消去しなくても上手く書き込めてちゃんと動く。
そういうことでした。
そしてC言語のコードが一回目上手く動かなかったのはこれのせいでした。
ttp://mycomputer.cqpub.co.jp/avr02/ ----------------------------------引用----------------------------------
現時点での最新版 WinAVR-20080610では、 「Project Option」ウインドウの「Optimization」
の初期値が「-Os」となっています。
このままでは、テスト・プログラムのうち、空ループによる時間待ちを使用しているプログラムでは空
ループが最適化されてしまい時間待ちしなくなります。
そこで、空ループを使用するプログラムについては、この設定を最適化を行わない「-O0」に変更します。
--------------------------------------------------------------------------
もちろんこの時、消去やらベリファイやら色々試してたんですが、アセンブラに書き換えた後は
一度消去にチェック入れずに書き込んで動かず、その後すぐAVR外して新しい2313に交換しちゃってた。
それでAVR交換したから動いた。と勘違いしていました。
次のコード試そうとして今気づいた
俺も最初、最適化の関係でLED点滅しなくて2日も悩んだ・・・ 自分も試しながら学ぶAVR入門で勉強しましたよ。 あと、コンパイラのバージョンが最近のじゃないと、本に載ってる割り込みを 使ったプログラムが上手く動きませんので注意して下さい。 自分は2005年のバージョンを使ってたから割り込みの プログラムが動かなくて徹夜してしまった・・・
>>859 ソフトマイマーのときは
#define nop() __asm__ __volatile__ ("nop")
と定義しておいて
nop(); をループ内に書けば最適化しても大丈夫。
AVRの本を3冊確認したけどみんな ; や {} でループしているので
悪い見本を真似してしる気がします。
ちょろいICを制御しようとしてCで手持ちの90S2313youのプログラム書いたら フラッシュ125%だとよ。他の手持ちはmega88。はぁ、書き直すか。
>>860 最初のコードでこれはなかなかの罠ですよね。
これから始めようってところだから何がどうなってるのか予想もつかなかったし
WinAVRは最新のを使ってます。ありがとう
>>861 volatileで最適化を抑制できるんですね。volatileって初めて知りました。
for(n = 0; n < 100; n++) PINB; これで桶。asmは不要。
>>863 volatileは、割り込みでフラグを立てるときには必須になる。
while(1){
if ( flg==true ){
break;
}
}
このflg変数が割り込みで変化するような場合、この
if ( flg==true ){
break;
}
の部分は、コンパイラの最適化で削除されてしまう可能性がある。
こういう場合、flgの宣言は
volatile int flg;
という様にしておくと、最適化で削除されることはない。
>>864 へぇ〜、これ最適化で消えないのか。試してみたら-Osでもちゃんと残っていた。
for(n = 0; n < 100; n++) PINB;
8c: 96 b3 in r25, 0x16 ; 22
8e: 8f 5f subi r24, 0xFF ; 255
90: 84 36 cpi r24, 0x64 ; 100
92: e1 f7 brne .-8 ; 0x8c <main+0x20>
UDRみたいに読み込んだだけで動作するポートもあるからこうなっているのかな。
ループ待ちならRJMP PC+1の方がいいんじゃないか? 同じサイズで2倍待てるよ。
>>867 面倒だからねえ・・・一応インラインアセンブラでできるけど。
__asm__ __volatile__ ("nop");
__asm__ __volatile__ ("rjmp L_%=" "\n\t" "L_%=:" "\n\t");
でも、ループ自体が1周3クロックあるので、nop使用で1周4クロックがrjmpで1周5クロックになるだけ。2倍は待てない。
nop式でループ数が255を越える場合でも、318相当まで8bitループカウンタで対応できるようになるだけだからなあ。
そういう場合でも、2バイト犠牲にしてnopを複数使ってわかりやすい方がいいかなと思う。
もしくはカウンタを16bitにして。
>>868 一応 asm("rjmp .+2") でいけるみたい。
でもたしかにループ処理の分があるから2倍は無理だったね。
リンカマップからの連想でやってみたらいけたのだけど、このあたりの
構文のドキュメントってどこにあるのかな。gasのドキュメント?
>>869 おお、こんな方法があるのか。
基本的には入出力オペランドやラベルを展開してgasに渡しているのだから、gasのドキュメントが基本なんでしょうね。
お手軽にはコンパイル時出てくるlssやlstファイルのアセンブラの記述を試してみることかな?
>>866 のでも、 brne .-8ってのが出てきているな。
ソースを見ないでレスしてるから、外してたらスマンだけれど、 時間待ちループにどうして、_delay_us()や_delay_ms()を使わんの?
>>871 valatileの話題から派生したから。
>>871 ウェイトループ自身が面白いからかなあw
>>859 の件は、「以前は」_delay_XXマクロってちょっと制限がきつくて使いにくかったからだろうか。
以前は_delay_ms()とかは使える限界が短いのでだめだと俺も
思っていたけど、いつの間にか改良されているな。知らんかった。
F_CPUが16MHzで_delay_ms(1000)とやると、こんなコード吐く。
8a: 80 e1 ldi r24, 0x10 ; 16
8c: 97 e2 ldi r25, 0x27 ; 39
8e: 20 e9 ldi r18, 0x90 ; 144
90: 31 e0 ldi r19, 0x01 ; 1
92: f9 01 movw r30, r18
94: 31 97 sbiw r30, 0x01 ; 1
96: f1 f7 brne .-4 ; 0x94 <main+0x28>
98: 01 97 sbiw r24, 0x01 ; 1
9a: d9 f7 brne .-10 ; 0x92 <main+0x26>
内部ループが4クロック×0x0190-1=0x063Fクロック、
外部ループがおよそ0x063Fクロック×0x2710クロック=15990000(d)で、
16MHzで999.375msec。ちゃんと出せるようになってるな。
F_CPU変えてコンパイルしてみると、どうやら内部ループが0.1msecになるようになってるみたいだ。
故に限界は6553.5msecまで伸びている。
delay_us()の方は、16bitカウンタシングルループになっている。
16MHzなら4095usecまでOKになっているな。
単純に命令の実行時間とかを感覚的に理解しやすくするためじゃないの? 入門用書籍なんだし
>>871 _delay_us()
みたいにシビアなやつだと、中で何やっているのか気になるので
(CPUのクロックに依存する/しない とか)
それだったら自分で書いたほうがいいや。とかそういう気になるんだ。
>>876 そんなのコンパイル後のアセンブラソース読めばわかるじゃん
>>877 そんな手間かけるのがイヤなんだってばww
CPUのクロックには依存する(だろうと考えるのが常識)ので、うろ覚えの時は ビルド方法を調べないと〜とか面倒を感じることはあるな。そんなんだったら 自分で待ちたい程度カウントさせたほうが脳と指の負荷が軽い。自分で書くなら どんなマイコンでも同じ書き方だから指が思った瞬間に打ってる。
>>879 そんな手間かけるのがイヤなんだってばww
ウェイトにどんな方法をとるかなんてのは、単にプログラミング・スタイルでしかないな。
AVR StudioってCとアセンブラの同時表示出来なかったっけ?
見事なスレスト
まぁ、なに使うにしてもマニュアルを読むのは大切だね。 ところで、オーディオの光デジタルをAVRに入れて、R-2Rラダー抵抗でアナログにするってのいけるかな。 どっかで見たことある気がするんだけど…
SPDIFのDPLL作るのが20MHzでも微妙。 光パルスの最小幅は48KHz*128=6.144MHzで理論上13MHzでいけるけど、 USBと違って途切れなく受ける必要があるのが難点。 俺は諦めちゃった。
そっか。やっぱAVRだけでーなんてそう単純にはできないんだね。 お手軽に手作り気分を味わうなら専用のいいICがあるみたいだし。 とても参考になったよ、ありがとう。
>>889 AVRはお手軽〜高機能までカバーしてると思って愛用してますが、
お手軽のいいICってたとえばどういうのがありますか?
千石にあったやつで、データシート斜め読みだから合ってるかは微妙だけど、PCM1794ADBRってやつ。 俺はぶきっちょだから実装するのがアレだけど、SPDIFとUSBでいけるみたいでヘッドフォンを駆動できるって記憶してる。
894 :
774ワット発電中さん :2009/04/08(水) 18:10:27 ID:pw8fKZQK
AVR初心者です。
「試し・・AVR入門」本、AVRISP mk-II、ATtiny2313を購入し、勉強を始めたのですが、
プログラムの書込み途中でエラーになり困ってます。
AVRStudio Ver4.16 Build628、AVRISP mk-II、Win-XP(SP3)で使用しております。
AVRISPl mk-II上のLEDは緑色でOK、リセットピンはVccに10kΩでプルアップ(削除でも実施済)
Mainタブ:Device and Signature Bytes=ATtiny2313
Programming Mode and Target Settings=ISP Frequency 125.0 kHz
HW Settingsタブ:Voltages リードできている→Getting VTARGET.. 5.0V.. OK
ProgramタブのDevice−Erase Device を実施すると以下のメッセージで「ISP Mode Error」
ウィンドウが表示される。
------------------------------------------
Setting mode and device parameters.. OK!
Entering programming mode.. FAILED!
Leaving programming mode.. OK!
------------------------------------------
パスコン0.1uFあり。電源はUSBからの5.0Vと電池x3でも実施。AT90S2313でも実施。
回路を全て外し、tiny2313+パスコン+リセットプルアップのみでAVRISP mk-II接続で実施。
いずれの方法でも症状は変わりません。
過去のスレで同様の内容があるのですが、結果(解決策)が出ていません。
AVRマイコン総合スレ Part9
http://hagephone.dip.jp/test/read.cgi/denki/1192625746/ 解決策をご教示下さい。よろしくお願いします。
ISPのクロックスピードを低くしてみるとかは試しましたか?
>Programming Mode and Target Settings=ISP Frequency 125.0 kHz
既に試しているようですね。
見落としてました
>>895 は忘れてください
>>894 接続ケーブルとISPの配線の長さは大丈夫?
>>895 逆に速くしたほうがいい場合も。
いずれにせよ、スピードは速くしたり遅くしたりして試したほうがいい。
電源は、ちゃんとした安定化電源の5Vを入れたほうがいいと思うなぁ
AVRISP mk-IIはPCから見てUSB上のシリアルポートに見えているのかな? ポート番号はAVRStudioの指定してる番号と合ってるのかな?
案外PC側のシリアルポートの設定だったり? ケーブルとかハブとかも?
901 :
774ワット発電中さん :2009/04/08(水) 20:01:23 ID:pw8fKZQK
早速の返信ありがとうございます。
>>897 ブレッドボードを使用しているため、AVRISP mk-IIのコネクタから10cmほどの
ケーブルで接続しています。
短くないと障害になるのでしょうか?
>>898 初め設定を分からずに実施していたので、1MHzでやったと思います。
他の周波数もやってみます。
安定化電源は手元にないので、ちょっと難しいです。
>>899 Erase Device を実施するとLEDが点滅(一瞬赤)になるのでポートは
合っていると思います。
AVRStudioで指定しているポートはどのようにしてみればいいのでしょうか?
902 :
774ワット発電中さん :2009/04/08(水) 20:08:36 ID:pw8fKZQK
>>900 電圧の確認やAVRISP mk-IIのFirmware Upgradeなど正常に終了しております。
(Firmware Upgrade時はLED緑点滅)
よって、つなぎもできていると思ってますが・・・
これでは正しくつながっているとは言えないのでしょうか?
903 :
774ワット発電中さん :2009/04/08(水) 20:20:44 ID:pw8fKZQK
>>898 設定できる全ての周波数でやってみました。
8M→6.48kHzまでは今までの症状と同じですが、100Hz、51.1Hzでは
USBの接続が切り離され、再度USBを接続しなおして、つながるという
ような状態になりました。
100Hz、51.1Hzでは以下のメッセージでした。
Setting mode and device parameters.. OK!
Entering programming mode.. FAILED!
Leaving programming mode.. FAILED!
>>901 AVRStudioで指定しているポートはどのようにしてみればいいのでしょうか
メニューでTools->Program AVR->Connectで
ツールとポートが選択できるはず。
症状が間違えて外部クロック設定したときに似てるな
907 :
774ワット発電中さん :2009/04/08(水) 22:27:45 ID:pw8fKZQK
>>897 >>901 AVRISP mk-IIのコネクタからデバイスまでの接続が10cmほどあったのを
専用にユニバーサル基板で作成し、AVRISP mk-IIのコネクタからデバイスまで
の全て信号を2cm以内にしましたが、状態は変わりません。
何か解決に向けたアドバイスをいただければと思ってます。
よろしくお願いします。
>>907 ケーブルは50cmくらいあっても大丈夫だよ。
909 :
774ワット発電中さん :2009/04/08(水) 22:57:26 ID:pw8fKZQK
>>906 ご丁寧にありがとうございます。
ユニバーサル基板で配線しましたので、基板の部品面視です。
接続は以下の通りです。
●が1番ピン
デバイスはATtiny2313-20PU
┌──17
20───○○○───10
18───●○○───1
19──┘
パスコン0.1uF:20−GND(10)
プルアップ10k:20−1
電源 :20
GND:10
うっかりなにかの拍子で、あるいは中古を使っていて、ヒューズビットがファクトリデフォルトじゃなくなってたりしてね・・・
ヒューズビットがデフォルト状態かどうか、念のため確認してみるとか。
リロードしたら同じこと考えてる人がw たまに報告挙がってるよね。 何故かヒューズビットがデフォルトじゃなかったとかって。
913 :
774ワット発電中さん :2009/04/08(水) 23:22:47 ID:pw8fKZQK
>>910 >>911 デバイスは先日秋月で購入したので新品です。
ツールも含め初めてAVRを使っているので、まだヒューズビットの単語自身
を理解できていません。本は読んでいるのですが・・・
デバイス内に設定されているレジスタがあるようなものなのでしょうか?
もし、上記の憶測が当たっているとしたら、まだデバイスと通信できていない
状態では?と思ってます。
理由:メニューでTools->Program AVR->Connect後、USB選択してFusesタブを
選択するとエラーになります。
ヒューズビットが見れていない!?
手元にオシロもないので分かりませんが、リセットもうまくいってないような
気がします。
ISPの通信ができないとライタからはヒューズビットも読み込めないと思います。 けどここまで色々試してダメだとオシロで波形をみるとかしないと原因はわからないかもしれませんね。 もしくはダメ元で外部発振器をつなげてみるとかくらいでしょうか。
まさかのターゲットのマイコンに電源が供給されてないパターンかも
とりあえずなにかクロック入れてみたらいいんじゃね?
>>911 ISPに入れないみたいだから、パラレルライタでもないと確認しようもないな。
>>909 あってるね。AVRにライタ以外の電源はちゃんと供給して・・いるって書いてたね。
他の人が書いているけど、あとはクロックつなげる・入れるか、別のAVRチップに変えてみるか・・・
918 :
774ワット発電中さん :2009/04/09(木) 00:07:46 ID:bFk4iH1e
>>914 >>917 いろいろなアドバイスありがとうございます。
明日、会社で時間をとって(内緒で)オシロで波形を見てみようと思います。
今日のところはありがとうございました。
もう一度よ〜く配線を見直してみたら? 本人はそう繋いだつもりでも、実物はそうなっていなかったなんてことはよくある。 あるいは半田不良とかヨリ線の中の1本がヒゲのようにどこかにショートしてるのとか が見つかるかもしれないし。
オレもそう思う。 >909 のピンNo.は合っているので、落ち着いて配線確認してみる。 ブレッドボードの接触不良とか配線がずれてるとかあるので いっそISPの配線をはずしてやり直してみるとか。
できるだけEZUSBのようなキットを使わずUSB機器を作りたいんですが、ググっても 余り情報が出てきません。何かお勧めな本ありませんか?
一度ACアダプターや安定化電源から5V取って マイコンのみ(LED等全て外す)をISPケーブル繋げてやってみては?・・・ってもうしてるか・・・。 USBの場合、さし直したり、差し込む場所変えたり、再起動したりで 認識したりしたりするからね・・・。 リセットピンのプルアップ抵抗などすべて外してパスコンだけでやってみました?
ほとんど可能性ないような気もするけど、 リセットピンのプルアップ抵抗の値とかそれまわりの配線はどうだろう。 1pin-(ISP端子)-抵抗-5V それと、AT90S2313でやったときはクロック入れた?
924 :
774ワット発電中さん :2009/04/09(木) 08:18:02 ID:kTPh2ZCa
>>921 本じゃないがFT232RL BitBangModeでググれ
コードがいろいろ見つかる
2313の20ピン-10ピン間の電圧、1ピン-10ピン間の電圧はそれぞれどのぐらいになってる? あと、1ピン-10ピン間の電圧が書き込もうとしたときに0V近くまで落ちる?
俺管理者権限ないPCで書き込もうとしたらエラーで書き込めなかったことがある。確認してみたら? 結局管理者権限もらって作業してるが、皆は似た症状出たことある?
日本語のAVR-LibCが消えてる どうしたんだろう
かきかえもなか
930 :
774ワット発電中さん :2009/04/09(木) 23:36:03 ID:bFk4iH1e
>>894 その後の報告です。
結果としてAVRISP mk-IIの不良でした。
購入店で新品交換したもので接続したところエラー解消しました。
波形確認もしましたが、AVRISP mk-IIのコネクタまでは、ECHOBack(応答)
確認できたので、AVRISP mk-IIが怪しいということになりました。
(確認デバイスは、ATtiny2313、ATmega88P)
交換後、AVRStudio は4.13で最新、AVRISP mk-IIのFirmwareを購入時
Version:1.10のままで行いました。
最新は Version:1.12のようですが、Upgradeすると動かないということが
あると心配なので、1.10のまま使ってます。
FirmwareのDowngrade というのは可能なのでしょうか?
可能ならUpgradeして試したいところですが・・・
AVRISP mk-IIの初期不良だったのか、最新Firmwareにしたために起こった障害
だったのか分かりません。
いずれにしましてもAVRISP mk-IIを変えたことにより障害解消できました。
ありがとうございました。
がんばったな 乙
それはそれは。。。 おつ
AVRISPのファームとAVR Studioが抱いてるファームがずれてたら動かなかったことがある (AVRISPが古かった) それはMk2じゃなくて無印AVRISPだったかな・・・忘れた
後に伝説となる超高性能ライターを>894が作製するきっかけとなる事件であったことを、 この時は誰も知ることはなかった・・・
>>930 >ECHOBack(応答)確認できたので、AVRISP mk-IIが怪しいということになりました。
なるほど・・・・
最初に書き込んでみるターゲットは、信号線にLEDつないでみるといいかもしれないね。
書き込みを超スローにすると、内容まではワカランが信号の有無くらいは分かるぞ。
そもそも人間の体は12歳ぐらいですでに性行為が可能で20歳ぐらいがピークなんだが 社会的、精神的に見た場合まだ未成熟なために、18歳未満だと犯罪として扱われてしまう 逆に30歳過ぎは社会的にはまだ青年から中年にさしかかった程度なんだろうけど、 性的にはもはや老年の域に達していて、遺伝子の劣化、流産や難産、性欲の減少などが見られる そんなわけで俺は、セックスに関しては30過ぎたら老人だと思っている
すまん誤爆だ やっちまった・・・
AVなR指定とな!?
>>939 だれうま
で、tinyなやつとmegaな奴がいるわけだ。
maturedなdeviceもあるでよ
俺のブートローダーを流し込んでやるぜ、のスレはここでつか。
>930を見て不安になり、買っておいたAVR-ISPmkUを使ってみたら オレンジ点滅で動きましぇん。電源5Vなのに4.5Vと表示している。 アップグレードしても同じ。 AVR-ISP(無印)やでんし研のライターでは動くので調べていたら 本体内のISPコネクタが180°逆に差してあるのを発見。 フラットケーブルの圧接方向が左右で違うので差す側を間違えてるみたい。
今のフラッシュを吸い取る方法は知らんけどファイルでのダウングレードの手順 古いAVR Studioをインストール C:\Program Files\Atmel\AVR Tools\STK500\AVRISP-mkII.DAT を大事に取っておき、新しいAVR Studioの所へコピー。 手動ファーム更新を実行。これでFirm Ver. 0x010aが0x0105になったよ。
>フラットケーブルの圧接方向が左右で違うので差す側を間違えてるみたい。 ひでぇな、チェックせずに出荷するのか、流石は中国クオリティー
JTAGICEmk2のフレキシブルフラットケーブル(FCC)にはしょっちゅう泣かされた
間違えたFCCじゃなくてFFCだ
948 :
774ワット発電中さん :2009/04/11(土) 17:40:11 ID:QPlR4ZxW
>>946 >JTAGICEmk2
あと読みにくいから文字詰めないでくれ〜
カタカナにするとジェタガイスか・・・ありだな。
今までhexファイルのサイズ=マイコンに書き込むプログラムのサイズだと思ってた。 tiny2313に書き込むhexファイルのサイズがぎりぎり2kBに収まって、 もうこれ以上詰め込めないな、と思っていたけど調べたら実は プログラムのサイズは700バイト位しかなかった。 馬鹿すぎる
>>951 WinAVR使ってるなら、コンパイル時にプログラムサイズと使用%とかが出るぞ
MakeFileのバージョンにもよるけど
まあ、hexファイルの中身は情報つきのテキストなんだから ファイルサイズ 対 実体 がそんくらいの割合なのは推して知るべし
中身を見たことがなかったんじゃないかな
AVR初心者です。(マイコン初心者です。) AVRIPSmkUを買ってAVRに書き込みしようとしたのですが、 最初は緑色だったLEDが途中から赤とオレンジ?見たいな色に交互に点滅します。 しかも書き込みができません。 OSはVista AVRstudio4.14 Build 589 直し方を教えてください。
AVRIPSmkUて人気あるね。不良も多いね。
AVR-ISPmkUのLEDは、緑=電源正常, 赤=電源OFF, オレンジ点滅=リセット異常。 接触不良とか配線を確認してみたら
>>957 接触不良とか配線とかは問題ないです。
赤とオレンジが交互に点滅する前までLEDは緑でした。
基盤の故障はないと思います。
>957はISPコネクタ側のLEDのことだけど 表面にでてないUSB側のLEDは緑だよね?
USBのほうは緑です。 ISPのほうが赤とオレンジ交互に点滅します。
>>955 書き込もうとしているCPUの種類は書いてないし
結線図はないし、どんなプログラムをどの様にして
書き込もうとしているのかわからんし。
まぁ「AVR初心者です。(マイコン初心者です。)」って書けば
なんでも許してくれると思うその根性の直し方を教えてやれ
Red - Orange Blinking -- Upgrade mode ってなってますけど ファームウェアの更新中だったのではないでしょうか?
tools⇒AVRISPmkII upgrade
で元に戻りました。
皆さん本当にありがとうございます。
>>961 ごめんなさい。
今度からは注意します。
ありがとうございました。
AVRのリセットピンを無効にしてしまったんですが、 どうやったら解除できるんでしょうか
リセッター でグーグル先生に聞いてみる
AVRISPmkIIはリセッターかわりにできないんだっけ?
シリアルプログラミングにはリセット信号が有効であることが必須な気がします。
読み方は「エーブイアール」なの「アーヴェ」なの?
アーブル
アービャアー
アヴァー
Adult Video R18 か エヴァ
まぁググってあげたわけだが・・・ ・(開発者の名前から) Alf og Vegard's RISC ・Atmel's greater Vision/Versality/Value RISC という説があるらしい・・・が、定かではないみたいだ。
だれかSPIモニター作ってちょ
AVRはAVRなのさ
AVR is not PIC.
にせJTAG markUを使ってたけどついに動かなくなった。_| ̄|○
頑張って新たなライタをw
ゴールドライタンを呼ぶんだ
そろそろライタから旅立つ時
>>981 おお。AVRって結構な一大勢力だったんだな。
マインドシェアつーか、紙面シェアでずいぶんとPICが上のように錯覚してた。
売上比1:2だからランチェスターの法則で1:4の感覚ってことかな。
>>982 1個買ってみようかとおもったら
合衆国輸出管理令に基づき、お求めの製品を発注書に記入することはできません。
て。
だから、日本のdigikeyじゃ売ってないのか
合衆国輸出管理令とは、どんな基準で輸出禁止なんだろ。 わけわかめ
総連経由で渡ったxmegaがテポドン2号に使われていたからね。
xmega… 32MHzと内蔵SRAM32kは魅力だけど AWEXとかHi-Resとかあまり興味ないなぁ。 暗号機能は仕事で使う分には意味あるのだろうが。 DMAもMACとかUSBとかSSCとか積んでないし。 素直にメモリ空間が増えるAVR32かSAMに乗り換える人が増えるんじゃないか?
989 :
774ワット発電中さん :2009/04/16(木) 20:17:35 ID:nIPw7PxS
>987 それマG?
6ピンAVR出たね。 /www.atmel.com/dyn/resources/prod_documents/doc8127.pdf
>>986 - AES and DES Crypto Engine
これじゃないのか。
日本でも,暗号化のついた製品の輸出は規制かかるはず。
詳しくは↓輸出令第9項(7)暗号装置又はその部分品 を参照。
http://www.meti.go.jp/policy/anpo/kanri/shyourei-matrix/matrix9.htm 暗号装置であって、次のイからホまでのいずれかに該当するもの(中略)
イ デジタル方式の暗号処理技術(中略)
(一) 対称アルゴリズムを用いたものであって、アルゴリズムの
鍵の長さが56ビットを超えるもの
(二) 非対称アルゴリズムを用いたものであって、アルゴリズムの
安全性が次のいずれかの有する困難性に基づくもの
1 512ビットを超える整数の素因数分解
2 有限体上の乗法群における512ビットを超える離散対数の計算
3 2に規定するもの以外の群における112ビットを超える離散
対数の計算
…
とまぁ、いろいろある。
アメリカにも似たような輸出規制があってひっかかるんだろう
>>992 暗号が引っかかるんですね。
ありがとうございました。勉強になりました。
unsigned char x[32000]; これでコンパイル通るんだけどなんでATmega168でこんなに確保できるの? これって32kbyteだよね?168のデータシート見る限りじゃこんなにメモリないのに
リンク時にオーバーフローをハネるように設定してないからじゃね?
実際に領域を使わない限りは実行もできてしまうんでは? SPがオーバーフローしてもちゃんと元に戻ってくれば問題ないし。
ありがとう。確保するプログラムは書き込めてしまうけど、AVR上ではちゃんと 確保できてるわけではないのね。 for(int i=0;i<32000;i++)x[i]=0xff;いれてもエラーでないから確保できてるのかと思った オーバーフローをハネる設定ってデフォでONのこれですよね? 33000だとエラー出るんだけど、32000までだと出ない error: size of array 'x' is negative
それは16bit Intで、33000(0x80E8)が負になるって言ってんだから違うと思う てか、そんなエラー始めてみたな
マルツでかったよ
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。