AVR H8 etc. マイコン総合スレ Part3
4 :
774ワット発電中さん :04/11/18 00:59:17 ID:Q9FZrae9
オシカレ
_、_
( ,_ノ` ) n
 ̄ \ ( E)
>>1 乙!
フ /ヽ ヽ_//
6 :
774ワット発電中さん :04/11/18 01:05:16 ID:utRJ/l7m
1乙。
7 :
774ワット発電中さん :04/11/18 01:49:22 ID:gUjMr+xW
イイゾ!
otu!!
9 :
774ワット発電中さん :04/11/18 11:17:16 ID:BdWgU+Ft
はらへり
即氏会費 H8ちnyが100エンぐらいになりますように
秋月でstk500を買えたのは良いが、atmega16が売っていないはとっても悲しい。
12 :
774ワット発電中さん :04/11/18 23:06:38 ID:Q9FZrae9
>>11 そうなのよ、mega16は秋葉原の店で売ってないからなー。
秋月はまだ古いやつの在庫たくさんあるのかな?
13 :
12 :04/11/18 23:16:57 ID:Q9FZrae9
あり?若松に売ってんだっけ?
14 :
12 :04/11/18 23:31:40 ID:Q9FZrae9
>13 AT mega32-16PC 若松 2520円 Digikey 939円 AT mega16-16PC 若松 1575円 Digikey 744円 この価格差は。。。(泣
ぼったくり若松はいいから、秋月でmega8売ってくれないかなー。
17 :
774ワット発電中さん :04/11/19 00:02:41 ID:o9yt/h8C
どうせなら Mega48がいいな 20MHzだし Debug-Wireでステップ動作できるし
18 :
13 :04/11/19 00:39:53 ID:U3QhxQbN
>>13 mega16、1500円は高いなー。
mega32も単品買いなら送料合わせると微妙にdigikeyの方が高いし。
>>16 若松がdigikeyで仕入れていたとしても、その値段だと高すぎる気がするなー。
他の店で扱いだしたら急に値が下がるかもしれん。
つーか、秋月のAVRってほとんどがディスコン(予定)品なんですが(w
前すれでも出てたが Mega48は拡張I/Oになっているから アセンブラでは正直使いずらい
>>20 拡張IOになると、アセンブラでどう使いにくいですか?
普段Cでしか書かないもんで。
ATMEGA48-20PI-ND 1個/@305円 25個/@191.68円 100個/176.94円 25個で4792円、これだと手数料がかかるんだが、26個でも4792+191.68円なのか、 4792+305円になるのか、どっちかな? まぁ4792+305円だとしても26個で5097円、送料2000円で7097円だから、26で割って1個272円だな。 26個あれば一生使えるだろう(w
>>22 「発注書に記入」してみたら?
前者の 191.68 * 26 = 4984 になるよ。
だから ATMEGA48 だけ発注するなら 27 個 (5175) からだね。
>>21 拡張部にマップされたレジスタにはin/out命令が使えない(sts/ldsを使う)
からプログラムが1ステップ増える。
ま、Cプログラマには関係ないこった。
SHやH8で外部ROMをブートメモリとして使うとして、 SDカードのような物を利用したいのですが、マイコンのバスと接続できる ようなコントローラICなどは何かありますか? それかPCカードアダプタなどに刺した状態とバスと接続する方法は ありそうな気がするのですが、何か情報をお持ちの方教えてください。
26 :
774ワット発電中さん :04/11/19 18:02:01 ID:wud+XkBF
>>25 残念ながら、世界はキミの思うような構造にはなっていないみたいだよ。
DigiKeyで5人でATMEGA48を50個買ったとすると、一人当たり\2317/10個だ。 配布の手数を考えるともうちょっといくかな。
何か情報をお持ちの方教えてください。
何か情報をお持ちの方教えてください。 の検索結果 約 1,260 件中 1 - 10 件目 (0.56 秒)
>>25 ブートは、(内蔵)ROMからするとして、その後SDカードからプログラムをRAMに転送して実行するのが現実的。SDカードは、SPIモードで使うのなら資料は簡単に手に入るぞ
そういや、SDカードソケットが秋月に入ったな。こんど買いに行こう。
>>25 NAND形Flashは、1ページ(512〜Byte)ごとに情報を引き出す作りになっていて、その引き出し作業に数百usかかるので、
アドレス-データバス式に変換したとしても、プログラムのようにランダムアクセスを前提とすると、処理タイミングが掴めないし、
ワーストケースだとリード速度は数千分の1だよ。
>>21 CBI, SBI, IN, OUTといったI/O操作命令などが使えなくなる。
かくちょうI/Oは普通のデータ空間として扱われる。
35 :
30 :04/11/19 23:26:44 ID:TMmpksoQ
>>33 データ収集装置をH8/3052でやった事がある。SDカードにデータをテキストファイルで保存や追記した後、WINDOWS上の集計プログラムで何かしていた。私がやったのは、H8側だけなので良くわからん。
SDカードとH8は、SPIモードで接続した。H8側はI/Oでシミュレートしたけど...
36 :
774ワット発電中さん :04/11/19 23:45:20 ID:NHnbEMJz
>>23 ATMEGA48はJTAGICEmk2でデバッグできるそうですが、
プログラムするためには、AVRISPがいりますよね?
両方とも232Cに繋いで、、って面倒くさそう。
MEGA16あたりでJTAGICEでデバッグ、書き込みをして、
出来上がったらATMEGA48へ、移植、、、といっても
ポートとか全然違うしなぁ。
>>34 TCCR1B=0x01;
を、WINAVRでコンパイルしてみました。
MCU = atmega8 の時
5:test.c **** TCCR1B=0x01;
65 .LM2:
66 0008 81E0 ldi r24,lo8(1)
67 000a 8EBD out 78-0x20,r24
MCU = atmega48 の時
5:test.c **** TCCR1B=0x01;
65 .LM2:
66 0008 81E0 ldi r24,lo8(1)
67 000a 8093 8100 sts 129,r24
なるほど。Mega48の時は、OUTを使わずにSTSを使っています。
C:\WinAVR\doc\avr-libc\avr-libc-user-manual\group__avr__sfr.html
あたりに、その辺の事情が書いてありますね。
そういえば
outb()に関して
#define outb ( sfr, val ) (_SFR_BYTE(sfr) = (val))
Deprecated:
For backwards compatibility only. This macro will eventually be removed.
Use direct access in new programs.
とあって、outb(PORTA,0xff) じゃなくて、PORTA=0xffと書け っていうのはそういう事情なのか。今やっとわかった。さんきゅ(w
あ、ちょっと補足。 MCU = atmega48 の時 outbは、 5:test.c **** outb(TCCR1B,0x01); 65 .LM2: 66 0008 81E0 ldi r24,lo8(1) 67 000a 8093 8100 sts 129,r24 ちゃんとstsにコンパイルされていました。winavrえらい。
43 :
774ワット発電中さん :04/11/21 11:56:07 ID:ZHSBRvBR
AKI-PIC+akipic+gputilという環境でPICで遊んでたのですが、
最近avr-gccの存在を知り,AVRに興味をもつようになりました。
いろいろ調べてみてC言語を使うならAVRがよさげだと思ったのですが、次の
2つの点が分かりません。
1)linux上で使えるATML純正アセンブラと互換のアセンブラはあるのか?
(avaというアセンブラがあるのは見つけましたが互換性がないみたいなので・・・)
2)シリアル接続のライタを自作したいと考えているのですが、linuxの書き込み用
ソフトがあるのかどうか分かりません。
(
http://ww2.tiki.ne.jp/~maro/AVR/start/AVRstart.htmlの マルチプラットフォームライタが良さげだが肝心のlinux用の書き込みプログラム
についての記述が見当たりません。
他、
http://elm-chan.org/works/avrx/report.htmlなどいろいろ見つけました がlinuxからの書き込みに関しては情報がとても少ないようです。
もちろんAKI-AVR+akiavrの選択肢はありますが金かけたくないので・・・)
もしlinux上でAVR開発されている方がいましたら情報いただけると嬉しいです。
45 :
774ワット発電中さん :04/11/21 15:38:20 ID:xhR55VIs
>>35 今h8/3052にSDカードを繋げて実験してます。
CMD0を送ってSPIモードに移行しようとしてるんですが、
レスポンスがいつまでたっても0x01のまま・・・
何か注意するような点とかあります?
>>43 なぜ苦労してLinuxにこだわるの?
Windowsならちゃんとした環境がタダであるんでしょ?
Linux野郎とはそういうものだ。 あと、マカーとか。
48 :
774ワット発電中さん :04/11/21 16:33:45 ID:1s9/Y3Ye
49 :
35 :04/11/21 16:50:01 ID:14SiUcOn
>>45 80クロック送信直後なら、それで良いのでは?
CMD0 -> res 0x01
CMD1 -> res 0x01
CMD1 -> res 0x00が返るまでリトライ
後は、フルスピードで使用できる。
>>48 そのころにはPICもなくなっているか別のものに取って代わっている。
51 :
774ワット発電中さん :04/11/22 22:57:44 ID:BdMGRR3x
すみません。教えて下さい。 秋月のH8/3069ボードに16bit幅のS-RAMを接続しようとしています。 今までワンチップモードばかりやっていて、外部バス接続は初めてです。 H8のバスコントローラのABWCRで、メモリを置くエリアを 16bit幅に設定したとします。 H8とメモリの接続についての質問 1) H8と16bitメモリの接続で、メモリのWE端子とH8のHWRをつなぐ。 これは合っているでしょうか? 理由 ワードアクセスにすれば、H8のWRはHWR,LWRとも必ず 出るので、どちらにつないでもよいと考えています。 2) 同様に、メモリのA0はH8のA1,メモリのA1はH8のA2....というふうに 1つずつずらしてつなぐ。これは合っているでしょうか? 理由 ワードアクセスなので、H8からは偶数番地しかアドレス 出力されないのに対し、メモリは1番地ずつ全部存在するから。 3) H8-CSはメモリのCEに、H8-RDはメモリのOEに、H8-ASは開放にする。 この接続は正しいでしょうか? 4) このメモリには、!UB,!LBという端子がありますが、両方ともGNDに しておけばよいと思っています。この接続は違っているでしょうか。 5) そもそも、この!UB,!LBという端子は、なんのためにあるのでしょうか? 8bitっぽくも使えるよ、ということでしょうか。 H8でのアクセスについての質問 6) この場合(ABWCRで16bit幅に設定した場合)、このメモリに対して、 バイトアクセスすると、H8の出力はどのようになるのでしょうか? 予想では、バイトだろうとワードだろうと常にワードアクセスに なると思ってます。どうでしょうか? (このメモリに1byteしか書かない時は上位1byteは無駄に なると思っています) 7) H8のクロックが25MHz(=40ns)で、メモリのアクセススピードが70nSです。 H8の2clockで80nsなので、16bit,2ステート,ワードアクセスが 出来ると思っていますが、正しいでしょうか? その他の質問 8) H8のAS(アドレスストローブ)というのは、何のためにあるのでしょうか? 「今はアドレスが確定だよー」という信号らしいのですが、 このH8ではHWR/LWRに同期しているので、何のために?....と思っています。 (その昔、アドレスバスとデータバスを共用していた時には 有用だったらしいのですが、H8では....わかりません) すみません。諸先輩方、宜しくご指導お願いいたします。
52 :
774ワット発電中さん :04/11/22 23:26:13 ID:vxm0dXgW
>>51 釣り師キタ━━━━━━(゚∀゚)━━━━━━ !!
>>51 2ちゃんねら〜 電気板住民の特性
4行以上のカキコに耐えられる率 40% 以後2行毎に半減。
長文を書いても読んでもらえないよ。ってこと
55 :
774ワット発電中さん :04/11/23 00:06:24 ID:/vJHuPsz
>>52 ,53
いえ、全然そんなつもりは無いんです。
ぜひアドバイスをお願いします。
てゆうか、この手のハードウェアについて書かれた本でも
結構です。
手持ちの「H8....」という本(マニュアルも含めて10冊あります)には、
秋月H8のままでの使い方ばっかりで、全く書かれていなかったです。
少々困っています。すみませんが、ぜひ宜しくお願いします。
56 :
774ワット発電中さん :04/11/23 00:09:14 ID:/vJHuPsz
>>54 そう思って、箇条書きにしてみたんですが、どうでしょうか?
説明不足だと「内容が足りない」って言われるし、
多いと多いで「長すぎる」って言われてしまいますね。
気長に待つことにします。
>>55 ハードウエアマニュアルに接続方法が書いてないか?
まあワードアクセス限定なら
>>51 でも良いと思うが。
タイミングは検証するのが面倒なのでパス。
59 :
774ワット発電中さん :04/11/23 00:45:26 ID:G4GNlIM5
>>55 悪いことは言わん。
2チャンネルは日本最大の公衆便所(または痰壺)だ。
キミがまともな質問を投げかけても
帰ってくるのは罵詈雑言かまことしやかな嘘だけだ。
H8関係の製作記事を載せているホームページは
たくさんあるので探してみなさい。
61 :
774ワット発電中さん :04/11/23 01:01:36 ID:/vJHuPsz
>>58 はい、DRAMの接続は有るんですが、S-RAMの接続の方法がないんです。
H8/3048のマニュアルには、8bit幅のS-RAMの接続は書いてありました。
8bit幅のRAM接続はよく理解できるんですが。
>>59 わかりました。すみません。8bit幅のものを2つ使うことにします。
ホームページも検索したんですが、「ウチの基板には16bit幅のRAMが
載ってるよ」というのは、たくさんありました。
また、8bitのS-RAMを増設するっていう記事も、たくさん出てきました。
>>57 わかりました。一気にたくさんの質問はいけないですね。失礼しました。
では、最後に1つだけ教えて下さい。メモリの!UB,!LBのピンは
何のためにあるのでしょうか? こうなった背景でも結構です。
もし気分が載ったときにでもご指導くださいませ。
みなさん、どうもありがとうございました。
もう少し精進してきます。「ありがとう! 2ちゃんねる」
こんなのがうちの職場に来たらどうしよう
素直な良いヤツなのだが、扱いに困る>皆敬遠して寄り付かないだろうなあ。 H8 MLに出たらどうしましょう(ガクガクぶるぶる〜!!)
>>49 レスサンクス
なんとかSPIモードに持っていけました
まだFATが残ってるけど...
66 :
774ワット発電中さん :04/11/23 02:29:18 ID:n261fQ4K
61は、あきらめて行っちゃったみたいだな
H8の16bitバスフル活用実務3年の俺だけど、 教えたくてうずうずしているのだが、長文になりそうだから止めたほうがいいな。
質問に答えての長文は構わんだろ。質問者が読めばいいんだから。
69 :
774ワット発電中さん :04/11/23 12:16:13 ID:Qie0rWBv
>>55 アドバイスっちうかさ、ある意味どれも基礎的な話なわけよ。
データシートとかアプリケーションノート読んだりすれば分かる話ばかり。
ま、例えばメモリの話なら、適当なメモリメーカーのサイトに行けばpdfとかで
ころがっているからとってきて読めばわかる。
端子の説明が当然書いてあるんだから。タイミングチャートも書いてあるし。
みんなさ、「あぁ、それは俺もひっかかった」とか言う話なら喜んで
答えるもんなんだよ。でも「そんなの常識杉」なのはあほらしくてね。
ここは初心者すれでもないし。
>>69 に追記
使いたいH8やメモリなどのデータシート、アプリケーションノートを
入手しておくのは基本中の基本。
つうか、およそ「設計」するのなら、まず最初にやること。
つうか、話が始まらない。
昔は高い金だして買ったものだが(プロならメーカーから貰えるが)、
今はネットで簡単に手に入る時代。
やらないのは怠慢以外のなにものでもない。
まあ答えとしてはこんなもんでしょう。 (1)バイトアクセスを一切しないのであれば正解 (2)16bitメモリで、アドレスがワード単位で定義されているのなら正解 (3)正解 (4)バイトアクセスを一切しないのであれば正解 (5)上位を書き換えるか、下位を書き換えるかのセレクト。バイト書き込みをするのであれば制御が必要。 (6)偶数アドレスへのバイト書き込みならHWR、奇数アドレスならLWRがアサートされる (7)アドレスホールド期間が足りない予感(SRAMにもよるが) (8)H8は/CSを使う方が便利なんでイラネ。ただし/CSはスタティックハザードが乗ってるので、クロックに入れると危険。
で、バイトアクセスをしないなら〜とは書いてみたが、正直言ってきわめて危険だと思う。 これが原因でバグったら、おそらく原因が全くわからなくなる。Cで組むなら尚更。 多少ロジックは増えるが、/UB=/HWR・/RD、/LB=/LWR・/RD、/WE=/HWR・/LWRとして、バイト書き込みを許容すべきだろう。
>>69 ところで、そのメモリーメーカーつうのをいくつか教えてくれよ。
生理東郷でさぱりわからん。
AVRを始めてみようかと思うんだけど、なんかお勧めの参考書ありますか? つーかまあamazonで検索しても日本語の本は1冊しか見つけられなかったんだけど、 やっぱり他には存在しないのかね。
>>74 ないです。
WINAVR(GCC-AVR)の解説記事書けば売れると思うんですが、なんで誰も書かないんだろ。
タイマーの16ビットアクセスするときは、割り込み止めるか、割り込みルーチンの中でやるか、とか。 そういうやつとか。 232Cの使い方とかI2Cの使い方とか。 探せばいくらでも見つかるんだが、1冊の本になっていると便利だとは思います。
78 :
774ワット発電中さん :04/11/23 20:20:57 ID:yriImy8s
みなさん こんばんは 昨日の51です。 昨日は、お騒がせしました。みなさんのお陰様で、その後いろいろとわかりました。 っていうか、ズバリ答えていただいた人もあり、理解が深まりました。 ありがとうございました。私の勘違いは、次の点でした。 「ABWCRを16bitに設定すると、ワードアクセスのみ許され、 ソフト上でバイトアクセスしてもH8のハードウェアによって、 ワードアクセスになる(なってしまう)」と思っていました。 ここが最大の勘違いでした。 16bit空間でもバイトアクセス出来るんですね。 というかバイトアクセスの他にワードアクセス「も」できる、と 言う意味なんですね。 バイトアクセスで、偶数番地をアクセス→/HWRだけアクティブ バイトアクセスで、奇数番地をアクセス→/LWRだけアクティブ ワードアクセスで、偶数番地をアクセス→/HWR,/LWR両方がアクティブ ワードアクセスで、奇数番地をアクセス→/HWR,/LWR両方がアクティブ (この場合、(番地-1)の偶数番地にアクセスされる) 従って、/HWRは/WEと/UBに、/LWRは/WEと/LBにつなぐことになり、 また、/RDは/RDと/UBと/LBにつなぐことになるんですね。 そして、アドレス線は、A0-A0, A1-A1...とそのままつなぎ、 /CSは/CEにつなぐということになるのですね。 勉強になりました。たくさんのみなさん、本当にありがとうございました。
79 :
774ワット発電中さん :04/11/23 20:21:21 ID:yriImy8s
51です。
>>69 ,70
すみませんでした。
> 端子の説明が当然書いてあるんだから。タイミングチャートも書いてあるし。
はい、読んで、端子機能もタイミングも理解できていました。
が、ワード単位のメモリに、なんで上位下位別々の書込をするのかが
わからなかったのです。
> 入手しておくのは基本中の基本。
はい、H8もメモリも両方ともデータシート(ブック?)を持っていますし、
読んでいましたが、読み込みが足らなかったため、わかりませんでした。
>>71 コメントありがとうございました。
71さんの「(1)バイトアクセスを一切しないのであれば」という文章で
ハッとして理解できました。ありがとうございました。
> (7)アドレスホールド期間が足りない予感(SRAMにもよるが)
この件は、1ウエイト入れることで対処しようと思っています。
ありがとうございました。
>>64 > トラ技に載ってるよ?ん。
> 最低でも3年間位は定期購読して普段からお勉強しましょうね。
ありがとうございました。大変参考になりました。というか、ズバリですね。
ありがとうございました。トラ技は、ここ10数年買い続けていて、
本棚に全部あります。が、アナログ屋のためマイコン系の記事は
深く見ていなかったです。すみません。ありがとうございました。
>>72 > 多少ロジックは増えるが、/UB=/HWR・/RD、/LB=/LWR・/RD、/WE=/HWR・/LWRとして、
これって、/UB=/HWR + /RD ではないでしょうか? /HWRと/RDは同時に
訪れないと思うので、LowORだと思うのですが。どうでしょうか?
ありがとうございました。
>>/UB=/HWR + /RD ではないでしょうか そうだ、自分を信じてGo! 失敗もまた人生だ。
>>75 AVR-LIBCを見たらALL−OKだからな。
>>そして、アドレス線は、A0-A0, A1-A1...とそのままつなぎ そうだ、自分を信じてGo! 失敗もまた人生だ。
AVRって、ADM232系のIC使ってライタ作れませんかね?
ttp://elm-chan.org/docs/avr.html ここのCOM接続のライタのレベル変換部をADM232で置き換えられるかと思ったのですが、H8と違って、
マイコン側にわけわからない端子がいくつか繋がってたり…H8なら、ADM232にRx、Txを、RS-232C、H8
双方から繋いでやればOKみたいなんですが、AVRはそうはいかないようですよね。
ちょっと手直しすれば大丈夫でしょうか?どなたかご教示願います
>>83 置き換えは可能だと思うが、意味が無い。
理由 使い勝手が悪くなる。74HCよりADM232のほうが高い。
「わけのわからない端子」なら、余計なこと考えないでそのまま作れ。
>>84 そうですか、ありがとう。
実は、74HC126もADM232も両方持ってるんですw
今回は無難に74HC使って作ります。
ADM232は、PICかなにかのライタ作るのに使うか。
86 :
774ワット発電中さん :04/11/24 00:05:49 ID:Vs3GcIj0
>>80 ,82
えぇーーっ? なんか変ですか。合ってると思うけどなぁ。
>そうだ、自分を信じてGo! 失敗もまた人生だ。
ですよね。
よっしゃ、自信を持って行きます。
I/Oが足らないので8255積んでー.....あれっ?3.3Vで動いたかな
FWE端子はLレベルにして....ライター用のコネクタも出さなきゃ。
(現在、アートワーク屋さんに出す回路図を作成中です)
>>85 RS-232トランシーバの論理は反転(つまりインバータ)なので
そのままでは置き換えできません。
ソフトを直すか、インバータを追加するか。
ついでに、3ステートにできないのでスイッチでのディスコネクトもできない。
>>86 >>/UB=/HWR + /RD ではないでしょうか
80ではないが、79でLowORと書いてあるのが負論理のORという意味なら正解。
負論理のOR、正論ならAND、部品で言えば7408てこと。
アドレスはH8-A1->RAM-A0、H8-A2->RAM-A1・・・つまり51で書いてた方が正解。
ついでに言えば、リード時の16bit幅のSRAMはリードのアクセスタイムが
/UB、/LBのアクティブから規定されているので、70nsのSRAMに25MHzのH58/3069なら
1アクセスに4クロックは必要。3クロックでは/WE、/UB、/LBのLパルス幅も足りないと思う。
89 :
88 :04/11/24 00:22:54 ID:jAgawDwa
>>正論ならAND 正論理ならAND、ね。
90 :
72=80 :04/11/24 05:12:25 ID:zTfkx3yn
>>86 正解はやはり、/UB = /HWR ・ /RD。
HWRかRD、どっちかがアクティブならUBもアクティブ、つまり UB = HWR + RD なんだから、
これを変形して実際の論理にあわせると、/UB = /HWR ・ /RDになる。
慣れないうちは真理値表を書いて確かめよう。
>>86 8255か…
高速H8の場合、/*WRが解除されてからのデータバスを開放する時間が異常に短い(Tck/2-15, 25MHzなら5ns)から、
もしPPIが30ns程度のホールドを要求している場合、/*WRをいじってホールド時間を伸ばす工夫が必須で、
下手すれば3サイクル3ステートでも足りなくて、/WAIT制御なんてことも必要になるのできおつけてね。
そういえばPPI使ったこと無いな。いつもディスクイートで組むし。
CS落としっぱなしでWR、RDをデコードで切るってのやったけどだめ?、遅いEPROMでもやったし 8255での失敗ネタ 電源ON時になぜか電磁弁がバタつく、出力に使うポートをプルアップしてた
>>88 >>90 信号はActive-Lowなんだから、/UB = /HWR + /RDが正解だと思うが?
ドモルガン変換を使わないで回路図を書くようなイマドキの厨房はこうなのか?
>>92 遅いと思っているEPROMも、実際には70nS〜100nSくらいでデータが確定している
ので、デバイスの実力値で動いている罠。
MEM_WRを、上位アドレス出力とWR/RD信号を論理合成して生成すると、デコーダ
回路の遅延時間分、MEM_WRの立ち下り/立ち上りが遅れるので、むしろWR時の
データセットアップ/ホールドタイムが更に厳しくなる。
> 電源ON時になぜか電磁弁がバタつく、出力に使うポートをプルアップしてた
8255はモードレジスタを書き換えて、ポートの入/出力方向を変更すると、データ
レジスタがクリアされる。(先にデータレジスタを0xffで初期化しても無駄)
初期(リセット)状態では、全ポート入力で、IC内部にプルアップ/プルダウン回路
がないため、フェイルセーフ設計には、外部に100kΩ程度のプルダウン抵抗が
必須。プルアップして、負論理で使うとポート初期化時にヒゲが出る。
Motorola厨房は、糞なIntel設計を笑いながら、6821を使ったもんだ。
>>83 AVRって純正のライタだって4000円くらいだから、その方がいいんでは?
(純正のライタ以外にWINAVRから Make-Programで書き込みできるライターって
AVRDUDE経由だから↓だよね。
programmer
id = "bsd";
desc = "Brian Dean's Programmer,
http://www.bsdhome.com/avrdude/ ";
id = "avrisp";
desc = "Atmel AVR ISP";
id = "stk500";
desc = "Atmel STK500";
id = "avr910";
desc = "Atmel Low Cost Serial Programmer";
id = "butterfly";
desc = "Atmel Butterfly Development Board";
id = "pavr";
desc = "Jason Kyle's pAVR Serial Programmer";
id = "stk200";
desc = "STK200";
id = "pony-stk200";
desc = "Pony Prog STK200";
id = "dt006";
desc = "Dontronics DT006";
id = "bascom";
desc = "Bascom SAMPLE programming cable";
id = "alf";
desc = "Nightshade ALF-PgmAVR,
http://nightshade.homeip.net/ ";
id = "sp12";
desc = "Steve Bolt's Programmer";
id = "picoweb";
desc = "Picoweb Programming Cable,
http://www.picoweb.net/ ";
id = "abcmini";
desc = "ABCmini Board, aka Dick Smith HOTCHIP";
id = "futurlec";
desc = "Futurlec.com programming cable.";
>>95 >フェイルセーフ設計
意味も判らずに用語を使うな、ボケ。
壊れたときや、誤動作したときに、重大な事故をを起こさないように考えた設計の事だ。
>>95 リセットピンが負論理でないのも痛かった
Intelの体質って今も昔も変わらんな
>>97 8255が氏んだり、プログラムが暴走して出力→入力に設定が変わった時にも、
デフォルトで'L'に固定されるようにプルダウンで使うわけだが?
辞書だけの知ったか粘着房氏ね!
>>92 昔16MHzでやった時はそこそこ余裕があったが、25MHzは厳しそうだなあ。
たぶん20MHzあたりが限界じゃないかなあ。タイミングチャート見てないので断言できないが。
>>95 ちゃんと定格に収まるでよ。
RD/WR制御なら電気食う代わりに半分くらいの時間で動いてくれまつ。
まあそれなりに高速なデコーダーを用意しないと、苦労して削った分の時間を食いつぶされて、
悲しいことになるが。
>>99 バカタレ 8255使う時点でお遊びだろが。
>CMOS版でも5V動作だと思う。当然、入/出力も >3.3Vトレラントじゃない。 5V系の石に3.3V系の連中の信号を突っ込んでも大丈夫だろ? ただ、つながれる相手が5Vトレラントでないとリードしたとき なんかにあれれ?ってことになるけど。 #くそー・・バススイッチが要るじゃないか・・何とかしろ>有寺
>>101 漏れも基本的にはそう思う。
今どきはシリアルのI/OもあるしOutportでいいならシリアルDACを使う手もある。
さらにいうとADC/PWMが欲しくてさらにI/Oを追加でっていうときに
ワンチップマイコンを使ったこともある。FPGA(CPLD)で組むこともある。
なんで苦労してバス制御信号にゲート組まねばならんのよ。
104 :
774ワット発電中さん :04/11/24 22:58:47 ID:1yESL60R
みなさん こんばんは お世話になってる51です。毎日すみません。 いろいろとご親切に教えていただいて、ありがとうございます。 「H8に16bitメモリをつなぐ」の件は、今日やっと理解できました。 昨日までの理解では、 「ABWCRを16bit幅に設定したんだから、H8は16bit毎に1番地進むし、 メモリも16bit幅の物だから16bit/番地だ」 と思い込んでいたのです。なのでつじつまが全然合わず、悩んでいました。 が、さっき気が付きました。 「H8は、常に1バイトで1番地として扱い、ABWCRを16bit幅に設定する ということは、バイトアクセスで2回分が1回でできる というだけのこと」 ということに気が付いたんです。(たぶん合っていると思います) これに気付いてからというもの、H8マニュアルの内容も、 みなさんのお話の内容も、スーっと理解できるようになりました。 嬉しいです。皆さんのおかげです。本当に、ありがとうございました。 (早速回路図を修正しています。時間もないし....) みなさん、ありがとうございました。
バイトはバイト ワードはワード
106 :
774ワット発電中さん :04/11/24 23:20:21 ID:1yESL60R
>>105 エッ? どういう意味ですか? 私の説は....ボツ...でしょうか。
107 :
774ワット発電中さん :04/11/24 23:33:14 ID:1yESL60R
>>64 51です。
トラ技'04-1月号P105に載ってる回路図って、違ってますよね?たぶん。
H8.A0-メモリ.A0, H8.A1-メモリ.A1............となっていますが、
H8.A1-メモリ.A0....ですよね。
トレーサーの人が間違えたんでしょうか。
>>88 ご親切にありがとうございます。
> 80ではないが、79でLowORと書いてあるのが負論理のORという意味なら正解。
> 負論理のOR、正論ならAND、部品で言えば7408てこと。
これについては、私も間違えていました。
誤) LowOR → 正) LowNOR
負論理ORで、負論理出力でした。なので、正論理AND(7408)ですね。
ドモルガン変換は、高校の時にやったのを思い出しました。
> アドレスはH8-A1->RAM-A0、H8-A2->RAM-A1・・・つまり51で書いてた方が正解。
はい、ありがとうございます。前述のようなわけで、大変よくわかりました。
> ついでに言えば、リード時の16bit幅のSRAMはリードのアクセスタイムが
> /UB、/LBのアクティブから規定されているので、70nsのSRAMに25MHzのH58/3069なら
> 1アクセスに4クロックは必要。3クロックでは/WE、/UB、/LBのLパルス幅も足りないと思う。
はい、これについても、確認したところ、仰る通りダメのようです。
/UB,/LBが60nS, /WEが40nSでした。今回は、ADサンプルの関係もあって
H8を16MHzで駆動することにしましたので、たぶん大丈夫だと....思っています。
108 :
>64 :04/11/25 00:30:17 ID:116t4P6J
>107 その通りです。memoryはA0-、H8はA1-、になります。 やっとS-RAM 1M 16bitBUS 20nSが手に入ったので、ノーウェイトで試作出来ます。
109 :
774ワット発電中さん :04/11/25 00:38:32 ID:dZ56RuH0
>>91 >>94 アドバイスありがとうございます。
お察しの通り沖のMSM82C55です。これにした理由は、3.3Vから使えるのと、
PPI_A |= 0x02; とかがやりたかったからです。
>のデータバスを開放する時間が異常に短い(Tck/2-15, 25MHzなら5ns)から、
データシート確認しました。82C55が30ns欲しがっているのに、H8では、
5nSですね。どうしよう。「/*WRをいじってホールド時間を伸ばす」との
ことですが、H8が一方的にデータ出力をうち切ってしまうので、これを
何かの素子で保持するということでしょうか。私には大変そうな予感。
82C55の入手性も悪いし、そこで思い切って標準ゲートICでのI/Oを考えました。
入力ポートはHC573のD-ラッチで良しとして、出力ポートはHC273あたりで
考えてみようと思います。 CK = /(/CS * /HWR), LE = /CS * /RD。
あっ! /CSの余りが.....無い.....(泣) HC138でアドレス振るですか。
110 :
90 :04/11/25 02:02:42 ID:xXq39CNr
>>93 /WR /RD /UB
------------------
H H H
H L L
L H L
ドンマイ!
> お察しの通り沖のMSM82C55です。これにした理由は、3.3Vから使えるのと、 > PPI_A |= 0x02; とかがやりたかったからです。 3.3V動作は判るが、後半の意図がよくわからん。沖以外の8255でも、ポートの リードモディファイドライトは可能だと思うが? > 82C55の入手性も悪いし、そこで思い切って標準ゲートICでのI/Oを考えました。 > 入力ポートはHC573のD-ラッチで良しとして、出力ポートはHC273あたりで 外部信号の状態をインターバルタイマ割込では間に合わないような周期のタイミ ングで取り込んで、後から非同期で読み込むような使い方でない場合、入力ポート はHC245で十分だと思います。 その場合、ちょっと特殊だが、74HC/HCT646,74HC/HCT652あたりなら、部品点数 が半分に減らせると思いまつ。内部構造はいずれもHC245+HC373×2(双方向)で、 制御線は各2本のクロック入力と、ラッチ出力かスルーを選択するセレクタ入力 のほか、646はDIR+/G(245と同じ)、652はA側とB側で独立した/OE(/G)端子が ありまつ。HCなら入手性は問題ないと思う。 646はポート出力したラッチの内容を読み出すような使い方はできないが、652なら、 A側をCPU、B側を周辺とした場合、SABとOEABを'H'(A→B:374相当,常時OE)で、SBA を'L'(B→A:245相当)に固定し、/OEBAに/RD*/CS(負論理AND)、CLKABに/WR*/CS (負論理AND)を繋げば、初期化不要な8255の1ポート相当に使えるはず。 3.3V動作で5Vトレラント品だと、SN74LVC646A,SN74LVC652Aあたり。さらに、 値段は倍くらい(bit単価はほぼ同じ)で、1個あたり16bit構成のSN74LVCH16652A, SN74ALVCH16646とかも多数ある。但しパッケージは面実装品のみ。 TIのサイトで『Registered Transceivers』で検索するよろし。
112 :
90 :04/11/25 02:22:36 ID:xXq39CNr
>>109 >>HC138でアドレス振るですか。
振るですよ。
>> CK = /(/CS * /HWR)
/CS /HWR /CK
------------------
H H H
H L H
L H H
L L L
ドンマイ!
>>93 'H'=1(True)の正論理でしか思考していないのがまる判り!
/WR /RD /UB
-----------------------------
H(False) H(False) H(False)
H(False) L(True) L(True)
L(True) H(False) L(True)
,,v‐v-/l_ (⌒)
_「/ ̄ く /
lYノノ/_ノl_ヽ))
<イ( l l )l> / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
<|)'|l、"(フノ|l < スラッシュは飾りじゃありません!プンプン
,(ヨリ<>o<>リ'] \______________
|ト‐!]-ム- i']l
ヽ_ノv__l/ /
. ノ[//‐─‐/_/、
( /E|, (フlヨ \
,-| El___lヨ /
└-\`^^^^^^´/
 ̄ ̄ ̄
114 :
90 :04/11/25 02:32:51 ID:xXq39CNr
>>113 それってまんま /UB = /WE・/RD (負論理OR)) だよね。
悪いけど、君が思い違いしている。
ていうか、7年ぶりに教科書見ちゃった。 確かに負論理のときは、andとorの演算子を入れ替えるんだったな…って。 そうじゃないと、UB = WE+RD と、/UB = /WE・/RD が等価だというド・モルガンの定理に反するし、 アルテラやザイリンクスのVHDLにも反することになって大変だよ。
>>90 =
>>114 =
>>115 AND演算子に「*」ではなく中黒(・)を使っているのもキモいが、まぁそれは
いいとして、正論理だろうと負論理だろうと、OR演算子は常に「+」だ。
『/UB = /WR + /RD』 をC言語風に書くと...
『UB = (WR == 'L') | (RD == 'L') ? 'L':'H'』だ。
まほろさん、もういちど
>>90 に説教してやってくだちゃい。
,,v‐v-/l_ (⌒)
_「/ ̄ く /
lYノノ/_ノl_ヽ))
<イ( l l )l> / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
<|)'|l、"(フノ|l < スラッシュは飾りじゃありません!プンプン
,(ヨリ<>o<>リ'] \______________
|ト‐!]-ム- i']l
ヽ_ノv__l/ /
. ノ[//‐─‐/_/、
( /E|, (フlヨ \
,-| El___lヨ /
└-\`^^^^^^´/
 ̄ ̄ ̄
もういいよ。疲れた。 アルテラとザイリンクスにメールよろ。
119 :
72=80 :04/11/25 12:04:56 ID:k45H3FCc
今回の混乱は、物理的なの正当性を主張する側と、論理的な正当性を主張する側の争いに見える。 ___ ○\ \ 要するに │ >○ を単独で/A+/Bと主張するのがまほろさんで、 ○/ /  ̄ ̄ ̄ H8の出力側で既に負論理になっているもの(/A,/B)をさらに反転して、//A+//B (= /A ・ /B) と主張するのが俺なわけです。 というところで手を打ちませんか?
初心者の方もが誤解しないように、出力も含めて書いておきます。 ___ A─○\ \ 要するに │ >○─C を単独で /C = /A+/B と主張するのがまほろさんで、 B─○/ /  ̄ ̄ ̄ H8の出力側で既に負論理になっているもの(/A,/B)をさらに反転して、/(/C) = /(/A)+/(/B) ( /C = /A ・ /B) と主張するのが私なわけです。 この考えは、H8のピンからNOTを介さずにHC08などのANDロジック1個を接続するだけで実現できるという、 物理的な現実と相違が無いように、表現の整合性が求められる際に取られる流儀です。 したがってVHDLでも、こちらの表現が採用されます。 というところで手を打ちませんか?
121 :
774ワット発電中さん :04/11/25 12:41:47 ID:PBNJYpnQ
あげ
122 :
774ワット発電中さん :04/11/25 13:44:15 ID:u+8BZy++
近所の部品屋@田舎でPICを頼もうと思うのだが、 PICって ”ピック” って呼称すればいいのか?
そー読むと千石のネーちゃんに殴られるぞ。 ピク が無難。
125 :
774ワット発電中さん :04/11/25 14:13:14 ID:SS8umbUA
えー、そうなんか。漏れの職場ではピックって呼んでる。
今度代理店の中の人にきいてみるわ。たしかピックっていってたやうな。
>>120 は火に油を注いでいるやうな。
整理や基本ができてないから話がぐちゃぐちゃで何を論争しているのかさえ不明。
この話の発端あたりで「アクティブだから云々」と言い出している時点で間違い。
最低でも「High(もしくはLow)アクティブだから」と言わないとダメ。
そもそもそういうのを頭の中や言葉で考えようとするからダメ。
こういうものはまずタイミングチャートを書いて論理表を書くんだよ。
書いてる人もいるけど全組み合わせ書いてないのがあるな。
ありえなくても書くんだよ。
どっちでもよければ*とか書いてそれを明示しないとね。
で、それを回路図に落とす。
ものができたらタイミングチャートどおりに動いているか確認するんだよ。
>>120 VHDLならもっと高度な記述すると思うけどなあ。
あえてプリミティブチックに書けばこうかな。
C <= "0" when ((not A) or (not B)) else "1"
まほろさん(
>>116 )ってC風と言ってるけどなにげにVerilogちっくw
>123 秋月の店長は、ピックと言っていた。 なのでどっちでも間違われないように、ピーアイシーと発音して注文。(w
>>127 そういえばむかしCで回路記述できるっていう話がどっかにあったな。
一般化(?)はしてないのかな。
>High(もしくはLow)アクティブだから プゲラ 30年前のネタじゃん。 アクティブが先ね。 アクティブロー アクティブハイ でもこれだと能動素子で引っ張ってるのか?とか混乱は広がる。
>131 お前、言葉の意味つうのを全く理解していないんだな。 全くお前の将来は憂いに満ちてるな。
134 :
774ワット発電中さん :04/11/25 20:27:12 ID:nSQIIPsE
>>130 すいません、おっしゃってる意味が分からないんですけど。
>>109 >/*WRをいじってホールド時間を伸ばす」とのことですが、
>H8が一方的にデータ出力をうち切ってしまうので、これを
>何かの素子で保持するということでしょうか。
*WRを標準よりも早くインアクティブするように細工すると言う事だと思われ。
つまり、8255がセレクトされてからクロック数を数えるカウンタ(若しくはシフト
レジスタの類)を用意し、そいつで*WR信号を半クロック若しくは1クロック速く
止めてしまえば良い。H8のクロックによっては8255が必要とする*WRパルス幅に
余裕が無くなるのでウェイトが必要になるかもね。
>>129 SystemCvsSpecCスレに行くといいのではないでしょうか。
137 :
774ワット発電中さん :04/11/25 21:48:32 ID:mUz+JN9F
>>136 結局高卒は求められたものを答えられないと。
哀れすぎ。
138 :
774ワット発電中さん :04/11/25 21:58:48 ID:mUz+JN9F
>>135 そういえば似たような状況でD8-D15を374てラッチしてホールド時間を伸ばした事はありますな。
たしか/CS*/WRをCLKに入れて、最後に書いたデータでずっとドライブするという手抜き仕様。
まあホールド長い分には別に問題ないからのう。
頭使わない分、配線が増えるが。
141 :
139 :04/11/25 22:07:42 ID:SORn0ca/
>>144 >ルネサステクノロジ社製高性能16bitマイコンR8C/15を
>使いやすい2.54mmピッチDIPパッケージに収納しました。
ジョークグッズの世界だが、ワンコインで買えることを希望する。
>>145 ATTINY26が秋月で@280円だから、それくらいがいいなぁ。
>>145 1コイン10万円・・・ってこたないよなー。あれもいちおーワンコイン。
ちょっと、営業に聞いてみよう。採用考えるからって。
digi-keyでもATmega88とかATTiny2313はまだ入手出来ないんですかねぇ
Tiny2313はとっくの昔に発売しました。 今は売り切れてるだけ。
>>149 AT90S2313とかでいいじゃん?何処が地がうんだっけ?
クロック20MHzの他に。(デバッグワイヤーなんて機能は使わんだろー)
>>150 萌える機能
内蔵RC発振、基準電圧内蔵アナログコンパレータ、USI
timer0でのPWM、BOD、1クロックMOVW命令、拡張LPM命令
まあまあ萌える機能
拡張されたPWM、SPM命令、高速UART
>>151 あ、内蔵クロックって無いんだっけ。なるほど。
アナログコンパレータなんて要らないから、1chでもいいからADC積んでくれるといいんだがなぁ。
(つっか、Tiny26が2313とピン配置が全然違うっていうのは、なんでだ?)
>>152 8535/mega以降のと合わせたんじゃない?
>>153 あー電源が中央って意味ですか?
それで思い出したけど、左右でVCCとGNDがクロスするっていうのは、意地悪としか思えないんですが、なんの意味があるんでしょかね?
>>154 逆挿ししてもちゃんと動くようにするため。(もちろんソフト上の対応も必要だが)
>>155 あー、な、ななるほどー。マジで、目からウ○コが落ちました。さんきゅー
>>155 動く動かないより、電源ショートで火災にならない様にだろ。
逆さにさして動くソフトを作るなんて無駄
そら来たっ!(w
159 :
774ワット発電中さん :04/11/30 08:25:47 ID:P8E2R2JA
ちがうよ IC内の四角いチップの 左右にGND、上下にVccを持って来ると 自然とあのピン配置になるのよ PICも同じね
PICマイコンは中よりだけど逆さしすると即死するピン配列だったと思うが。
>>160 ですね。16F628あたりは、18ピンの5がVssで14がVddです。
逆さに刺すと、丁度GNDとVCCが反対になる最悪パターン。
「逆さに刺しても(電源が逆になるという理由で)壊れることはない」っていうのは、ひょっとして特許だったりして。
しかし、TINY26が逆さしで動くというのは面白そう。ジョークでやってみようか。 逆さしといえば、SIP9ピンのオペアンプはその対策からリバーシブルな配列 になったというのを聞いたことが。
163 :
774ワット発電中さん :04/12/02 00:12:46 ID:oZ8p2gIi
AT90S8535使ってるんですが、RTCの発振の不安定さに辟易しています。 LCDに表示した時計を動かして半日もすると発振が止まってたり。 それで、メインのクロック(8MHz)から1秒を作ろうとしました。それもどうもうまくいかない。 8MHzはクリスタルを使ってます。 ・TCNT2を8MHzの256分周に ・OCR2に250を設定 ・比較一致割り込み発生のたびに変数を125回インクリメント これで1秒になると思ったんですが、1秒より少し遅いんです。 なんか心当たりある方います?
>>163 割り込み処理への移行やそれからの復帰が0クロックで
可能と考えるのはいかがなものか?
166 :
774ワット発電中さん :04/12/02 00:58:47 ID:L5KNO6mO
復帰は関係ないでしょ。
割り込み発生後、割り込み処理ルーチン内で割り込みクリアするまでの間、
OCR2と比較するカウンタがまわっているかどうかが問題なのでは?
仕様書読んでくれ
>>163
>163 どのくらい遅いの?
メインのクロックがセラロックだったというオチとか?
169 :
774ワット発電中さん :04/12/02 01:34:46 ID:ZPIbb7tU
単に時計の精度についての知識が無い奴だろ。
0から125までカウントしてるとか
>>163 RTCって、外付けのRTCモジュール?
172 :
774ワット発電中さん :04/12/02 03:45:06 ID:5gNiD92O
話題が変わってしまい、すみませんが、 H8の端子でPWMを取り出す「TIOCA0」というのがありますよね。 この端子記号の略なんですが Timer Input Output C???? A???? 0 で、CとAは何の略でしょうか。
>>172 TImerOutputCompareA0
じゃないでしょか?
GRA〜GRDのAね。(違うかも)
174 :
163 :04/12/02 08:41:50 ID:oZ8p2gIi
>>164 割り込みが起こってから時間の変数をインクリメントするまでに必要な時間が
一定(つまり秒処理の量が毎回一定なら)構わないんじゃないかと思ってます。
>>165 割り込み発生ごとにOCR2がリセットされるってコトですかね?
たしかに、変数インクリメント125回をいくつか減らすと1秒にかなり近くなるので、
2回目の割り込み発生以降TCNT2が256になるまでカウントしちゃってるかもしれ
ません。ちょっと見てみます。
>>166 割り込みから次の割り込みまでに処理が終わらないということは無いようです。
>>167 感覚的なんですが、1.1〜1.2秒くらいかかってます。
>>171 AT90S8535は32.768kHzのクリスタルをくっつけるピンが用意されていて、それで
時間を扱うことができるって唱ってます。最近安定しないという記述もどこかで見
ましたが。
>>172 英語版のデータシートからのコピペ
Input capture/output compare A0 TIOCA0
感覚的なんですが、1.1〜1.2秒くらいかかってます。 1分で10秒も遅れるの?
フリーランが一番、 正確だし割り込み処理も簡単になる
>>177 CTC立てておけばOCで折り返すんだからカウンタの再設定をする必要はないと思うが。
>>174 まず、メインのクロックは何でしょう?時計ならセラロックはだめよん
TCNT2+OCR2による比較一致割り込みを使っているようですが、
TCCR2をゼロに戻すのはどこで行っています?
TCCR2のCTC2はセットされていますか?
これがなければ結局フリーラン状態で、1/8M*256*256*125=1.024秒に
なってしまいます。それでも1.1〜1.2秒ってことはないけどなあ。
他の人もいっているけどフリーランの方がいいかも。
256分周で突っ走って、オーバーフロー割り込みで変数を1ずつふやしていって、
31250カウント=122周期+18カウントで1秒とする。
実際には122周期で1秒ということにして、端数管理変数に+18しておく。
端数管理変数が256以上になったら、端数管理変数を-256して、
次周期だけ122+1周期で1秒にするようにする。
周期と端数を変数としておけば、発振子の誤差もある程度プログラムで修正できるよ。
32ppmステップの調整=日差2.7秒単位になる
もうちょっと細かく行きたいなら端数を16倍にした数値で管理すれば
1/16で2ppm/日差0.17秒/月差5秒ステップの調整ができる。
発振子が安定していないと意味ないでしょうけどね。
普通に水晶使った程度だと、そこまで精度は出ないよね 50ppmや100ppm程度のズレはあたりまえだから。
>>181 12.8MHzを外部で3〜4分周すれば、8535の動作クロック許容範囲内になるから、
それを直接XTALピンに入力して8535を動作させ、内部タイマで5〜20mS間隔で
インターバル割込を使うのがいいと思いまつ。
電源断時に、CPUをスリープさせて消費電力をsage、RTC部分のみ電池バックップ
動作させるといった回路設計&使い方をしない限り、あえて32.768kHzを使う必要は
ないでせう。
>>179 問題は、電波時計などを除いて、時計が合っているかどうか、また誤差の量を
ソフトで自動判定できないことですな。
秒調整モードみたいなのを作って、そのモードでボタンSWが押されたら、±30秒
以内の誤差を丸めて時刻を補正するとともに、前回補正した時の日時からの経過
時間(秒数)と、今回実際に補正した秒数を使って誤差の割合を計算して、分周比を
微調整するとかかな。但し、1回の補正操作じゃムリだな。
8535なら似非DTCXOくらいやれると思うけどな。 ADCで温度を測定、温特テーブルから周波数偏差をキャンセルするように PWM出力でバリキャップのバイアスを調整(w
いっそのこと電波時計を作るとかね
185 :
774ワット発電中さん :04/12/02 17:04:52 ID:oEjeh+0W
あと7年くらいでいいなら、テレビ放送のカラーバーストから拾うのも手だよ。
186 :
163,174 :04/12/02 23:35:12 ID:oZ8p2gIi
>>176 先ほど正確に計測したら、実時間で60秒のところ、マイコンのほうは51秒でした。
1分で9秒遅れてる・・・
>>177 ,178
CTC2=1でOCR2に一致すると、比較一致後のCPUクロックでTCNT2をクリアするって
あります。
>>179 メインクロックはクリスタルです。秋月で買った8MHzのもの。セラロックじゃないです。
0に戻すのはTCCR2じゃなく、TCNT2のことでいいですよね?
とすると、CTC2ビット立てで対応しています。
フリーランはやってみようと思いますが、この方法がうまくいかない理由は知りたいと
思っているので、もうちょい悩んでみます。
>>181 ,182
水晶発振器は使うことを考えましたが、手元に部品がないので、今の方法を試したあと
でやってみようと思ってます
まだ解決はしてないですがいろいろ勉強なります。みなさんありがとうございます。
187 :
163,174,186 :04/12/02 23:40:04 ID:oZ8p2gIi
winavrのソースの関連する部分を抜き出してみました。 なんかヘンなところありますかね? int main(void){ ・・・・・ TCCR2 |= 0x06; /*256分周*/ TCNT2 = 0; OCR2 = 250; TCCR2 |= _BV(CTC2); TIMSK |= (_BV(TOIE0) | _BV(OCIE2)); sei(); ・・・・・ } SIGNAL(SIG_OUTPUT_COMPARE2){ static uint8_t count=0; count++; if(count>125){ count=0; if((now>=86399)||(now<0)){ now=0; } else{ now++; } ・・・・・・ }
188 :
187 :04/12/03 00:34:04 ID:/vTpm6DK
いろいろ試したけども、きちんと8MHzで発振してないんじゃないかという思いが 強くなってきました。 試しにOCR2=125でやってみたら、1秒のカウントがちょうどそれまでの半分くら いになったので、割り込みやTCNT2のクリアもきちんと動作していると思われます。 半田付けのときにクリスタルに熱加えすぎると発信周波数が変わったりします? あんまり加熱した覚えはないんですが。
クリスタルのピンにプローブを当てると不安定になることがあるので、ソフトウェアの動作の介在しない方法(PWMとか) でパルスを出して周波数を測ると良いと思われ。 (実はそのクリスタルは偽物だったというオチに1票
>>187 >>120 を無視してんのはわざとですか?(w
125超えたら0に戻すだと126カウントですよ
>>187 アンカー間違えた
>>170 を無視してんのはわざとですか?(w
125超えたら0に戻すだと126カウントですよ
>>191 みんなわかってて、それでも9秒/分もずれる根拠にならないから黙ってると思われ。
CもAVRも詳しくないけど、8MHz/256/256/126=0.9688120Hz 60秒で58.128秒分しか進まないってことでよく一致してるので 250カウントのとこが思いっきりバグって256かうんとになってないか?
>>192 いやあまりにも堂々としたミスなのにいまだ本人は気が付いてないのだから
ほかにももっと大穴が開いてると想像するわけよ(w
>>188 水晶の両端(マイコンのXTAL/EXTAL端子)とGND間に、コンデンサ入れてる?入れてる
ならコンデンサの容量は?実装状態にもよるけど、経験的には8MHz近辺だと、12〜15p
Fあたりが適当だと思うけど。
周波数カウンタかオシロでマイコンの端子を直接見れないの?プローブの入力
容量で発振周波数が変化するから正確な測定はできないけど、1分で9秒もずれる
ほどの影響はないから。
>>194 それは言えるね。
例えばどこかに割り込み禁止状態ですげー長いループ
繰り返すルーチンがあるとか。
>>195 いくら帰還容量が適切でないからってクリスタルが15%もずれて発振するか?
CRじゃないんだから止まっちまうだろう。
それにプローブ当てたきゃバッファ入れればいいじゃん。
>>196 >いくら帰還容量が適切でないからってクリスタルが15%もずれて発振するか?
高周波回路だと条件外れて自励発振してたってのはあるらしいがデジタル回路じゃありえんか(w
>>187 >if((now>=86399)||(now<0)){
now はどう定義してるんだ?
int なら -32768 〜 32767 の値しかとれんぞ!
(unsigned int なら 0 〜 65535)
本当にそのクリスタル8MHzか?ってのが一番あり得るような気がしてきた。
えっと、過去のスレッドでも言われていたが、 8535のRTCは4.0V以上で発振が 不安定になるロットが存在します。Mega8535かMega16に変えてみ。 >198 そういう組み方したらコンパイル時にWarning出るからさすがに気づくと思うが
>>200 Warningって、winavrの場合、ちょっと気がつきにくいかもなー。
そのあとのリンクメッセージが、だらだら続くので、意識してみるようにしないと気がつかない。
>8535のRTCは4.0V以上で発振が不安定になるロットが だからCPUクロックでやってるんだろうが!欲嫁
>>187 >TCCR2 |= 0x06; /*256分周*/
まさかと思うけどこれ以前のTCCR2の下位3bitは確実にゼロにしてるよね?
安全のため、TCCR2=hogehoge|0x06って形がいいと思う。
nowはsigned long(int32_t)つかってますよね?(now<0)がなければunsigned longでもいいけど
(now<0)の意味は何??(now>=86399)がきちんと判定されるなら不要だと思うが。
目的が時計なら、unsigned char sec,min,hourで、60進桁上がりを判定した方が
あとあと楽だと思うなあ。
countが1〜126で126周期・・・なのはガイシュツだね。でもそれで1秒が1.1秒にはならないなあ。
204 :
195 :04/12/03 11:10:26 ID:uzCV5o9d
>>196 通常、マイコンなどのXTAL回路は完全なアナログで、方形波でもないし、振幅もロジ
ックレベルを満たしていないので、XTAL回路に直接バッファを付けることはできない。
また、ロジックIC自体にも10pF程度の入力容量があるし、不安定な発振回路の場合
プローブを当てることによっては発振が止まったり、逆に安定してしまうことが
よくある。
205 :
195 :04/12/03 11:10:55 ID:uzCV5o9d
>>197 水晶の共振特性にもよる。デジタルも高周波も基本的な考え方は変わらない。出所不明
の水晶を使って組んだ発振回路で、負荷容量が適切でない場合、本来の共振周波数の
近くに別のQが高いポイントがあって、本来の発振周波数ではない周波数で安定発振
してしまうことはよくある。
電源投入時は、0Hzから発振が始まるわけで、低い周波数の共振ポイントに引き込ま
れて安定してしまっている可能性がある。
昔はLS-TTLを使ってボーレートジェネレータを作ろうとしてユニバーサル基板に
実装したはいいが、3倍オーバートーン発振してたなんてことがよくあったもんだ。
>>205 夏場はいいけど、寒くなるとオーバートーンで発振して232の通信ができなくなったとか、コンデンサの定数そのままでICをCMOSに変えたらオーバートーン発振したとか結構やったな
振動でケースの中のクリスタルが欠けて周波数が変わったり、クリスタルにゴミが付着して周波数が変わったり、というのもある
もっと昔、FT243のころはねじをはずすと水晶片が取り出せるので、磨き粉で少しずつ薄くして周波数を調整したと言う話もある
今は発振回路内蔵したのを良く使ってる
>>204 8535のデータシート見るとHCゲート1つはつけていいと言うか、外部に引き出すなら
バッファ噛ませろと書いてあるようですが、実際にはだめってこと?
>>207 だから、データシート見ずに思いつきで昔話語ってるんだよ。
今の話題にオーバートーンやTTLがどう関係有るんだ?
そこまで知識があるなら、こうアドバイスすればいいのに↓
データシート上バッファを接続できると有りますが、
ゲート容量によって発振が安定してしまったり、
逆に止まったりすることもあります。
その場合はコンデンサの容量が適切ではありません。
発振していて、なおかつまだ時間が合わないなら
バッファ出力から周波数を調べて、発振子の不具合か
ソフトの不具合かを切り分けられます。
とかな。
209 :
195 :04/12/03 12:34:36 ID:uzCV5o9d
>>206 TTLは入手性や種類の豊富さ、互換性などで、日立とTIが標準だったけど、漏れの
昔居た会社では、三菱製のTTLは他社と特性が違うので、発振回路などには使わ
ないようにって言われていた。
あと、ブルガリア人の友人から共産圏のTTLは性能が悪い(動作マージンが少ない)
と聞いた。
>>207 確かに8535のデータシートにはそう記述があるが、HCなら何でもいいわけでは
ない。HC14などで受けるのは当然だが、配線の引き廻しや長さにも注意が必要。
汚いバラック組みとか論外。同じ8MHzの水晶でも、特性はメーカーによって違う
から、どんな条件でも確実に1個繋げられる保証などどこにもない。
210 :
195 :04/12/03 12:36:02 ID:uzCV5o9d
>>208 は、データシートの参考回路をそのままコピペする厨房エンジニア
まあ素人的にはLEDつないで多重ループでウェイト掛けてLEDピコピコをさせてみて クロックとプログラムから予想できる点滅周期しているかどうかを確認すればいいじゃない〜 ゲートつけてお城、残念!
こんだけツっこんでるのに195は何にもアドバイスできないんだな。 厨君が困ってるんだからコピペから始まって、結果聞いて、実際はどうのこうのだろ 俺につっこむ前に 「配線長くしたりバラックだと浮遊容量の影響があるから気を付けてね。」 くらい書けないか? 知識ひけらかして荒してんじゃねぇよ。(俺も荒らしてるなぁ・・・・) おれは「コピペも出来るエンジニア」だけど、195は「コピペも出来ない老人ボケ」だろ。
>>187 >SIGNAL(SIG_OUTPUT_COMPARE2){
>static uint8_t count=0;
この count って変数は、関数が呼び出される度に0で初期化
される様な気がするんだが、
>>163 >・比較一致割り込み発生のたびに変数を125回インクリメント
>これで1秒になると思ったんですが、1秒より少し遅いんです。
うーむ...現象と合わないねぇ。
>>213 static変数でもそうなるんだっけ?
>>214 すまん。 間違ってたらしい。 ○| ̄|_
ケチケチせずに、全ソース見せろ。 そうでないと、いつまでたっても結論でない。 あと回路図もな!
発振周波数疑うならさ、まず小難しくカウンタとかじゃなくて 特定のポートを反転させるのをループで組んでマシンステート数数えて 期待値かどうか調べろよ、まずは。 って、C言語か。ま、ループの部分くらいは逆アセかけれるだろ。
>>217 全ソースあるなら、シミュレータにかけられますよね。
>>209 >HC14などで受けるのは当然だが
脳味噌、膿んでないか?
XTAL発振回路をなぜシュミットで受けないのか、考えつかんのか?
他にも変なこと書いてるが、デジタルIC使ったこと有る?
220 :
774ワット発電中さん :04/12/03 20:12:06 ID:pVZv/owl
CR発信と勘違いしてる様な気がする。
最近のmegaとかtinyは発振の振幅を設定するオプションがあって デフォルトでは小振幅なので注意した方がいいな。
222 :
774ワット発電中さん :04/12/03 20:46:48 ID:b36lqzE1
>219 ボケ、バカ、カス。 下手に知恵付けるなよ。195みたいに、アカラサマな厨房はスグわかるから 初心者スレ以外では放置でいいよ。
223 :
195 :04/12/03 21:01:45 ID:uzCV5o9d
>>219 ,
>>220 CR発振も、水晶発振も基本は同じです。実は、リアルで発振モジュールしか使っ
た経験しかなくて、水晶で発振させると方形波が出力されると思っていまつか?
パック入りの刺し身がそのまま泳いでいると思っている、魚を捌けないアフォな
主婦と同レベル?
>>221 最近のICは至れり尽くせりで、結果アフォな「園児にあ」が量産されるのでつね。
>>217 解析用に書いたコードがバグる罠。ポートにセットしているどれかの定数定義
(#define)が間違っている可能性もある。
自称非初心者ってどうして性格悪いの?
225 :
195 :04/12/03 21:03:22 ID:uzCV5o9d
>>224 リアルな世界では、誰にも仕事を評価されないから。
>>222 しまった、阿呆にレスすると、ボケ、バカ、カス扱いされるのか!
以後、注意する。
にやり、もだめ?
とよぞう注意報?
228 :
774ワット発電中さん :04/12/03 21:26:56 ID:b36lqzE1
>>226 だって、下手に知恵付けたら、アカラサマには判り辛くなっちゃうじゃん。
刺身のパックがそのまま泳いでいることを知らないようなカマトトだから
ちっとやそっとでは付け焼刃にもならないだろうけどね。
GCCをべステクでDLしたら3048fのターゲットがありませんでした。 すごくショックで、HPをよくみると8月24日にバージョンアップして 3048を削除したとのこと。 GCCでコンパイルしたいのですが、誰か助けて・・・
>>228 最近、馬鹿を指摘すると、何故か3,4レスぐらい、別IDで馬鹿レスがフォローしてくるので、
ついつい。
まあ、わかってないようだから、上塗りをさせただけで、「実害」は無かったということで。
231 :
195 :04/12/03 22:00:38 ID:uzCV5o9d
>>229 C/C++自体は、特定のCPU周辺に依存するものではないから、定義ファイルと、
スタートアップファイルを自分で用意すれば使えるだろ。
以前は、定義ファイルはルネサスのサイトにあったが、今もあるかどうか知らん。
手間を惜しまなければ、自分でも作れるだろう。
>>230 面倒だから放置していたが、おおかた発振振幅が少ないから、発振振幅がシュ
ミット幅を越えないとでも言いたいんだろう。
きっと、脳内知識だけで、シュミットで発振回路を作った経験すらないんだろう
なぁ。脊髄反射で、発振回路はUHC04とかな。
>>222 や
>>226 みたいな低レベルが偉そうな顔している会社って、感化された同類
が量産されて企業文化を作っていくんだろうな。
お前たちもう寝なさい
今日は賑わってるね。 つまりあの方は、 @AT90SではXTALの出力にバッファが接続できることを知らなくて、 後であわててデータシート読んだ。そしてTinyAVRでは振幅が小さくなって バッファが接続できなくなってることをまだ知らない。 Aプローブの容量くらいでは影響ないといいながら、バッファの入力容量はダメと言う分裂症。 Bマイコンをコピペかつバラックで組んでまともに動かせなかった。以来データシートの参考回路をまったく信用しない。 CTTL全盛時代からの老練な経験があるのに他人にまともなアドバイスが出来ない。 Dリアルな世界では誰にも仕事を評価されない。 E自分の低レベルを知らず社内では偉そうな顔をしてる。 って事で良いか?
>>234 あわてて軟弱和訳PDF見てみたが、
AT90S8535
注: 外部デバイス用クロックとしてMCU発振器を使用するとき、
図で示されるようにHCバッファが接続されるべきです。
TINY11
注: 外部デバイス用クロックとしてMCU発振器を使用するときは、
図で示されるようにHCバッファが接続されるべきです。
と書いてあって、TINYでもバッファが使えるみたいなんですが?
>>234 古いめのTinyはいけるよ。
最近話題のTiny2313のシート読んでみな。どこにも書いてないから。
英文しかないけど「90S2313からTiny2313へ乗り換えるにあたって」
みたいなPDFがあって、そこに「出来なくなりました」って書いてある。
で、実際に試したらホントにダメだった。
俺の書き方も悪かったね。ゴメンゴメン。 でね、Tiny2313にはIOポートの1本からクロックを出力するオプションが設けられてる。
連続カキコごめんなさい。 ふと思い出してDigi-Key見たらDIPパッケージが在庫復活してるね。 今度は何日で売り切れることやら(w
>>234 =
>>236 アンカー間違えるほど必死だな。(w墓穴掘って、後出しの理由付け見苦しい。
>>239 (´・ω・`)ショボーン
だから書き方悪かったってばぁ・・・・・・アンカーはちょっとしたミスじゃん。
昨日遅くまでココにいたから眠いんだよ。
もう寝るから許して。
>195って、死んだ魚は見たことがあるけど、泳いでる姿は 見たことが無いという類の人っぽいね。
>>236 あ、ほんとだ。
http://www.atmel.com/dyn/resources/prod_documents/doc4298.pdf The crystal Oscillator in AT90S2313 is capable of driving an additional clock buffer from
the XTAL2 output. The ATtiny2313 does not have a rail-to-rail swing on oscillator pins
and can therefore not be used for this purpose. Note however that the new Clock Out
(CKOUT) feature could alternatively be used to drive an additional clock buffer. CKOUT
is located on PD2, which also is used for the External Interrupt 0.
>>238 あ、ほんとだ。あと102個だ。256円だ。
そういえば、PIC10F200Tの6ピンPICって何に使うんだろ?
和訳PDFを見るのはヘッタレ。 ....と逝ってみるテスト。 良い和訳は原文の間違えが修正されてることもあって、一概にダメとも言えないが。
>>244 まーそー言わないで(w
前から思っているんですが、日本語と英語と同じ速度で読める場合、日本語の方が「漢字」というインデックスがあるので
速読に向いていると思うんですが、どうでしょか?
Atmega88はまだDigi-keyで入手できないですねー。
>>236 そこまでする価値があるかどうかは別だが、『入力C結合+HCU04で構成した反転
バッファ』でTTL/CMOSレベルに増幅してやれば、無理やりクロックを取り出せ
ないこともないだろうな。参考回路のコピペしかできない
>>212 などにはまず
できない芸当だけどね。
>>243 漏れが見ている間に100個→96個に減った。このスレの連中は、セコイやつが多いな。
だが、いずれにしろ引き出しの肥やしになるだけだろう。
247 :
187 :04/12/04 01:18:15 ID:OmhEkXSo
今週後半仕事が忙しくて、検証の時間があんまり取れないんですが・・・
ホントたくさんの方にアドバイスしてもらっててありがたき幸せって感じです。
今日はヘトヘトなのでとりあえずレスだけで、明日検証してみます。
>>189 クリスタルは多分間違いないと思う。
背中に「R0800N34」って書いてます。
>>191 170を敢えて無視してた訳ではなく、見直しても効果が薄いと思ったので
反応するの忘れてました。ごめんなさい
>>170 125カウントを間違えて126にしてるのは確かです。
>>195 コンデンサは22pFを入れてます。秋月の店員に相談したら22pFくらいで
いいって言われたんでそのまま。
XTAL1 XTAL2
| |
|--|□|--|
= =
| |
GND GND
オシロはもっとりません。なにせマイコンと電子工作はじめたのが9月くらい
なんで、機材があまり充実してませんで・・・
ACの電圧と周波数測れるテスターは持ってるんですが、それで測れるかな。
明日試してみまする。
>>196 main()の最初の各種初期化の場所以外で割り込み禁止は一切かけてません。
>>198 nowはglobalのuint32_tです。
現在の時刻を刻んだり参照したりするために用意してます。
>>201 コンパイル時、特にwarningは出てませんでした。自分なりに気を付けて見
てます。
>>203 いろいろいじっているときに、TCCR2の値をLCDに表示して様子を見てまし
たが、下位3bitは0でした。ただ、明示的に0と設定していたわけではないの
でそれはソースに追加することにしてみます。
あと、now<0は、プログラムの別の部分でポインタ制御をミスっててnowに正
しい値が入らなかったときのトラブル対処試行錯誤の残滓です。今は無くて
も正常に動きます。
hour,min,secで分けた方が楽かもしれないと、今は思ってます。今後の課題。
つづく
248 :
187 :04/12/04 01:28:12 ID:OmhEkXSo
>>205 >の水晶を使って組んだ発振回路で、負荷容量が適切でない場合、本来の共振周波数の
>近くに別のQが高いポイントがあって、本来の発振周波数ではない周波数で安定発振
>してしまうことはよくある。
へぇー、そんなことがあるんですか。コンデンサの容量を変えて試してみることに
してみます。
>>206 >もっと昔、FT243のころはねじをはずすと水晶片が取り出せるので、磨き粉で少しずつ薄くして周波数を調整したと言う話もある
↑これ、すごいっすね。やってる場面を想像すると・・・すごく面白そう。
>>217 C言語は5年ほどやってたんですが(といっても10年前だけど)アセンブラは皆目
わかりまへん・・・
マシンステート数?? 言葉の意味から理解できないので調べてみまする・・・
眠い、今日はもう寝ます。
>>248 WinAVRをProgrammers Notepadで書いているなら、MFile のDebugFormatを、AVR-ext-Coffにしておけば、
cofファイルを出力してくれるので、これをAVRStudioで開いてAVRSimlatorでシミュレーションすれば、
マシンサイクルを出してくれます。
250 :
774ワット発電中さん :04/12/04 06:38:03 ID:Yfga6fyW
>>233 × 陛下じゃないのに偉そうなこと言うな
○ 誰このジジイ?
>>247 >nowはglobalのuint32_tです。
おーい、そんな変数で(now<0)なんて・・・ほんとにコンパイラは警告しなかったの??
>>251 #include <inttypes.h>
int main(void)
{
uint32_t now;
now = -1;
if ( now < 0){
now = 0;
}
}
をavr-gcc (GCC) 3.4.1でコンパイルしてみましたが、
avr-gcc -c -mmcu=atmega8 -I. -g -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums
-Wall -Wstrict-prototypes -Wa,-adhlns=test.lst -std=gnu99 -Wp,-M,-MP,-MT,test.o,-MF,.dep/test.o.d test.c -o test.o
ウォーニングは出ませんみたいです
253 :
234 :04/12/04 14:39:32 ID:rll7PvmC
俺が寝てる間に2313の在庫が66個になってるな。 自称セコくない「あの方」が30個買ったかな? 今度はコピペでもちゃんと動くといいね。(w
>>248 217だが。見当つかないなら、話がややこしくなるだけっぽいから忘れてくれ。
>>252 まじっすか(AAry
これはまずはソース全文上げもらってみんなでlintしたほうがw
257 :
195 :04/12/04 18:04:12 ID:HaZaHEL6
>>253 粘着コピペ房痛過ぎ。お正月は買った2個のTinyでお勉強ですか?いつかコピペ房を
卒業できるといいね。
案外、
>>253 は虎戯に記事連載しているヤツだったりしてな。いやはや、自分の
視点でしかモノを見られない人間の末路哀れ、残念!
>>252 >>256 この場合、符号なし整数(必ず0以上の値)を0未満かどうか比較しているif文が
成立することはないというだけで、論理的な間違いではあっても文法上にはエラー
ではない。で、親切で警告メッセージを出すかどうかはコンパイラ依存で言語
仕様じゃないから当然の結果でしょう。
警告を出すべきではという点では、キャストなしで、符号なし整数に負の値を
代入している『now = -1;』の行も同様のはず。
>>257 まあ親切の範囲内だと思うけど、意外だったなあ。
以前for()文で成立しない条件文でエラーが出たような気もしたんだけど
別の言語の記憶違いだったのかな?
このnow<0は本当に成立しないんだろうか?
まさかnowが勝手にsignedにされて、0x80000000を越えたら成立しちゃうとか(^^;)
68年ちょっと動かすと確かめられる(w
あとでアセンブルリスト見てみようっと。
やっぱり面倒でもcastしないと怒られる(warning)仕様の方がいいなあ。
C言語でそれはぬるま湯ですか?
>>257 他人を馬鹿呼ばわりする椰子は信用できない。
_| ̄|(・∀・)
260 :
234 :04/12/04 19:41:19 ID:rll7PvmC
>お正月は買った2個のTinyでお勉強ですか? いや、その頃に今出荷中の商品に乗ってるTiny2313かその上位マイコンに バグが出てドタバタしてると思う(w そうでなけりゃARMのお勉強してるかな? 孤独な窓際40代と違って現役で量産品開発してる人間は忙しいんだよ。
>>247 取り敢えず原因の切り分け(絞込み)を行った方がいいよ。
>ACの電圧と周波数測れるテスターは持ってるんですが、それで測れるかな。
という事なので、
>>187 の
>SIGNAL(SIG_OUTPUT_COMPARE2){
>static uint8_t count=0;
−☆−
>count++;
☆の箇所に、関数が呼び出される度に、どこかの出力ポートを
トグルする(0→1→0→1→0→1・・・)処理を追加して、そのポート
の周波数を測って味噌。
源発振とカウンタの設定に問題が無ければ63Hzになる筈。
262 :
195 :04/12/04 20:11:38 ID:HaZaHEL6
>>258 言いたい内容がよくわからんけど、intだろうがlongだろうが、「signed」と
「unsigned」は、中身を符号付きか符号無しか扱うかの違いだけで、実体は
同じものだぞ。
面倒なんでcharで説明するが、0xffは「signed」なら「-1」だが「unsigned」
なら「255」だ。
コンパイラは、「unsigned」な値の比較に対しては、carry(bollow)フラグのみ
による条件分岐命令を、「signed」な値の比較に対しては、carry(bollow)フラグ
だけでなく、signフラグを含めた条件分岐命令を使ったコードを生成する。
「unsigned」の値にMSB(最上位ビット)が'1'にセットされた値になっても、
コンパイラのバグか、キャストで一時的に「signed」としない限り、その値が
負の値と扱われることはない。
> やっぱり面倒でもcastしないと怒られる(warning)仕様の方がいいなあ。
KPIT TOOLSのH8用gccは警告が出たような気がする。gccといっても互換性に
疑問が残るので、あまりそれをあてにしたコーディングはしない方がいい
でしょうな。
VC++4.xなんぞ、(関数を抜けたら破棄される)ローカル変数への参照を返すコード
を書いても警告が出なかった。
263 :
195 :04/12/04 20:14:00 ID:HaZaHEL6
>>260 てっきり、誰かにかまってほしい孤独なヒココモリ君だと思ってましたが...
脳内で量産するのはリビドー?Tinyマイコンの次はARMのコピペですか?
大変ですな〜。
>>258 そういうのはコンパイラではなくlintの仕事では
265 :
258 :04/12/04 23:17:15 ID:4Q23KLV/
>>262 実体は同じなのは当然わかってるよん。
絶対成立しない・必ず成立する条件式にWarning出したらwhile(1){}もWarningだし
http://www9.plala.or.jp/sgwr-t/detail/TypeConversion.html now=-1ってのはいちおう0xFFFFと解釈される根拠もあるんだね。勘違いしてた。
ちなみにwinavrに、
unsigned int now,now2;
now=TCNT1;
if (now<0)
{
TCNT1=now;
}
ってのを入れてみたら、やっぱりifブロックは絶対不成立として丸ごと無視されてしまっていました。
ところが、(now<-1)にすると、-1が0xFFFFに解釈されるためかこうなった・・・
296:test03.c **** if (now<-1)
631 .LM64:
632 0248 2FEF ldi r18,hi8(-1)
633 024a 8F3F cpi r24,lo8(-1)
634 024c 9207 cpc r25,r18
635 024e 11F0 breq .L22
297:test03.c **** {
0xFFFFの時だけ不成立ってことですね。
nowをsigned intにすると最後のbreqがbrgeに変化した。0と正の数で不成立に変わる訳か。
気を付けないと大変なんだな。
>>264 というわけでコンパイラにチェックしろという無知なる要望は撤回しま〜す
>>265 ありゃカットペースト間違いで意味分からん文章になってる。
絶対成立しない・必ず成立する条件式にWarning出したらwhile(1){}もWarningだし
やっぱり(now<0)を跳ねろってのは無理ですね。
267 :
248 :04/12/05 19:14:40 ID:cH8WwLfw
>>249 開発環境は秀丸とmakeコマンドのみで、studioはインストールしただけで
使い方がわかんない状態でした。
その方法でstudioでシミュレーションできるようになりました。ホント助かり
ました。
で、今日、しばらくハマって調べてみてましたが・・・原因が判明しました。
SIGNAL(SIG_OUTPUT_COMPARE2)
で125回に1回nowをインクリしたあと、lcd制御関係の処理を入れてました
が(時計表示とか温度表示の更新処理)、これの処理に190msも要して
いました。要は125回に1回ごとに次の比較一致割り込みまでに、処理が
終わりきってませんでした・・・
なので、
>>174 で書いてた、
>割り込みから次の割り込みまでに処理が終わらないということは無いようです。
↑これがウソでした。ごめんなさい。
時間のかかっていた処理をすべて省いたたあと、
・main()の CTC2=250 → CTC2=249
・SIGNAL(SIG_OUTPUT_COMPARE2)の count>125 → count>=125
の変更を追加したところ、シミュレータ上ではぴったり1000msでnow++が
実行されるようになりました。
ありがとうございます。
ただ、実機に書き込んで実行したところ、ちょっと早く進むようです。
ざっと計ったところ、1時間で15秒くらい進むようです。
コンデンサの容量でもいじってみようかしら・・・
268 :
248 :04/12/05 19:20:44 ID:cH8WwLfw
>>251 他の方も書いてますが、warningは出ません。
>>261 試してみましたが、うちのテスターではどうもきちんと測定できない
みたいで・・・
テスターの片方を8535の出力ピンに、もう片方をGNDやVccの1/2の
電圧にしたり、いろいろ試しましたが周波数うまく出てこないです。
シミュレータ上はきちんとON/OFFを繰り返してますが・・・
測定周波数のMAXは4MHz。機種はMETEXのM-3270Dですけどね。
最後に水晶の周波数が8.033MHzだったというおちだったりして
270 :
774ワット発電中さん :04/12/05 20:50:18 ID:iVTO0BT4
残念ながら最後の落ちはOCR2=249でしょう。 旧T/Cのプリスケーラ値≠1は比較一致動作が異なりますので。 (本来はエラッタ相当) この値では1秒が996msで、1時間に14.4秒進むでしょう。
271 :
267 :04/12/05 21:29:00 ID:cH8WwLfw
記述ミスありました
× CTC2=250 → CTC2=249
○ OCR2=250 → OCR2=249
でした。
>>270 仕様書(といっても日本語訳のもの)を見ると、250で正しく動作すると解釈
できたので、当初はOCR2=250としていました。
シミュレータを使うとOCR2=249としたときに、正しいタイミングとなっていた
ので249と変えていました。
仕様書の記述と一致していなくて疑問に感じていました。
今、時刻のずれを置き時計と並べて測定していたところですが、実時間20分
で5秒程度進んでいましたので、指摘の一時間あたり14.4秒にかなり近いよう
です。250にして試してみます。
ありがとうございます。
>>267 割り込み処理部に長い時間かけてはイケナイっていうのは基本中の(ry
あと、シミュレータは、必ずしも完璧じゃなくて、タイマー関係でいろいろバグ(というか仕様というか)があるようです。
274 :
271 :04/12/05 21:54:08 ID:cH8WwLfw
えー、原因はOCR2=250でした。 20分ほどまわしてますが、目(LCD)と音(置き時計)で確認する限りずれは 発生しません。ぴったりです。 総括すると、 ・割込関数に重い処理を入れていた ・比較一致の発生タイミングがシミュレータと仕様書で違っていた です。 大変お騒がせしました。おかげさまで解決しました。マイコン初心者なんで 随分勉強になりました。 どうもありがとうございまする。 今日ずっとこれやってて、そろそろ嫁の目が恐くなってきたので今日は終わ ります。
275 :
166 :04/12/05 22:24:05 ID:LrohCTTh
>>267 ,274
おめでとう。
>>187 の最後の・・・は気にはなってたのですが、自力で解決しましたね。
この辺のところを一度やっておかないと、システム設計は難しいですね。
私の周りにも「よし、じゃあ2μ秒毎に割り込みをかけよう!」などと言う人がいましたw
ちなみに、割り込みフラグのクリアは割り込み処理ルーチンに飛んだとき、
自動的に行われるようですね。勉強になりました。(もう設計してないけど)
276 :
274 :04/12/06 23:46:02 ID:TwTGimLu
>>275 いやいや、アドバイスどうもありがとござんす。
自力というか、今回は教えてもらったAVRStudioが使えるようになったんで
解決できたって感じですかね。あのツール、すばらしいです。
AVR関連の書籍、もっとたくさんあってもいいと思うんですけどねぇ。
>>276 そもそもAVRStudioを使わずに、どうやって書き込みしているんですか?
ちょっと気になったもんで。
278 :
276 :04/12/07 00:59:51 ID:zZI0EI9Q
財務省をソープで働かせて金作れ!!
売り物にならないから、個人の退蔵品になったんだろが
281 :
初心者 :04/12/07 17:46:02 ID:Sn2kYPfB
先輩方助けて下され・・ 秋月のTiny26Lの件で AVRISPを使い「リセットピンをIOピンして使う」という設定にヒューズビットを書換えた 当然シリアルプログラミングでは2度と元に戻せなくなって 秋月のライタを引張り出したが良く読むとシリアルプログラムだったので使えない STK500しか無いと思い専用ケーブルを製作したが動作しない STK500でTiny26Lにパラレル書込みしたいのだが、結線を教えて欲しいのです。 あちこちで情報を集めるが回答が全部異なるという珍現象がおこり 全部試したが動作しない(チップを認識しない) となたか日常的に使っておられる方、お助け下さい。
>>281 正解は、
秋月に行って、もう一個買ってくる
>>280 ソープで働かせるのは無理なので、腎臓売らせました
>>281 STK500の説明書に全部書いてあるはずだが?
最新版をアトメルのサイトから拾ってこい。
>>284 STK500の、その、パラレルプログラミングのところ、
わたしゃ読むのにメゲた。わけわからん。
286 :
初心者 :04/12/08 01:14:48 ID:KfB5RyxV
>282 Tiny28Lは10個買ったので、問題の26Lを捨てれば良いのですが 今後の為に是非知りたいというか STK500の取り説どおりケーブル接続したのに動かないのに腹が立つ
287 :
初心者 :04/12/08 02:55:04 ID:KfB5RyxV
ATMELのSTK500の原文を見に行ったらTiny26が全く登場しないとは いったいどゆこと?
289 :
初心者 :04/12/08 12:06:56 ID:KfB5RyxV
>288 これも当然見たけど Tiny26登場せずだったが、どこに載ってますか?
>>289 AVRSTUDIO4.10のSTK500用helpに載っていたよ。
heroさんとこの日本語版もあり。
STK500.CHM (473KB) 4.10J0 04/9/5 STK500スタータ キットの日本語版ヘルプ ファイルです。
の、ハードウェア→ジャンパ部→ATTiny26高電圧プログラミング
291 :
初心者 :04/12/08 13:41:31 ID:KfB5RyxV
>290 ありがとう、確かに手元の取り説と配線が違う これから確かめてみます。
294 :
初心者 :04/12/08 16:38:40 ID:KfB5RyxV
皆さんありがとうございました。 結局、最新版スタジオ4をダウンロード・再インストールし ヘルプ→ツールヘルプ→STK500と追いかけてやっとこさ結線図が判明し 動作OKでした。 他の英文のSTK500ユーザガイド・日本語のSTK500ユーザガイド・STK500ヘルプ・Studio4ヘルプともが 違っていて、唯一上のものが動作したわけです。
>>293 激しくガイシュツだと思ったが。
同じURL4つも並べるとは、サンハヤトかルネサスの方ですか?
でも、20pinでフラッシュ16K/EEPROM2Kってのはちょっとは面白いかも。
いろんな表示パターンを保存して表示させるとか。
>>293 …正直、今更感が漂うな…がいしゅつだしな…。
中身がSH3-DSPだったら激しく欲しいわけだが。
297 :
774ワット発電中さん :04/12/09 03:46:25 ID:VRYXMU48
先輩方、悩み相談にのっていただけませんか。 H8で、Cでプログラムを組むとき、スタートアップルーチンというのを アセンブラで書くのですが(とは言っても、コンパイラに添付の例に少し手を加えるだけ) これに関しての疑問です。 このスタートアップルーチンに書く主な内容は、 ・SCIの設定 ・バスコントローラ関係の設定 ・DDRの設定、ほか ですが、 これらの設定は、main()の先頭で設定できるものばかりですよね? 例えば、DDRは、reset後はポートは入力なので、main()の先頭で、 DRの値を書き込んでから出力設定にすればいいと思うのです。 SCIの設定も同様にmain()の先頭で可能ですし。 同様にバスコントローラの設定でさえ....。 そうなると、スタートアップルーチンに書くべき(書かなければならない)内容は 何でしょうか? このあたりの事情を教えて頂けないでしょうか? (イエローソフトのCコンパイラを使用しています)
スタートアップのテンプレート見て必要ないと思ったならいいじゃん
>>297 バスコントローラ設定は、スタックの位置(っていうかメモリの扱い方)によっては後に出来ないだろ…。
外部のDRAM領域にスタックフレームを設定したくなったらどうするんだ?
まぁ他のI/Oポート初期設定に関しては流儀によるから何ともいえないけど。
>297 まず必須なのは、main関数にgotoする部分。コレがないと絶対ムリ。 外付けメモリ関連については、そこをスタック領域なんかに指定していなければ 後から設定しても大丈夫だと思う。 SCIの設定は、YellowScopeを使うならスタートアップルーチンで設定しておくべきかと。
>>297 あらゆるH8に当てはまるかどうかしらないけど、ROMで動かすならリセット直後
にスタックポインタの設定が必須。
あと大抵はdataセグメントの初期化とbssセグメントのクリアもCのコードを呼ぶ前に
アセンブラ部分で書いておく必要がある。
302 :
774ワット発電中さん :04/12/09 14:33:57 ID:7ZtrLyqK
297です。 みなさん、ありがとうございました。 だいたいの感じがつかめてきました。 リセット後、CPUが動作するのに必要な部分は、スタートアップに 記述する必要があるんですね。 ・main()の先頭 ・バスコントローラの指定 ・スタック領域の指定 ・セグメントの指定 (イエローのコンパイラだと、この2つは統合環境の中で 割り当てを指定する部分がありますので、 ここでやれば良いですね) では、スタートアップに記述するのは、以上の部分にします。 添付のテンプレートでは、バスコントローラの設定の部分で 関係するポートのDDRのみ設定をするみたいなんですが、 他の部分のDDRはCのソース上に書いていて、ポート設定を あちこちでやるのがいやだったんです。 ちょっと試してみます。ありがとうございました。
>>302 >リセット後、CPUが動作するのに必要な部分は、スタートアップに
>記述する必要があるんですね。
う〜ん。
必要な事はC言語が動くための環境作り。
その為、スタックを設定して関数を呼び出せるようにする事(ユーザーの
メモリモデルに合わせて変更)や、文字列等の定数初期化(ここら辺は
テンプレートに書いてある)が本当に最低限。
追加で、ユーザーによってはprintf(),scanf()関数等で液晶やシリアルポート等を
利用する為にごちゃごちゃ追加とかまぁ色々。
304 :
774ワット発電中さん :04/12/09 20:37:29 ID:aCpNyZ7B
297です。 >追加で、ユーザーによってはprintf(),scanf()関数等で液晶やシリアルポート等を >利用する為にごちゃごちゃ追加とかまぁ色々。 これらも、Cが走り出してからでも出来そうな気もするんですが どうでしょうか。 みなさんのコメントを読んで、 「コンパイラがコンパイル、リンクするときに必要な情報を記述する」のかな、 とも思ったのですが、これも変でしょうか。 イエローのコンパイラに限らず、一般的にスタートアップルーチンといのを 書くものなのでしょうか?
>>304 できるということと望ましいと言うことは異なると思うんです。
もしほとんどのプログラムで決まり切った初期化ルーチンがあるなら
それはmain()内に書かなくてもよい方が書きやすくて良いでしょう。
main()内でやるとしてもMPU毎のRAMの位置(スタック位置)、割り込みベクタ位置など
設定するものが多数あります。それをもしMPU固有の別ファイルで解決するなら
これら最低限・共通の初期化もそこでやってしまえというのは自然な流れではないでしょうか。
>304 PCなんかの上でCを使ってきた人からすると、 main()の中で基本入出力のためのI/Oの初期化をするという 習慣が無いから、最低限のI/Oはすぐできるようにという配慮 でそうしているんじゃいかという気がするけど、違うかな?
>「コンパイラがコンパイル、リンクするときに必要な情報を記述する」のかな、 >とも思ったのですが、これも変でしょうか。 すげ〜変
>>304 >これらも、Cが走り出してからでも出来そうな気もするんですが
そこら辺は流儀や書き方の問題。
それで構わないと思ったなら自信を持ってやれば良いのだ。
fprintf等関数移植の手間をなるべく減らす為にスタートアップ内で
記述した方が楽かもとか、どーせレジスタへの定数設定だけだったら
アセンブラでやっても手間かからないかもとか、なるべくC言語上で
書いた方が見やすくなるかもとか、まぁ色々な考え方があるってだけの事さ。
やっと、Digi-KeyにATMega88が入荷! と思ったら、ATMEGA88-20MI(32-MLF)orz さらに、ATMega48-20PIの在庫があと、38個。まぁ補充されるだろうけど。 ATMega8は2〜3000個あるので、大丈夫みたいです。
>>309 mega168は、売ってないんですね(´・ω・`)ショボーン
どこに売っているんだろう?
>TQFPパッケージじゃんそれ >自作には使えねやつだよ ヘッタレ。根性ではんだ付け汁!
E8エミュレーターってどこで売ってるんでしょうか。 ずいぶん検索しましたが見つかりません。アキバで売っている 店を教えてください。
>>314 ルネサスの所に代理店載ってなかったっけ?と思ったらE7だけか。
無難にサンハヤトから通販じゃないかな。
316 :
774ワット発電中さん :04/12/12 17:55:35 ID:npWwgYy1
>>311 DebugWireな。Reset端子だけでデバッグできるから、
他のポートを潰さない。理想的。
317 :
774ワット発電中さん :04/12/13 00:33:11 ID:4+IBSpKI
>>312 32pin0.8mmピッチTQFP程度ど〜って事ねぇだろ…と思ったが
TQFPじゃなくてMLF(MO-220)じゃねーか…OTZ
318 :
317 :04/12/13 00:34:16 ID:4+IBSpKI
と思ったら、やっぱりTQFPかヨ!
>>315 ありがとうございます。検討してみます。
320 :
774ワット発電中さん :04/12/13 20:24:53 ID:amKEe3rL
orz
322 :
774ワット発電中さん :04/12/15 18:29:17 ID:0R/SXCfP
sbitを詳しく説明してあるページ無いでしょうか? 定義の仕方が良く分りません。 sbit EA = 0xAF; という定義があってもビットアサインを見ると、 EAはBIT7なんです。 なんで0xAFになるんでしょうか?
323 :
322 :04/12/15 18:42:12 ID:0R/SXCfP
コンパイラのマニュアルに載ってました!! 英文マニュアルなんで理解30%ですが、 IEレジスタ(0xA8)のBit7にアサインされているEAビットにアクセスするには、 0xA8+7で0xAFになるって事で良いんですよね?
324 :
774ワット発電中さん :04/12/15 20:39:13 ID:ZAfFybPv
何の事いってんのかさっぱりワカンネ どの石用でベンダーはどこで言語は何なのさ
H8/300Hシリーズの3.3V動作品って 個人じゃ手に入んないのかなあ… 3.3V非対応のものを無理矢理3.3Vで動かす ってのは別にして。 AVRの3.3V動作品ならDigi-Keyで買えるんだけどなー。
AVR+WinAVRなんですけど、 たとえばタイマ0で数ms毎に64x16程度のLEDアレーをダイナミック点灯したいけど、 ポートが足りなくてシフトレジスタICに頼りたい、しかし他の割り込みの都合もあり、 64bitのシリアル送信はちょっと時間掛かりすぎ、なんて場合、 タイマIC内で自分自身以外の他の割り込みを許可にしちゃっても スタックさえ足りれば無問題でしょうか?
多重割り込みの管理がちゃんとできてれば無紋台
>>328 ありがとん。
誤字訂正
× タイマIC内で自分自身以外の他の割り込みを許可にしちゃっても
○ タイマ割り込み内で自分自身以外の他の割り込みを許可にしちゃっても
>>327 ずっと昔、1MHzの6800系8bit-CPUで2mS間隔で割り込みを掛けて、ソフトウェア
制御でダイナミック点灯したけど、問題なく動いたよ。
どのAVRか判らんけど、ほとんどの命令が1クロック動作で完了してクロックも早いから
問題ないだろう。それより、64x16ドットだと1面分のデータで128バイトのRAM
を使うけど、フォント格納のROMとか含めて容量足りるのか?
タイマ割込中に他の割り込みを許可するのはいいが、タイマ割込と多重割込の
処理時間の合計が、タイマ割込周期を越えないようにしないと破綻するぞ。
こういう場合、タイマ割込ルーチンではフラグを立てて戻るだけにして、時間が
掛かる実際のI/O処理は、メインルーチンで行なった方がよいと思われ。
>>330 ありがとさんです。予定デバイスはまだ決めていませんでした。
まあたぶんmega8になると思いますが。
処理時間≪タイマ間隔 は了解です。
メインでやる場合ですが、これだとタイマ割り込み許可はせず、
割り込み許可フラグだけメインからポーリング監視みたいな方法でもいけますか?
たとえばTIFRのbit(TOV0)が立ったらクリア(1を書き込み)して、処理を行うとか。
332 :
774ワット発電中さん :04/12/19 04:03:53 ID:eu4ENo7E
みなさん、一般論ですが、教えてください。 Cでプログラムを記述するとき、ヘッダファイルをincludeしますよね。 このヘッダファイルには、いったい何を書くべきなのでしょうか? ていうか、何を書いていますか? というのは、今Cでプログラム書いてるんですが、 「なんでヘッダファイルなんてあるのか? どうせ組み込むんだから 全部xxx.cでいいのでは?」と思ったんです。 今は、わけがわからないままxxxx.hとしてincludeしています。 また、xxx.hの中にも、stdlib.hやstring.hなどをincludeする人もいます。 こうなると、メインソースに書くxxx.hを、1つだけにしたいのかな、とも 思ってしまいます。 私が、今xxxx.hに入れている内容は、 本に載っているようにxxx.hファイル #include "stdlib.h"とか"h8_3048.h" 数値のデファイン #define hoge 10 グローバル変数宣言 unsigned char hogehoge; 本当にこれでいいのか、全然自信がありません。 また、自分で作った関数も、どこかに別ファイルにして、#includeしたいのですが そうしていいものか、私のソースを人が見たときにに笑われてしまわないか とても不安です。こういった初心者の「Cソースの書き方,作法」みたいな 本ってあるのでしょうか?
典型的な最近の子だな ろくに本も探さなければ、たとえ買っても眺めるだけで読まないし 人 に 聞 け ば な ん と か な る と 思 っ て や が る
まあまあみんな落ち着け
>>332 も折角一般論に興味があるんなら、もちょっと根底からやってみろや。
とりあえずこの辺から読め 「ソフトウェア作法」「プログラム書法」
>332 まずはそのインクルードファイルの中身を覗いてみることをお勧めする
337 :
774ワット発電中さん :04/12/19 10:47:29 ID:uFIL7oKS
>>332 私は最近AVRを始めCを使うようになった、本職はDOS上のFORTHなので関数定義してmainで締めるところは同じ。
だからCの参考書とかを読まずともすんなり入れたが、*.hと*.cの意味がわからず混乱した。
*.hの意味はとりあえず関数を仮定義して、*.cで本定義するものだと理解した
だったら最初から本定義すれば、ということで*.hを無くし*.cだけにしてincludeした、
ライブラリの中身を改造する時も*.cだけ触ればよいし簡単だった。
何より理解しやすくなった。
その筋の「プログラム書法」などより自己流で骨までしゃぶってみてはいかが
>>337 >>332 なんかその理解も変だなあ。
とりあえず*.hはあくまでインクルードされるヘッダファイル。
本文内(*.c)ではなくインクルードファイルにするのは何故か?
ってところから考えてはいかが?
ソースがすっきりするって問題もあるけど、インクルードの
一番のメリットは複数のプログラムと共有化できるってことでしょう。
ライブラリ内では関数仮定義は確かに必要ないけど、
呼び出し側では必要だし、他にも#defineによる定数、マクロ定義など
ライブラリと呼び出し側で共通にしたい設定がある。
それに加えてそのライブラリを使用するプログラムが複数あれば
共用可能なのでこれも楽。
だから、ラクできると思うなら使えばいいし、ラクできないと思うなら
使わなければいいと思う。
>>332 の疑問はある意味もっともだと思う。
ライブラリなし、ミニマイコン程度のプログラミングならプログラムを
分割する必要もないし、ヘッダファイルも必要ない場合もあろう。
実際、ヘッダファイルという概念のないプログラミング言語もいくらでもある。
ヘッダファイルにわけたり、プログラムを分離したり、ライブラリ化するなんて
理由は大きなプログラムを書いたり、複数人でプロジェクトを組んだりして
作成し始めれば自ずと分かってくる。っていうかやらないとやってられない。
ある程度の規模の他人の作ったプログラムソースを探してながめてみればいい。
ひとつだけ単純な例を挙げておこう。
マイコン特有のレジスタアドレスで説明しようか。
#define TIMERA 0x30 とか数字ではなく定義した方がソースが見やすいが、
これをいちいちソースに書くかな?コピペするとしても手間がいる。
おおかたは既に記述しているreg.hがあって#include reg.hすればそれですむ。
さらにいえば同じ系列のマイコンで上位互換であるが、レジスタの番地が
微妙に違っているものに移行するとしよう。
分離していればそれ用のreg.hをコピーすれば終わりだが、*.cに含んでいれば
コピペしなおさないといけない。数ファイルならいいが、大量にあったら?
ま、そんなもんだ。
最悪なのは自己流。意味のない癖ばかりついて他人と協調して仕事ができなくなる。もちろん一生零細やるつもりならそれでもいい。
>>339 の言っていることが一番正しい。
良書と良いソースに触れるのが一番。
ははは。339も340も自己流の最たるもんじゃん。 多くの現場では、マイコンソフトのバグ出しはハード屋がやってる。 おおきいのからながれてきたマイコンプログラマーなんてのはC言語でしか マイコンソフト書けないのだが、書いてたソフトも使い物にはならない。
で、その良書とは何か?という問題が出てくるわな。
入門者向けの本にはソース分割には触れてないのがほとんどだし。
>>332 非常に重要かつもっともな疑問ですね。俺も結構悩みました。
そういう「人に見られて笑われないか?定石からはずれてないか?」という気持ちは重要ですよ。
とりあえず「プログラミング言語C」の第4章とこのサイトの第5章が参考になるのでは。
ttp://www.pro.or.jp/~fuji/mybooks/cdiag/ んで、ヘッダファイル化すべきものとして俺の解釈は、
1.複数のプログラムで共通に使えるものを入れる(
>>339 のレジスタ名は典型的な例)。
2.対応するCソースファイルを再利用する時に必要な情報を入れる。
2.について具体的には外部に公開したい関数のプロトタイプ宣言・グローバル変数・
定数・構造体or共用体の宣言、といったところ。
再利用の際に外部からどんなデータをどの関数に与えるのか?ということを書いておく。
外部に公開する必要の無い定数・定義・宣言はCソースファイル内で充分。
上の2点に該当しないなら無理に.hにするとかソース分割する必要は無いと思いますね。
コンパイルに時間がかかるとか、デバッガの読み込みが遅くなるorメモリにデバッグ情報が
入りきらない、なんて事は今時ないはずですから。
343 :
774ワット発電中さん :04/12/19 17:53:14 ID:y0wgqLii
スレ違いなんですが、例えば、 strlen()を使ったときに、コンパイラが「strlenのプロトタイプが無い」とか言ってきますが、 21世紀なんだから、コンパイラが、「strlenのプロトタイプがありませんので、気をきかせてstring.hをインクルードしますが、いいっすか?(Y/N) 」 くらい聞いてきてもいいと思うんだが。せめてエラーの時に「strlenのプロトタイプがありません。(string.hと思われますが)」とか推測してくれよ。 出先でソース直すときに、定本が無いことがあるんだよ。いちいち、 includeディレクトリを grep するのもなー。
>>341 > 339も340も自己流の最たるもんじゃん。
おいおい勘弁してくれよ。読書と他人の仕事から学ぶのは学問でもなんでも王道だぜ。職場の先輩の指導なんかに従った日にゃ、妙な思い込みや変なローカルルールしか知らない人間になっちまうよ。
>>342 >で、その良書とは何か?という問題が出てくるわな。
ま、そうなんだが「つべこべ言わずに片っ端から読めや」ってのが俺の持論。本といっても玉石混合だが、先輩と違って悪所は捨てられるのがよいところ。でもって基本中の基本として
>>335 の二冊は読んでみろってこと。
> なんでヘッダファイルなんてあるのか?
なんて質問は基礎がしっかりしていないから出てくる。基礎がわかっていれば自然と正しい使い方が理解できる。そのためには基礎が身につく良書を読むのが一番。
インクルードファイルの直接のご利益に関しては
>>342 の書いているとおり。
>>343 >せめてエラーの時に「strlenのプロトタイプがありません。(string.hと思われますが)」とか推測してくれよ。
無駄。そもそもstrlenはC言語の一部じゃない。Google Desktop使え。
strlenはCの一部です。規格読め。
>>346 言語仕様と標準ライブラリ仕様の区別もつかない房。strlen()という関数が
あったとしても、それが標準ライブラリ関数であるとは限らない。
>>345 「ファイル<string.h>をマイコンピュータ内の検索します。よろしいですか?
(Y/N) 」
「マイコンピュータ内にファイル<string.h>が見つかりません。ネットワーク
コンピュータ内を検索します。よろしいですか?(Y/N) 」
「ネットワークコンピュータ内にファイル<string.h>が見つかりません。インター
ネット内を検索します。よろしいですか?(Y/N) 」
「xxxxxx件のファイルが見つかりました。インクルードする<string.h>を選択
してください。」
一人のアフォなプログラマが1行の#includeを忘れたために...。
>>349 言っている事が良く分からないのだが。
ライブラリは言語仕様に含まれる。
strlenが標準関数でない場合の話は勝手にやってくれ。
なぞなぞにつき合うつもりは無い。
複雑な構造体とかenum等、色々な宣言はヘッダファイル作って 管理した方がやっぱり楽だからな…。 ソース分割とかは…まぁ慣れの部分も大きいけれど… それなりに大きい場合、ある程度分割した方がやっぱり見通しも良くなるよ。 コマンド解釈とか入ってくる組み込みソフト(USBやシリアルで 入力&出力をする、みたいな)は特にね。 で、最近の本なら「UMLユーザーズマニュアル」とかはどうだろう? プログラム作成だけに利用するような手法じゃないし、大規模プロジェクトでも 使えるように適用範囲も広くなってる分、寄せ集め的な部分が多いけど>UML
AVR使いって、みんな当たり前のようにgccを使ってるけど、 どこでノウハウを仕入れてくるのよ?
349じゃないが、
>>351 の眼は節穴か?そのJPEG画像にこう書いてあるだろう
「この標準ライブラリはC言語固有の一部分ではないが…」
コンパイラは文法にしたがってプログラムを変換するツールだよ。標準ライブラリがリンクされているかなんかコンパイラのしったこっちゃねぇ。つまり、プログラム中の"strlen"が標準関数かどうかなんかコンパイラはしらねえってこと。
なんにしろ、そんな余計なお世話は(゚听)イラネ
357 :
774ワット発電中さん :04/12/20 03:32:34 ID:nHM8Z3W1
358 :
774ワット発電中さん :04/12/20 06:21:54 ID:bbzDbLUW
>>353 AVRFREAKSのGCCフォーラム見たらよくわかる。
>>348 >>AVRは、優秀なユーザーが多いのでそんなもん見当たらないような
問題にあたっても自力で解決するのを楽しんでるという感じかな。
>>353 AVRの概要とC言語そのものは習得済みとするなら、
・他の人のサンプルプログラム。特にAVRFreaksで配布されているgcctest(対応バージョンがちょっと古いけど)
・WinAVRマニュアル類。www.avrfreaks.netから入手可能
mainからAVRGCCタグクリック→左側の"Guides&Manuals"クリック
バージョン古いけどTOPにあるgetting started notesがわかりやすくて参考になる。
GCC-AVR Inline Assembler CookbookはまろりさんのHPに日本語訳があります。
WinAVRのhelpであるAS3GCCはheroさんとこに日本語訳があります。
>>360 古いサンプルを現行WinAVRで使う場合の注意。多分コンパイルはとおると思うけど、
レジスタ入出力は、そのレジスタを変数のように書くことができます。
たとえばoutp(0xFF,PORTB);→PORTB=0xFF;
data=inp(PINB);→data=PINB;
__inw()などで扱っていた16bitレジスタも同様。
>>359 ところが、その「わかりやすい」マニュアルはバージョンが古いので、
Mfileを起動してMakefileを、Cofを出力するように設定しておけば、AVRStudioで、Cofファイルを読めばソースデバッグできる
っていう肝心要のところが書いていない罠。
>>362 確かにねえ。この辺の話はあちこちに散らばっているねえ。
言われてみると俺も英語のドキュメント(それも1つにまとまっていない)とgccforumと
2chで何となく修得した覚えがあるなあ。
>>354 K&Rは入門書であって規格ではないと言うこと。
まあK&Rのいう「言語仕様」は構文規則のことを言っているんじゃないかな。
で、Cにはライブラリは含まれます。規格を読みましょう。
ライブラリの無い物は標準Cではありません。
ただし、組み込み等で使われるFree Standing処理系では一部の標準ヘッダ
だけがあれば良いことになっていて、strlenの含まれるstring.hは必要ない。
コンパイラはライブラリ関数を知らないと言う話が出てますが、別の手段で
ライブラリを実現しているから問題ない。コンパイラはCの処理系を実現す
る手段でしかない。
ちなみに標準ヘッダの#includeがあることを解釈して、コンパイラがライブ
ラリ関数を打ち決めで生成することもゆるされます。同名の自作の関数を
作ることは未定義です。実際にGCCは似たようなことをやっているらしいです。
自作の関数が呼ばれないと言う話がどっかのスレにありました。
>実際にGCCは似たようなことをやっているらしいです。 gccはそんな余計なことはしてないと思ったな。 インクルードファイルの中で関数を定義しなおしている場合がある (良くあるのはisナンチャラの類をインライン展開するとか) からそれと勘違いしてるんじゃない?
>>364 おーほんとだ。winavrで、
#include <stdio.h>
#include <avr/io.h>
char strlen(char x)
{
return x+2;
}
int main (void)
{
char a;
char b=123;
a=strlen(b);
PORTB=a;
return 0;
}
ってやってみたら
abc.c:3: warning: conflicting types for built-in function `strlen'
だって。この場合は出力を見たらちゃんと定義した関数を使っていました。
少なくともWinAVRは標準的関数が何か知っているようですね。
char strlen()の定義を消したらstring.hが読み込まれて・・・
とはいかず、やっぱりエラーになりました(^^;)
367 :
364 :04/12/20 22:47:05 ID:UQS1GfFx
>>365 そうかもしれません。すれが見付からんのでもうわかりません。
GCCの例については忘れてください。
>>366 それは宣言と定義が異なっているからであって、全然別の話
>>368 いや・・・string.h入れてないから宣言していないはず、って話では?
藻前ら、ちったぁマニュアル読めや!
http://gcc.gnu.org/onlinedocs/gcc-3.4.3/gcc/C-Dialect-Options.html#C-Dialect-Options -fno-builtin
-fno-builtin-function
Don't recognize built-in functions that do not begin with __builtin_ as prefix.
See Other built-in functions provided by GCC, for details of the functions affected,
including those which are not built-in functions when -ansi or -std options
for strict ISO C conformance are used because they do not have an ISO standard
meaning.
GCC normally generates special code to handle certain built-in functions
more efficiently; for instance, calls to alloca may become single
instructions that adjust the stack directly, and calls to memcpy may
become inline copy loops. The resulting code is often both smaller
and faster, but since the function calls no longer appear as such,
you cannot set a breakpoint on those calls, nor can you change the
behavior of the functions by linking with a different library.
With the -fno-builtin-function option only the built-in function
function is disabled. function must not begin with __builtin_. If a
function is named this is not built-in in this version of GCC, this
option is ignored. There is no corresponding -fbuiltin-function
option; if you wish to enable built-in functions selectively when
using -fno-builtin or -ffreestanding, you may define macros such as:
#define abs(n) __builtin_abs ((n))
#define strcpy(d, s) __builtin_strcpy ((d), (s))
371 :
774ワット発電中さん :04/12/21 23:40:14 ID:VxcUO2GV
現在、digi-keyにてATTINY2313-20PI(DIP)が1個256円、25個@161円で 157個在庫しています。 現在、digi-keyにてATMEGA88-20PI(DIP)が1個439円、25個@276円で 105個在庫しています。
372 :
ど素人 :04/12/23 11:06:01 ID:aaDMWGZa
AVR入門者です、教えて下され。 SWを押すとLEDが点灯する「入門書」の頭に登場する回路なんですけど シンク電流で点灯させるならばLEDを3個直列にし抵抗を挟んでDC12Vにつなげば、1ポートで外付けの石を使わずに3個のLEDを点灯させられるかな? 自分で実験すれば、と言われるのは承知なんですけど既にMega32を含めて4個昇天させてるもので、なにとぞよろしく。 「シンク電流」と聞くと何やらいけそうな、でもOffにした時DC12Vからポートに流れてしまうような。 なおAVRは5V駆動しています。
>>372 出力オフ時の耐圧が12V異常あればOKだけどね
素直にバッファかましなさいって
>>372 クランプ汁!
LEDならどうにかなるだろ。
>>372 その入門書ってどこの何という入門書なんだ?
日本語の書籍なら1つしかないけど・・・
でもって12Vにつなぐのは止めた方が無難。オープンコレクタじゃないんだから。
出力ピンがHiになっても、AVR内でVccにつながっている状態になるので、
これと12Vの間に負荷をつなげば12V→5V間に電流が流れる。
流れる電流によっては丸ごとアボーン。
ただ、(12-5)VよりLEDの順電圧が大きい場合は、
電流が流れない事になるのでまあうまくいくかもしれん。
白色LEDの3個ならいちおうokだが・・・・やっぱりやめましょう。素直にTr噛ませて。
AVR側の電源だけを切った場合は入力ポート状態になると思うけど、
場合によっては12V→LED/抵抗→AVRの保護ダイオード→Vccとなって、
AVRが2V程度の低電圧で動き続けるという変な事態を招きかねないと思う。
376 :
ど素人 :04/12/24 11:15:07 ID:r0qTfhad
>>373 〜375さん、レスありがと
>その入門書ってどこの何という入門書なんだ?
>日本語の書籍なら1つしかないけど・・・
そのひとつと他にPICの入門書やHPなどです
>でもって12Vにつなぐのは止めた方が無難。オープンコレクタじゃないんだから。
すごいわかりやすい解説をありがと、納得できました。
こんなこと言い出したのは、SWもLEDも1でOff・0でOnという奇妙な負論理のせい
このSWをジャンプ命令で判断するとNOTの連発で、ソフト屋を本業とする私としては「喝」となる。
でも、ソースでは無くシンクで点灯させるのはきっと何かご利益があるに違いない
遊んでいた訳です。よくあるPICの場合「ソースよりシンクの方が電流を流せる」というのはAVRにはあてはまらない、ソースもシンクも同じ。
>>376 ん?すまんがSWって何の略だ?
スイッチと考えると今ひとつ意味がわからないのだけど。
378 :
ど素人 :04/12/24 12:24:11 ID:r0qTfhad
>>377 さん
すんません、SWはスイッチの事
入力ポートにSWをプルアップしてつなぎ、OnでゼロOffで1となる訳ですが
何でOnで1にしないの?という疑問を書いたのでした。
>>378 プルダウンして、Onで1/Offで0にすれば?
スイッチの状態検出ルーチンでNOTして、論理処理を正理論に統一する方法もある。
つまんねーところで悩んでるふりしてないで、先へ進んだらどうかね?
>>376 > こんなこと言い出したのは、SWもLEDも1でOff・0でOnという奇妙な負論理のせい
> このSWをジャンプ命令で判断するとNOTの連発で、ソフト屋を本業とする私としては「喝」となる。
ソースの可読性が悪くても、バイナリレベルでのコード効率や実行速度は変わら
ないよ。AND演算した後、JNZかJZかの違いだけ。本当にソフト本業?
> ースでは無くシンクで点灯させるのはきっと何かご利益があるに違いない
TTLではソース側の電流がほとんど取れなかったから、その頃の名残では?ある
いは、著者が昔の回路を十分理解せず単にコピペしているとか。
>>378 そもそも1がオンだと思うこと自体固定観念なんだと思うのだが。
論理があってさえいれば正負がひっくり返っても何の問題もないでしょう。
唯一問題になるのは現実の素子による制限だけ。
>>380 そういえば、AVRってまさにその昔のTTLのように、ソースよりシンクの方が多くとれるん
ですけど、アレは何による制限なんでしょうか?
2313でシンクでVcc5V.Lo1Vの時47mAくらい流せるのに対してVcc5V,Hi4Vで7mA。
単なるCMOSのゲートならそうはなりそうにないんですけど。
>>382 ICの設計がそうなっている(Lo側MOSFETをHi側より大きくしている)のと、P-ch
半導体より、N-chの方が特性がいいから。ハイサイド側はP-ch、ローサイド側は
N-chな。
単体のMOSFETでも、2SKxxxx(N-ch)に比べて、2SJxxxx(P-ch)の方が、ON抵抗
高いでそ。っていうか、2SJxxxx(P-ch)は品種も少ないし。
オーディオアンプ等じゃないんだから、Hi/Lo側の特性を積極的に合わせる理由が
ない。ウェハの面積(並べられるMOSFETの数)は限られているので、Hi/Loとも20mAよ
り、Hi側7mA、Lo側47mAと非対称の方が、用途が拡がると考えてのことだろう。
20mAじゃ足りないけど、47mAあればミニチュアリレーなら直接駆動できるとか。
チャージポンプ等で、ゲートON電圧を電源電圧+4V以上に持ち上げれば、ハイ
サイド側にN-chを使うこともできるし、ON抵抗を気にするモータ駆動用の大電流
Hブリッジ等では実際にそういう回路を採用している。
>>383 なるほど、NchPchの特性で仕方なくって面+
あえてさらに違いをつけて限りある資源の中で能力を高めて使わせようって訳ですね。
後者はちょっと感動。
なんか最近H8-ML腐っているね。 Linux始めたばかりの教えてクン厨房と、教えたがりの 自称「Linuxのベテラン」ウンチクひけらかしオヤジばっかり。 全然H8と関係ないじゃん。 m@cはドサクサにまぎれて鬱病の話してるし。 最近どこへ行っても、この手の場所をわきまえないバカが増えた希ガス
最近どこへ行ってもそういう些細なことに腹を立てるような 人間が増えた希ガス
最近どこへ行っても当該BBSやMLには書かずに2chで陰口しか言わない 奴が増えた希ガス。
>>387 当該MLでそう言っても、
「H8と関係無い話をするな」という投稿の方がよっぽどノイズです、
みたいなこと言われちゃうからね。
そのノイズはエルゴート性?
次のスレッドではh8とAVRは分離したほうがいいな
>>385 あれで仕事に使おうというのが恐ろしすぎますな。
そういやあそこは仕事絡みOKだっけ?
>>390 瞬間的にはじける奴もずーっと粘着する奴もいるけど、
周期性がある気がするのでなしってことで。
394 :
774ワット発電中さん :04/12/25 21:09:33 ID:VCYMpZ9C
>最近どこへ行っても、この手の場所をわきまえないバカが増えた希ガス 酸化人員の絶対吸うが少ないんだよ。どこへいっても実体的には同じ面子がやってるに過ぎない。
395 :
774ワット発電中さん :04/12/26 01:41:16 ID:u92eAErr
ここに出ている人も、H8-MLに出ている人がほとんどだったりして。
396 :
774ワット発電中さん :04/12/26 07:41:41 ID:cAjP5GOT
PICMLよりはるかにマシだと思うが
397 :
774ワット発電中さん :04/12/26 22:53:04 ID:lhG94bZB
えーっ! なんでえ? pic の方も 色々教えてくれるし いいと思うんだけど。 最近 雰囲気も悪くないと 思う
398 :
774ワット発電中さん :04/12/28 15:06:23 ID:tlUCQ25y
そうね 某氏の物腰がソフトになって、 逆に親しみやすいメーリングリストになった感じ
picmlはね、ある強迫観念からなんだよ。人格が改良されたのではぜんぜんない。
未だに性格の悪さがにじみ出てるしな
401 :
774ワット発電中さん :04/12/28 20:38:21 ID:IzLKiiKJ
脅迫観念? なんの脅迫? 今度PIC-MLで聞いてみようかな (^^;
402 :
774ワット発電中さん :04/12/28 21:01:28 ID:amKLGYOs
↑お前みたいな馬鹿がいるからMLが荒れるんだよ 躾のできていない餓鬼は犬畜生に劣る
わさびぃUzeeeeeeeeeeeeeeeeeeeeeeee!!!!!!
社内アドでかつ社名晒して痛い発言しちゃうってのはどうかと思うが 漏れ的にはそんな会社に仕事だしたりしないがヲチする分には楽しいな
これ、本人かな ↓ 398 :774ワット発電厨さん :04/12/28 15:06:23 ID:tlUCQ25y そうね 某氏の物腰がソフトになって、 逆に親しみやすいメーリングリストになった感じ
406 :
774ワット発電中さん :04/12/30 11:23:50 ID:y0In0PxF
407 :
774ワット発電中さん :04/12/30 11:27:56 ID:y0In0PxF
408 :
774ワット発電中さん :04/12/30 13:58:41 ID:N6f8MEnr
406,407 ↑お前みたいな馬鹿がいるからMLが荒れるんだよ 躾のできていない餓鬼は犬畜生に劣る
409 :
774ワット発電中さん :04/12/30 19:05:15 ID:y0In0PxF
ごくろうだな w
H8でPICみたいにPONGはできないよね。 PICよりH8は遅いよね。 だれか迷える子羊に光を。
412 :
774ワット発電中さん :04/12/31 03:37:24 ID:16NBXrVo
PONGって何でしょうか? すみません、教えてください。
>>410 余裕でできるよ
インベーダーにでも挑戦汁
H8のピン数からいけば、秋月のグラフィック液晶に、 ボリューム二個つけて、PONGを作るのは不可能では無いと 思われるので、だれか冬休みの宿題で作れ。 *こ*れ*は*命*令*だ*。
PICはもう少しRAMあればなぁ。PICでCとか使う気がしない。
416 :
364 :04/12/31 12:53:46 ID:hzD7gzpo
RAMの量というか、ほとんど直接アドレッシングしかないのがなんとも…。 PICは初心者にお薦めしたくない。(Cで使うならどうでも良いけど)
PICはともかくコンパクト!が美点だろう。その上での犠牲。 ただ今となってはプロセスの進歩を考えると時代遅れとなりつつあるのも感じるが。。
>414 *こ*れ*は*命*令*だ*。 作るぞ
419 :
410 :04/12/31 14:23:17 ID:tKLJqHbH
video信号の発生ができるか、というとこなんですが。 昔AY-3-8500で作った瓦礫があるかと思って実家で探したが 出てこなかった。。。 小学校のとき夏休みの自由研究で作ったんだよね。 もう30年近くなる。。。
420 :
774ワット発電中さん :04/12/31 17:01:03 ID:qZ4pDoTb
始めからそう書け低能
421 :
774ワット発電中さん :04/12/31 17:30:31 ID:qE7p0ogO
これ、本人の自画自賛ですか ↓ 398 :774ワット発電厨さん :04/12/28 15:06:23 ID:tlUCQ25y そうね 某氏の物腰がソフトになって、 逆に親しみやすいメーリングリストになった感じ
422 :
774ワット発電中さん :04/12/31 19:39:02 ID:vF3UuHaw
某氏ってのが誰なのか、それが重要
>>416 > RAMの量というか、ほとんど直接アドレッシングしかないのがなんとも…。
アセンブリしかほとんど使い道ないのに、色々制約多くてとても面倒。
>>417 > PICはともかくコンパクト!が美点だろう。その上での犠牲。
これもそうだね。
PICって他のマイコンと比べてコンパクトなの? ああいう、普通じゃないアーキテクチャを採用することが、 どういう風にサイズに影響するんでっしょ? この辺知ってたら詳しく教えて(゚д゚)ホスィ ホント、有名どころのマイコンだと、 PICだけなんであんな変なアーキテクチャなのか、 ずっと疑問だったんで。 それでは良いお年を〜
>>424 たぶん登場当時のことかと。
今ではもっと高性能なマイコンが同じパッケージに入っているし、
PIC自体PIC18みたいなのが出てるようだけど。
今でもスリープ時の消費電流の少なさなどではまだメリットあるよね。
一番わかりやすいのは、命令幅が短くなっているので命令用のメモリや処理回路が 小さくできる。 プログラムメモリはバンク構成なので全容量分アドレス幅を持つ演算器を用意 しなくてもアドレス生成できる。 直接アドレスしかない(要はメモリというよりレジスタ)のでアドレス生成演算器が 必要ない。 で、回路規模が小さいのでコストが安くなる。速度も上げやすい。電力も少なくて すむ。検証も楽。
>>426 CPUの作りが簡単ってことですね。
その分プログラムは制約あって苦労すると。
でもまあ目的の動作ができてしまえばOKなんですよね。
大量生産なら1台あたりの苦労?は小さくなるってことか??
そゆこと。 当初は小規模な用途のみに目的を絞っていたからプログラムメモリが少なくても 問題ない(っていうか少ない事を前提にしてるアーキテクチャだし)訳で、 苦労と言ってもたかが知れていた…筈なんだ、ほんとは。 だけど…pongなんてものまで作る人が出る始末で…慣れとは恐ろしい…。
429 :
774ワット発電中さん :05/01/01 11:44:15 ID:c0Ge7ARy
h8/3664なんだけど、ramのh'f780-h'fb7fは絶対アクセスしては いけない。なんぞとマニュアルに記載されてます。 フラシュrom書き込み時のワークエリアとして使用する為みたいですが デバッグ時は別に使っても大丈夫と思うけど、どうですか? 教えて君で申し訳ない(汗。
絶対アクセスしてはいけない
そういえばみなさんPSoCのアーキテクチャは変態だと思いますか?
>>431 ありゃアナログだし、面白いけどへんというか、
アクロバチックだと思う。
433 :
429 :05/01/01 13:13:33 ID:c0Ge7ARy
>>430 なんででしょう?
アクセスするとフラッシュがおかしくなるとか?
まさか。んなわけ…
434 :
429 :05/01/01 13:32:52 ID:c0Ge7ARy
連続書き込で申し訳ない。 別のところに「E10Tオンチップエミュレーターを使用する場合」 とありました。マギワラシイ。 ramの項目ではなんの断りもなく「いけません」だって。 なんじゃ、こりゃ。
435 :
774ワット発電中さん :05/01/01 14:01:38 ID:PqMvyp5e
これ、本人の自画自賛ですか ↓ 398 :774ワット発電厨さん :04/12/28 15:06:23 ID:tlUCQ25y そうね 某氏の物腰がソフトになって、 逆に親しみやすいメーリングリストになった感じ
あけおめ。 PICのアドレッシングがコンパクトさにつながる、 ってのは結構納得できた。 PIC16シリーズがリニアにアクセスできるアドレスの長さって、 データだと間接アドレッシングでも8ビットだもんな。 プログラムだとPCは13ビットだけど、 PCLレジスタを使った制御だと、実質8ビット長まで。 こういう所も含めて、コンパクト指向でアーキテクチャを設計したんだろうけど、 それ故に、データサイズやプログラムのサイズで ちょっと規模の大きなものを作ろうとすると、 とたんにバンクアクセスとか、ノンリニアな制御の弊害が出てくる、と。 でもまあ、PIC16シリーズが最初に発表されたのは1989年。 10MHz未満動作で、周辺機能も内蔵しない、 ディスクリートの68000プロセッサがワークステーションwで現役だった時代だから、 それくらいコンパクト指向じゃないと、 廉価なワンチップマイコンとしてはやっていけなかったんだろうなあ、多分。 そう考えると、90年代の後半からは、 PICより普通な使い方ができるAVRがPICと同価格帯で手に入るようになった、 ってのは、良い時代になったんだなあ〜 …と温故知新してみる2005年元旦の昼下がり。
437 :
774ワット発電中さん :05/01/01 15:53:26 ID:VyVKj7wd
>PICより普通な使い方ができるAVR PICは普通のマイコンではないつうの。
PICは16ビット加算すら1命令ではできないからなぁ。 (最近のやつはできるのか? 俺の中ではPICって16F877あたりで止まっているから)
>>438 AVRもそれはできないと思った。
H8はできるよ根?
>437 所詮ただのマイコンだよ。狂信的に妄想を語るのも 時々いるけど、騙されないようにな。
いくら変態でも割り込み時のレジスタ退避・復帰くらい素直にできるように作れ
PICは16F84しか使ったことないけど、あれはスタックが少なかった…
H8は16BITの掛け算割り算までできるよ。 だからといってH8が優れてるとも言い切れない。 たとえばFLASHROM、EEPROMの書き換え可能回数はPICが 圧倒的だし。 やっぱ、用途で使い分けかな。
444 :
436 :05/01/01 20:00:12 ID:KeyOV3bK
445 :
436 :05/01/01 20:07:32 ID:KeyOV3bK
>>440 あ、X68000ユーザだったらスマソ。
新年の無礼講、って事でひとつ許して栗。
446 :
774ワット発電中さん :05/01/01 20:29:37 ID:uczgN/fh
>>440 PICでスタック使ったり割り込み使ったりする奴は邪道もいいところ。
それが判らん奴はPICを使う理由はない筈だ。
>>446 おいおい、割り込みとサブルーチンコールとそれに伴うスタック使用は
たとえPICでも普通に使う所じゃないのか?
8段しかないから無駄にサブルーチンコールせず最小限にするってことと、
データには使わない(使えない)ってだけでしょう。
割り込みのない組み込みマイコンなんて・・・・
PICの最大の利点であるスリープ時省電力を殺すつもりか?
>>446 おまいの言いたいことは去年散々聞いたから良く解かってる。
大雑把に言うと、2Kの中でグルグル回せってことだよな?
449 :
774ワット発電中さん :05/01/02 01:30:20 ID:lO0OOgFU
これ、本人の自画自賛ですよね ↓ 398 :774ワット発電厨さん :04/12/28 15:06:23 ID:tlUCQ25y そうね 某氏の物腰がソフトになって、 逆に親しみやすいメーリングリストになった感じ
>>447 ですよね。割り込みなしの組み込みマイコンでは、特徴半減ですよね。
私はアセンブラはやりませんが、H8でもPICでも割り込みはバリバリ
使っています。タイマー割り込みで全部制御して、メインは無しという
プログラムも多いです。
451 :
774ワット発電中さん :05/01/02 02:20:05 ID:LXz8AIGf
>450 オマエはPIC使う理由がないだろ。あっても価格的なことだけだろ。 割り込みしか使わないプログラムを自慢するってどういう神経だろう。 そんなモノを組み込みに使われたのでは無責任極まる。 機能的な確率論でどうなるか判らない状態が発生する事が気持ち悪くないところが信じられない。
452 :
774ワット発電中さん :05/01/02 02:21:41 ID:LXz8AIGf
>>448 それが天文学的な確率でどうなるか判らない状態のセットを提供する術だと思う。
>>451 >機能的な確率論でどうなるか判らない状態が発生する事
具体的にどんな事を指しているのか教えてくれ。
ID:LXz8AIGfは荒し。たぶん以前さんざん荒しまくっていた ε-( ̄。 ̄)y-~ と同一人物。無視するがよろし。
455 :
便乗失礼 :05/01/02 02:56:53 ID:r63AuxHz
メインは空ループで割り込み関数に仕事をさせる形のプログラムはよく見かけるのですが、 この作り方で起こりうるどうなるかわからない状態というのは具体的にどんな状態でしょうか。 割り込み処理が終わらないうちに次の割り込みが発生とか?
おれは割り込みはフラグたてに使って メインループでステートまわして処理してるけど
>>451 割り込みを使うことと割り込みしか使わないこととは別だろ。
目的動作を実現するのに便利で動作が安定しているならどっちでも構わない。
458 :
774ワット発電中さん :05/01/02 10:20:00 ID:lHbtv+iK
>>456 タイマー割り込みで制御すると
ランプ点滅などの時間処理がしやすいです
また同期回路みたいで 組みやすいです
459 :
774ワット発電中さん :05/01/02 11:10:46 ID:ljpvbhIi
河村優花と小野寺成明は今年SEXできる。
460 :
774ワット発電中さん :05/01/02 11:28:04 ID:iDqW4tEN
>454 オマエ、掲示板になんでカキコしているの? 見にくる必要だって無いだろ。
>>460 おい、おまえIDがqになっているぞ。
今のうちにマターリして出直せ。
>>451 コストって重要な判断基準ですがねえ。
機能的な確率論ってソフトエラーやハードエラーの事を言ってるんだよな?
異常はWDTに期待するしか無いでしょ。割り込みもぐるぐる回すのもたいして
変わらないだろ。
所詮PICもマイコンの一つさ。 >451みたいな妄想家が組込の真似事をやるくらいには 流行ってるが。
>>451 は頭悪すぎてPIC以外のマイコンの使い方を
覚えられないんだろうなあ。気の毒に。
四苦八苦してようやく覚えたPICでさえ、
割り込みの概念は難しすぎて使いこなせないらしい。
君、組み込みなんて仕事向いてないよ。
掃除夫とか牛丼屋の飯盛り係とかの仕事探したら?
恐ろしいのは
>>451 の作ったものが製品として流れていたり
あの調子で後輩を指導していたりすることだ。
ACCレジスタ時代の8bitマイコンに慣れている人間はPICに抵抗がない 多くの命令にレジスタ直行性がある事が当然と思う世代はAVRでないと嫌がる くらいの差だろ。 俺はもうWレジスタに縛られるPICに戻れなくなってしまったが・・・orz
まさか
>>451 は一留乞学歴ですよ?
組み込みなんてそんな泥臭いことやってるわけがないですよ。
もし私が上司なら
>>451 に絶対そんなことやらせられません。
トイレ掃除や草むしりですら不安すぎて任せられないのに組み込みなんて。
468 :
774ワット発電中さん :05/01/02 16:42:20 ID:hngXafih
>462 割り込み主体のプログラムで、プログラムの中でどうやって現在正常か異常事態か 判断するんだい? 一番判りやすい例は、割り込みが重なってしまった場合の後始末の順番だね。
割り込み回数のカウント用の変数を用意して、 割り込み関数の中ではカウント用変数のインクリメントだけを行う。 メイン関数のなかでカウント用変数が0でなければ割り込み時の処理を行う。 また割り込み処理が一回終わったらカウント用変数をデクリメントする。 割り込みが重なった場合はカウント用変数が重なった数を示しているのでメイン関数はこの変数が0になるまで処理すればいい。 …とかってやれば割り込みの重なりは対処できないかな、カウント用変数がオーバーフローしない限り…。 割り込みだけのプログラムってこんな感じに簡単に書き換えられる気がする。
470 :
774ワット発電中さん :05/01/02 17:39:04 ID:hngXafih
ちっとも簡単ではないよ (1)カウント用変数はインクリメントだけを行う (2)カウント用変数が重なった値を示している (3)カウント用変数がオーバーフローしない限り 割り込みの種類はどうやって判別するの?どれが処理途中で、どれが未処理でって。 サッパリ判らないよ。スタックは関係ないなんていわれたら尚わからなくなる。 そもそもメイン関数があるなら、割り込み主体では無いような気もするけど。
割り込み処理の開始で即時にカウント用変数をデクリメントすれば変数の値が未処理の数になるんでは? あと割り込みの種類は割り込みの種類によって使う変数を変えれば…。 確かに具体的に考えていくとややこしい…。
(・∀・)ニヤニヤ
わらわないでよ、悲しくなるじゃないか
割込処理でやらせたい内容が大したことがないなら、わざわざフラグ 立ててメインで処理するより、割込の中で始末してしまった方がずっ と簡単で楽だろね。 あるイベントに対してなるべく短い時間で応答させたいようなときも 割込を使う方がずっと簡単で効果的。 のんびりステータスチェックと処理をグルグルと繰り返すだけで事足 りる用途なら割込を使わなくても何とかなる。
割込要因が複数あって、割込の中で処理させずにメインで やりたいときで、同一の割込が多重発生しないなら、それぞれの 要因毎にフラグを立ててやる程度でもいいんでは? もし多重に発生するようならそれぞれの割込要因毎にカウンタを 作ってやるとか、割込要求キューなりリストをこしらえてそこに入 れてやるというあたりが良く使われてるかな? 後者の方は発生した順に処理させたり、優先度をつけてやったり できるから、便利だろうけどPICでやるには大げさかもね。
と PICの中の蛙が申しております
>>462 あの人が過去のあの人なら、WDTもまた禁句だな(w
誤爆しちまった。スマソ
>>479 おまいのような奴は、20年遅れてるスレでもいけ。
481 :
774ワット発電中さん :05/01/02 20:29:10 ID:lO0OOgFU
これ、本人の自画自賛に違いないよね ↓ 398 :774ワット発電厨さん :04/12/28 15:06:23 ID:tlUCQ25y そうね 某氏の物腰がソフトになって、 逆に親しみやすいメーリングリストになった感じ
>>469 PICはよく分からんけど、割り込みの中で
INTCONの各ビットを毎に
その割り込み要因フラグの消去
フラグが立っている割り込みの処理、
LOOP
INTCONをチェック、割り込みフラグを点検
ってな感じでやるしかないだろうねえ。
同じ割り込み要因が
>>482 ぎゃ、書込中に送っちまった。
PICはよく分からんけど、割り込みの中で
INTCONの各ビットを毎に
フラグの消去
フラグが立っている割り込みの処理
LOOP
INTCONをチェック、処理中にフラグが新しく立っていたらまた上記処理
ってな感じで良いんですか?
割り込みがかかりまくっていつまでも終われない可能性とか、
同種割り込みが頻繁にかかって取りこぼす可能性はあるけど、
それが問題ならそれはそれで割り込みの限界と言うことで別の方法を
考えればいいだけだと思うけどー。
>>465 その心配はない。
>>451 は就職なんかしていない(というか、就職できない)
もちろん、後輩なんているはずもない。
ついでに付け加えておくと、友達もいない。
まして、彼女なんて絶対いるわけない。
専門学校では、同級生に馴染めず、昼飯はいつも一人で食べていた。
卒業後、どこにも就職せずブラブラ。
自分の部屋にはゲームとアニメビデオの山。
でも、他人と一緒にゲームしたりビデオ観賞したことは一度もない。
誰にも相手にされず、2chでウサを晴らすのが唯一の生きがい。
親はいずれ定年。専門学校を出て何年もたっているのに
就職のメドはつかない。ってゆうか就職する気ない。
数年後に訪れる破滅、それを直視したくない。いま楽しければそれでいい。
珍しく勉強する気になって買ったPICの入門書と秋月のキット。
生まれて初めて自分で動かすことができたマイコンがPIC。
でもその興奮と感動は長く続かなかった。
ある程度以上大きなプログラムを組もうとすると
頭が混乱してどうしても完成できなかった。
割り込みというものがどうしても理解できなかった。
それ以前にサブルーチンとは、スタックとは何か、理解できなかった。
そこで強引に導き出した結論、それは
「PICでは割り込みを使ってはいけない。
PICで割り込み使う奴はPICを理解していない奴だ。」
必死でおぼえた16F84、しかしそれは時代から取り残されつつあった。
ネットを見ていると、みんなH8、AVR、果てはSHやARMに移って行った。
自分のアイデンティティの核である16F84を、みんな素通りして
もっと上位のマイコンを楽々使いこなしているのが許せなかった。
なんだか知らないけど焦った。2chで暴れずにはいられなかった。
>>481 どうやらあんたのカキコが気に食わない香具師が居るようだ
このスレ読んでいて疑問に思ったのだが、 PICって割り込みのネストもうまく扱えないのか?たまにプログラマが手助けしないとネストで失敗するプロセッサは見るが、これだけわいわいやっているのを見ると不思議に思うよ。 教えてくれ。
よほど悔しかったと見えるな
改行してくれ
>>483 データシート見たら割り込み要因のビットをクリアせずに割り込みから抜けたら
割り込みの無限ループに陥ると書かれているよな。
そんなループ組まなくても一度の割り込み毎に1つずつ処理すればいいんでない?
INT割り込みならビットクリア後INT割り込み処理ルーチンへ
TMR割り込みならビットクリア後TMR割り込み処理ルーチンへ
ってな感じの振り分けすればいいだけだと思うのだが。
>>486 PIC初心者の俺がいうのが何だが。
データのスタックが無いからレジスタ退避のネストさせるのがめんどくさい。
サブルーチン使い難いのといっしょ。要はその程度の難易度。
そもそも、ネストしなくても処理できる。
ポーリングで済むような処理なら、ネストさせないで待たせて置けばよい。
割り込みから抜けた時に待たせた割り込み要因で割込む。もちろん、いちいち
割り込みを抜けずに全ての要因を順番にチェックしたり、優先順位回転みたい
な処理を入れてもよいだろう。
>>483 がきれいに書いてあるな。
割り込み処理が輻輳するのは、メインループだけで処理しても改善しない。
(あと数命令…とかいう極限レベルの話は除いて。これは個別検討だな)
>>468 の言っている後始末と言うのは分からん。解説希望。
割り込みだから分からない異常ってなんだ?
491 :
774ワット発電中さん :05/01/02 22:56:19 ID:ZEVV55mc
だからさ、割り込み要因を判定したり、カウンタ上げ下げしたりって処理は 皆オーバーヘッドだろ? PICでなんでオーバーヘッドが増える使い方をする奴が威張るんだよ? オーバーヘッドダラケなことやってPICが非力だって罵るわけで、全くナンセンス。 割り込み使いたければPICを選ぶべきではないという極マットウな意見がなんで すんなり同意を得られないんだ? PICはAVRなんかとタメ張れるマイコンだ!なんて主張しているわけではないんだよ。
>割り込み使いたければPICを選ぶべきではないという極マットウな意見がなんで >すんなり同意を得られないんだ? マットウじゃないからさ
>>491 だってその方がすっきりするし作りやすいし
無駄にポーリングループするよりスリープで待つことが可能になるし
PICの処理能力でもその程度のオーバーヘッド無問題な用途はたくさんあるし
その程度のオーバーヘッドが問題ある程度大変なら無理してPIC使うべきでないし。
そもそも割り込みという仕掛けはオーバーヘッド軽減のための方策ですが何か。
>>493 むしろFPGAとかPLDとか使えと言いたくなるよな。
XilinxのFPGAでSDRAMメモリコントローラ作った人もいるらしいし。
ちなみにその人はなひたふさん
>>491 >オーバーヘッドダラケなことやってPICが非力だって罵るわけで、全くナンセンス。
オーバーヘッドぬきで比べてもPICが非力な部分はいっぱいあるわけだが。
そして非力でも問題ない分野に使えば良いだけなので罵る必要はないし、
処理の優先度/緊急度という概念がないと割込のありがたみは わかるまい。 どうしても気に入らないならマイクロチップ社に文句を言って みるがいい。割込機能なんて無駄な物を付けるな!と。
>>497 どうやら彼はメインループが空ループで処理が割り込みってパターンが嫌いで
暴れているらしいので、まあそういう話は考えていないのでしょう。
>>495 XILINX本家に SDRAM I/Fのリファレンスコードがあったりするわけだが。
それに彼のサンプルコードは遅い。SDRAMのバンド幅の半分も使ってない。
読みやすいは読みやすいんだけどね。
500 :
774ワット発電中さん :05/01/02 23:53:19 ID:KSEFMq/V
PICの割り込みからFPGAのコントローラ?
501 :
486 :05/01/03 00:08:21 ID:4TcVqXTm
なんか
>>491 の意見がそれほどおかしいとは
思えんのだが、みんななんで叩いてるんだ?
>PICはAVRなんかとタメ張れるマイコンだ!
>なんて主張しているわけではないんだよ。
を読み落としているのか?
>>490 ありがとう、よくわかったよ。
おかしいと思えないようでは困りものだ
マイコンも宗教まがいなんだな…と今日このスレを見て思ってしまった。
なんか、PICのハードウェアについて議論しているのか、割り込みプログラミング について議論しているのかよくわかんないや。 漏れ的にはハードがヘタレだという意見にはまあ納得できるんだけど、割り込み処理の 書き方はプログラミング技法やコンパイラ(Cとかの場合)を使う上でのテクニックになる から文句を言う筋合いがわからん。
>>504 一つだけわかっていることは、
PIC専用スレは他にちゃんとあるのに
わざわざAVR・H8スレにPICネタを振りにくるバカが
居なくなればこのスレもまともになるってことだね。
507 :
774ワット発電中さん :05/01/03 03:09:00 ID:ltlN7LZF
>506 そーいうのなら、次ぎスレからはetcを外せよな。
>>501 充分おかしいよ。
彼はPICで割り込みを使わないプログラムもあることを主張しているのではなく、
割り込みを使うこと自体を否定している。
PICは割り込み使うと非力なので、割り込みを用いるならPICを使うなという主張がある。
この点は同意得られにくいだろうなあ。
509 :
486 :05/01/03 07:41:44 ID:4TcVqXTm
説明ありがとう。 しかしまだわからない。適材適所ということだろう。 「何が何でもPICを使え」というのなら狂っているが、 「割り込み処理には向いていないから、割り込みを 使う処理にはPIC以外がいいよ」と言っているんだろ? 彼は。 それほどおかしなことか?
>>509 >割り込みを使う処理にはPIC以外がいいよ
それ自体が同意を得られていないのだろう。
タイムクリティカルではない・単純な割り込みなら別に問題ないし、実際よく使われている。
PICを使う理由が低機能な割り込み処理機能より上回るなら、苦労してでも使うでしょう。
PICの命令群が扱いにくいのをわかった上で諸々の理由でPICを使うのと同じ理由で。
どんな割り込み処理がPICに向いていないのか書いていない以上、
>>491 はPICでの割り込み処理すべてを否定していると思われる。
叩かれるのは仕方がない。
>>468 の解説も欲しいところだな。
多少の問題がありそうなのはわかるが、回避策はあると思う。
いったいどのような問題を提起しているのか、そしてそれが割り込みなしならどのように解決できるのか
例を提示して教えて欲しい。煽りじゃなくて是非聞きたい。
>507 AVR、H8以外もあることだしな。 次スレからは”PICを除く”としよう
明らかに悪意を持った荒らしと思われる そういうのはMLでやってくれ
>>512 ん?
いや、専門のネタで盛り上がる場合で長くなりそうだったら
さくっと専門スレに誘導すべきでは?
ここはあくまで総合スレだし。ネタ禁止はちょっとね。
まぁPICは別格だからな。 PIC16C84が800円で(スタータパッケージが20000円)で出てきたときは ショックだったですよ。即16C84を25個買ったですよ。 だけど同じ時期にAVRとかH8が出ていたら、PICには目もくれなかっただろな。 AVRは出力がPORTAレジスタで入力がPINAレジスタというのがわかりにくい。 それを除けば、AVR>PICなんだが。
>>515 前にもその話題出たが、そもそも入力ポートと出力ポートは別物だし、
本当は別々が当たり前なのではないだろうか?
単にピン数が足りないので同じピンに割り当ててDDRで切り替え使用しているだけ。
517 :
774ワット発電中さん :05/01/03 12:12:25 ID:/DKh7KPE
>AVRは出力がPORTAレジスタで入力がPINAレジスタというのがわかりにくい。 別にわかりにくいとは思わんが勘違いでPORTAを読み込んでて入力出来ねぇーと半日悩んだ>漏れ
H8でも、H8S2000になると、出力と入力は PxDRレジスタとPORTxレジスタに分離されるね。
519 :
774ワット発電中さん :05/01/03 15:35:45 ID:ZONyw+8v
>>510 元々PICには割り込みが無かった事を知らんのか?
バカ利用者がイパイいるから営業的な理由でしぶしぶつけたに過ぎない。
マトモなエンジニアはPICで割り込みなんか使わない。
(例外は寝てるとこから起きる場合)
520 :
774ワット発電中さん :05/01/03 15:37:16 ID:ZONyw+8v
そもそも割り込みは、プロセッサが処理に没頭している際に外部への応答性を高める為の モノだ。 ロクニデータエリアも無いPICには意味がないんだよ。
PICの話はPICスレでやってくだちいな。 ホント、最近場所をわきまえないバカが増えたよな。
割り込みネタはPICスレに書きました。そっちでやりましょう。
>>521 まあまあ。藻前ももちつけ。
いちおうここは総合スレなんだし、
PICの話題も多少ならいいと思うが。
程度の問題。
漏れ的には
>>514 に全面的に同意。
本当に「PICは除く」なんてスレにしちゃうと、
PICのPの字が出てきたとたん、
>>519 >>520 みたいなヴァカが出てきて煽りまくって
荒れるだけだろうし。
525 :
486 :05/01/04 00:21:58 ID:gPyjG6G0
>>510 だいぶはっきりわかったよ。ありがとう。
526 :
774ワット発電中さん :05/01/04 14:51:00 ID:jiSw6rgJ
PICの18シリーズは全くもって中途半端な存在だよね
んじゃPIC以外のネタ投下。 AVRって、8ビットの定数加算がないのが、 なにげにマシン語入門、 特にお子様のマシン語入門の足枷になるよなあ、 ってオモタ。 16ビットなら定数加算もあるし、 先に適当なレジスタに定数を代入してからレジスタ同士で加算、 っていう方法もあるだろうけど、 なんかなあ…。 普通に、マイナスの数を引いて加算の代わりにする、 っていうので理解してもらえるのだろうか? ちなみに漏れはリアル消防の頃にZ80のマシン語を勉強したんだけど、 直行性のなさに激しく戸惑ってた。 LD (DE),Bって書いてアセンブラでなぜか通っちゃって、 「出来たプログラムがなぜか動かNeeeeeee!!!!!!!!」 とか。
529 :
774ワット発電中さん :05/01/04 17:53:22 ID:Sm8Yce1a
> ちなみに漏れはリアル消防の頃にZ80のマシン語を勉強したんだけど、 ご愁傷様でござんした。
>>528 加算するだけなら subi reg,-numが仕様だ!って言い張れるし、
addiなどのマクロでっち上げてもいいんだけど、
ひっくり返ってしまうCarryフラグが頭痛いです。
まあ慣れればいいんですけど。
16bit定数加算は+63までなので、結局subiとsbciに頼ることも多い。
レジスタ多いし、わからなきゃr16にぶち込んでadd命令使えがFA?
PICに制約あるように、AVRにも制約はあるってことでしょうねえ。
megaにもaddiないんでしたっけ?・・・・・ないですね。
まあmegaあたりからはふつーC使うから関係ないか。
>>529 > > ちなみに漏れはリアル消防の頃にZ80のマシン語を勉強したんだけど、
>
> ご愁傷様でござんした。
工エエェェ(´д`)ェェエエ工、なんで?
それとも、LD (DE),Bが使えなかったことに対して?
>>530 そっか、マクロを使えばでっち上げられるね。
全くもって気付かんかった。
まあ、加算と減算でキャリーの振る舞いが違ってくるのは、
他のマイコンでもある話だし、
問題ないかなあ。
漏れも最近はAVR使うときはgcc使ってます。
最初は出来上がるプログラムのサイズのでかさに辟易しましたが(;´∀`)
サイズの最適化をかけても、
同じプログラムをマシン語で書いたときの3倍くらいになるのはなあ…
AVRで巨大なプログラムは書かないんだけど、
かなり広々と思ってた90S8515が、
Cを使い始めたとたんに狭く感じるようになった。
>>531 3倍はでかすぎ。工夫次第で2倍強くらいには小さくなるぞ。
でかいライブラリ関数を安易に使わない。目的に添った関数を自作した方が小さいことも多い。
登場回数が少ない処理を安易に関数化しない。
2,3回ならマクロも使ってどっちが小さくなるか試す。
関数だとレジスタの退避復帰のためのPUSH/POPの山がバカにならないのよ。
グローバル変数は最低限に。ローカル変数を積極的に使う。lds/sts命令が減る。
受け渡しに構造体ポインタ渡しも使ってみる。関数のオーバーヘッドが激減することあり
>>532 R8C/Tinyなんか安そうだけど、置き換えできないの?
少量生産だと売ってくれないかな。
>>533 なんで532へのレス?
R8Cってどんな感じ?AVRよりいい?
データシート見に逝ってくる。
537 :
533 :05/01/04 21:54:08 ID:gPyjG6G0
いやぁ、そんなに苦労するならもうちょっといい マイコン+C言語がいいなじゃないかとおもって。 AVRを良く知らないから比較はできないけど、R8Cは なかなかいい感じだよ。サンハヤトのDIP使ってる。 - 16KB Flash - 2KB Data RAM - 8MHz 内蔵 OSC - ADC - SPI (R8C/15) - UART あたりが特徴かな。1万5千円のエミュレーターを買った から、作業は楽だよ。 俺の自作にはこれで十分だと思ってる。
>>537 あのエミュレーターってなんかフラシュをがんがん書き換えてる
雰囲気があるんだけど気にならない?
H8より書き換え可能回数が飛躍的に増えてればいいんだけど。
DMAC積んでりゃ面白かったんだが・・・贅沢かなw
へぇ〜、内部16bitでバス8bit。8088みたいな奴?
へぇ〜、3Vで20MHz動作可能・・だけど各命令のサイクル数多いな。
へぇ〜、乗算・除算命令ありだな。
へぇ〜、レジスタは16bitx6本+相対参照用2本かぁ・・・
へぇ〜、それがステータスビット1つで切り替わる2バンクあり。面白いなあ。割り込みでレジスタ退避が要らないかも。
AVRの32バイトレジスタにそんな機能があったら最高なんだが(w
>>538 R8C/15で1000回となっているね。
541 :
537 :05/01/04 23:24:47 ID:gPyjG6G0
543 :
774ワット発電中さん :05/01/05 04:51:10 ID:Rq48wfKd
これ、本人の自画自賛に違いない恥よね ↓ 398 :774ワット発電厨さん :04/12/28 15:06:23 ID:tlUCQ25y そうね 某氏の物腰がソフトになって、 逆に親しみやすいメーリングリストになった感じ
544 :
774ワット発電中さん :05/01/05 14:07:57 ID:FLsRYf4k
>>532 >受け渡しに構造体ポインタ渡しも使ってみる
具体例を教えてください。興味あるし。
545 :
774ワット発電中さん :05/01/05 14:12:05 ID:FLsRYf4k
そういえば、DigiKeyでattiny2313とかATMega48がやっと安定供給 状態になってきましたね。ATMega88はまだ品不足の模様。 (あと34個)
ポインタのポインタを受けたときは、 *(*ptr)++; などと横着しないで、 ローカルポインタを使って戻るときに書き戻すとサイズが減る。
>>544 たとえば、たくさんパラメータを渡さなきゃいけない関数処理があったとする。
効果を出しやすくするため、意味なく32bit整数を使っています(^^
#include <stdio.h>
#include <avr/io.h>
#include <string.h>
void func(uint32_t A,uint32_t B,uint32_t C,uint32_t D,uint32_t E)
{
PORTB=A+B+C+D+E;
}
int main ()
{
uint32_t A,B,C,D,E;
A=PINB;
B=PINB;
C=PINB;
D=PINB;
E=PINB;
func(A,B,C,D,E);
}
これだと関数受け渡しのために関数の入り口と出口で14回ものpushとpopが
挟まれてしまいます。その結果、上記プログラムは288バイト。
これを以下のように構造体アドレス渡しにすると、200バイトになります。
typedef struct
{
uint32_t A,B,C,D,E;
} ABCDE_struct;
void func(ABCDE_struct *ABCDE_P) {
PORTB=ABCDE_P->A+ABCDE_P->B+ABCDE_P->C+ABCDE_P->D+ABCDE_P->E;
}
int main ()
{
ABCDE_struct ABCDE;
ABCDE.A=PINB;
ABCDE.B=PINB;
ABCDE.C=PINB;
ABCDE.D=PINB;
ABCDE.E=PINB;
func(&ABCDE);
}
また、最初のプログラムで変数A,B,C,D,Eをグローバル変数にすると、 プログラムサイズは一気に368バイトにふくれあがります。 一方、構造体アドレス渡しプログラムで、構造体変数をグローバル変数にしても 238バイト、構造体はmain()のローカル変数にして、構造体のアドレスだけを グローバル変数にして、これを手がかりに構造体本体を直接参照できない (スコープ外)なところから参照しても220バイトにとどまります。 これは極端な例ですけど、できるだけ関数で受け渡すデータを少なくするように、 グローバル変数をできるだけ減らし、使うとしても構造体でアドレス参照になるよう、 sts/ldsを使わせずld/st命令を使わせるよう工夫するとコードが小さくなることが あるようです。うまくいかないことも多いですが。 また、多数の変数をコピーする必要がある場合 (Copy_A=A;Copy_B=B;・・・・など)、これらを構造体にして、 Copy_struct_data=struct_data;のようにするとブロックコピーを使うコードとなり ソースも生成コードも小さくなる場合があります。
大人気ないこと言って申し訳ないが、なんか Cでは関数コール時の引数は値渡しされる 要はこの一言で必要十分なんじゃないだろうか?
>>549 変数の実体ではなくポインタ渡しも可能だがし、文字列変数などは、ポインタ渡し
の方が普通だし。
「ポインタ」も「値」だというなら、逆に「値渡し」以外の変数の渡し方って
具体的になんだ?関数の引数を全部グローバル変数で渡すとか、でもグロー
バル変数も値渡しだよな?
横からスマソ。 初めてこのスレで勉強になった気がする。(>コード量)
>>550 何が言いたいのかいまいちよく分らないけど
>>549 は「
>>547-548 は結局Cでは関数コール時の引数は値渡しされるって
ことを知っていれば容易に想像できることだ」ってことですが。
「値渡し」以外の変数の渡し方って何だってことですが、値渡しってことは
わざわざカーボンコピー作ってるってことなわけで……ここまでいえば後は
説明は不要ですよね。
553 :
774ワット発電中さん :05/01/06 05:46:12 ID:+93KtM01
これ、本人の自画自賛以外のなにものでもない恥だよね ↓ 398 :774ワット発電厨さん :04/12/28 15:06:23 ID:tlUCQ25y そうね 某氏の物腰がソフトになって、 逆に親しみやすいメーリングリストになった感じ
>>549 ,552
長くなりすぎてスマソ。どれくらい効果あるかを具体的に示したかったもんで。
Windowsなどではポインタ渡しを意識するのは引数を変更して帰す場合とか、
めちゃくちゃでかいデータを与えるとき、文字列を扱うときくらいですよね。
それ以外の場合はめんどくさいので値渡しが普通かと。
しかしWinAVRでは値渡しのオーバーヘッドもバカにならないので、
それ以外の場合でも要検討ってことで。
>>550 グローバル変数はポインタ渡しの一種と考えて良いと思うよ。
共通の変数の変数名を介してアクセスしているし。参照先が変数を
変更すると変数自体が変更されるし。
>>552 それほど自明でもないよ。
>>547 がタイトルで書いているように限られたケース。
アドレス渡しなら呼び出し元変数アドレス(16bit)をセットしてcall、関数側ではレジスタにld命令で
読み込んでから使うので、引数1つあたり3命令かそれ以上。
値渡しならデータサイズ分だけ呼び出し元での変数からld命令でコピーしてcall、関数側では
既に一定のレジスタにあるのですぐ使える。引数1バイトあたり1命令かそれ以上。
なので、たとえコピーになる値渡しでも、変数サイズが小さいときは値渡しの方が有利と考えられる。
配列でないcharなんて関数内での変更を返したいと思わなければ値渡しがずっと有利。
引数の数が多ければ構造体を使うメリットが、引数のサイズが大きければアドレス渡しのメリットが増える。
関数が複数あって、各関数で引数が似通っていれば構造体にしてしまうのもいいかもと考える。
教えてください。 現在H8-3052をCPUにしてモータ制御をやってます。 モータドライバにTA8440を使ってPWM制御をしているのですが、 なぜか突然ハードウェアリセットが発生してしまいます。H8とTA8440は 直結しております。 原因が判らず、いろいろ試してみたところ、どうやらモータの正回転・ 逆回転の切り替えのときにリセットが発生しているのではないかな、と いうところまでは判りました。(NMI割り込みやRES端子も疑いましたが 問題なさそうでした。また切り替えをしないようにプログラムすると安定 しています) そこでお伺いしたいのですが、正回転・逆回転の切り替えの時には 一度モータドライバの状態をBREAKにしてから切り替えるようにしたほ うが良いのでしょうか? モータを突然逆転させようとすることがどうH8 に影響を及ぼすのか判らないので、どなたかご教授くださいませ。
モーターの電源とマイコンの電源がアイソレーションされていないなんて言う 基礎的な失敗をしていないか?
>>556 単にモーター負荷で電圧降下→リセットの予感。
もしブレーキして停止後逆転すると改善するなら
過負荷のためかも。
559 :
774ワット発電中さん :05/01/06 16:10:09 ID:xkjZIB89
558はバカかも。 モーターを使って怖いのは電圧上昇
>>559 いや、モーターの容量と電源に
よっては確かに考えられるが。
>>559 当然ダイオードでGNDへのクランプはしてるよな?って思っていたのだが。
それも要チェックだなあ。
ところで、PWMがONの(Chop=L)状態で正逆切り替えたら
変なことがおこる可能性はないかな?
Enable=LまたはBrake=Lにして、その間に正逆切り返した方がよくないかなあ。
とりあえずマイコンの電源の近くに100uFくらい入れてみてくれ。 それとパラで0.1uFのセラミック。 電源ライン(VCCとGND)を見ていて、モータの逆転のタイミングで 波形が揺れてなければいいんすけどね。
あと、例えば、定番のTA7291のモータドライバの取説には、 TA7291P/S/SG/F/FG 応用上の注意点 入力を切り替えたときに貫通電流が流れます。入力切り替え時 (正転⇔逆転、正転/逆転⇔ブレーキ) にSTOP モード (約100 μs) を入れてください。 電源の投入時やOFF 時には、IC のファンクションは保証できません。応用上問題ないことを確認の上ご使用くださ い。 って御丁寧に書いてあるんですが、TA8440の取説には、そんな事書いてないんですか?
やっぱ電源でしょ。 まさかVccそのままモーター駆動電源として使ってる なんてバカなことは(ry
あと、H8の場合(に限らずか?) WDTがアップするとリセットがかからなかったかな? ハードウエア・リセットが全く疑う余地なしだったら、だけど。
みなさま有り難うございます。 お忙しい時間だろうから夜に見直せばいいやと思っていたら沢山…(^^; ええと。 565さんのおっしゃるとおりです。とにかく軽量化をしたいとのことだった ので一つのバッテリでいきたいな……とやったのが失敗だったようです。 はい、大馬鹿でしたorz でも正逆の切り替えができていないようですので、561さんの方法と、つ いでに562さんの方法も試します。有り難うございました。
>>565 小型ロボットで、電源がニッカド6本で、そこからモータとマイコンの電源を作っている
っていうのはあるかも。
普通は、モータとマイコンで、電池を分けるんだけどねぇ。スペースの関係で
共通電源にせぜるをえないかもね。
まぁニッカドはモータに使って、マイコン部は006Pの9Vから三端子で5Vにするのが
オーソドックスかもね。
>>566 >注1: 出力.GND 間 (2 ヵ所)に上図のように、貫通電流防止用のショットキダイオード (当社製2GWJ42) 相当を接続してください。
これはやっておくべきだね。(やってなければ)。
P2を見ると、このダイオードは内蔵されているみたいだけど、これは逆起防止であって、貫通防止じゃないのかな。
内部は、2段、3段のダーリントンになっているんだから、普通の0.6Vなダイオードを外付けしてもいいんじゃないの?
ショットキーじゃなきゃダメ?誰か教えてください。
確かにTA8440Hは頻繁に壊れる 主に出力段が燃えているんだがロジック系にも地雷があるもよう TA8429Hは壊れたことないんだがなあ
>>569 ひとつ疑問が。
あの石使って逆転はできないと思うんだけど、どんな方法だろ。
リレー?
いずれにせよ正転から逆転に入る瞬間はとんでもないエネルギーを
消費するはずなのでそこらへんはPMWを活用して適当な加減速をつけないと
バッテリーの消耗が激しい。
どうでも急速な加減速が欲しいなら間にモーター端子間をショートする
ブレーキをつける。
でも、それってH8使わなくてもいいような気がするけど。
訂正。PMWでなくてPWM。
576 :
774ワット発電中さん :05/01/06 22:59:38 ID:qBKYmrhN
Hブリッジなんだから 当然逆転できます
あ、ほんとだ悪かった。スマソ(汗。
TA8440のVsとロジック系の電源をレギュレータやフィルタで分ける 必要がありそうですね。 それから、逆転時は一呼吸OFF時間を入れないとヤバイでしょうね。 SBDは内蔵されているDよりVfが小さいものでないと外付けするメリットが 無くなります。(VfはデータシートP.4参照) SBDをつけてもサージが無くなるわけではないのでロジック電源の保護は やった方がいいと思います。
579 :
774ワット発電中さん :05/01/07 02:17:45 ID:E4uQblcB
Vfだけじゃないよ。タイミングの問題もあるよ。 サージって言うなよ。貴重なエネルギーだぞ。
アフォな質問なんですが、AVR Studioでシミュレーションするときに EEPROMの初期値はどうやって設定するのでしょうか。 アセンブラで .ESEG eeprom: .DB $12 では だめだったのですが・・・
>>580 help見る限りではそれでよさそうなんだけどね。
そのラベル(eeprom:)が予約語だからだめって可能性はないですか?
582 :
580 :05/01/08 00:35:42 ID:0uGQ2Z1G
>>581 ラベルを変えて見てもだめでしたorz
Buildすると生成される
hogehoge.eep
というファイルを使うのでしょうか??
さっぱり分かりません。
すいません。質問なんですが、H8 3042Fへのプログラムの転送ができません。 マイコンとの通信速度が合ってませんとヘルプが出ました。 お願いします助けてください。
>>584 いってみます。レスありがとうございました
587 :
774ワット発電中さん :05/01/08 16:22:09 ID:KUUum1hc
「ヘルプが出ました」 今年はこのフレーズが流行る予感。
digikeyでATMEGA88 20M TQFP の在庫が一向に入らん。 製作にかかれん......。 ここ以外で、個人で購入可能なお店をご存知の方いらっしゃいませんか?
mega8でいいじゃん。88じゃないとダメな理由でもあるの?
590 :
588 :05/01/10 13:00:39 ID:InLKN5K1
mega8だとPWMが足りんのです。 当方、ロボットの製作をしておりまして、デジタルサーボの構成のために、 安価で多chのPWM出力を持ったデバイスを必要としている次第です。
591 :
774ワット発電中さん :05/01/10 14:21:36 ID:CMAmPFSO
お前のような技術力の低い者を対象にしたデバイスはありません。
>>590 ATmegaの20MHz駆動なら多チャンネルPWMくらいソフトウェアでできない?
そこでPSoCですよ
確かにPSoCなら一番ポピュラーな27443でも8ビット PWMなら8個持てるな。29466なら16個か。 (漏れの技量じゃそんなに管理しきれないかな)
>>590 mega48なら入手出来るんじゃないの?
>>590 ATMEGA88V-10AI-ND (10MHZ 32-TQFP)なら300個ほどあるみたいだけど、
20MHzじゃなきゃダメ?
あと、TLV5628みたいな、シリアルの8chDACとか。
598 :
588 :05/01/10 21:01:56 ID:u/tckIbH
みなさん情報有難うです。
ttp://elm-chan.org/works/smc/report_j.html このページのサーボシステムを4軸実装したいので、10Mだとちょっと余裕がないかな?
と考えておりまして、20Mを所望してるのであります。
同時に関節2箇所の逆運動学も解かせようと思っているので、スペックは高いほど嬉しい。
パッケージは製作しているロボット自体が小型なのでDIPだとちょっと辛い......。
手半田なのでMLFはさすがに勘弁........。
入荷するまで素直に待つしかないかな?
psocはちょっと難しそうです。
っていうかまてよavrって8bitマイコンだよな megaもそうだよなぁ? 逆運動とかせるのにそんなんでいいのかと 本気か?FPUも載ってないのに逆運動を すげーな
>>588 IPI はどうでしょう?
Webページのリストに無いものでも電話したら在庫があることがあります。
これで何度か助かりましたよ。
2相のカウンターが4本必要だけど、だいじょうなん? そのCPU。
602 :
588 :05/01/10 22:57:58 ID:PrxSdvwU
>>599 三角関数をテーブルで実装すると8bitマイコンでも意外と出来るもんですよ。
浮動小数点演算を行わないように式を工夫すると、案外高速に演算できます。
精度はそこそこですが、制御対象自体もあまり精密なものではないので、十分なのです。
お金があればSH4とかでバリバリやりたいのですが、何分、貧乏学生の身分なので......。
マイコンボード一枚に何万円も払えません.........。
>>600 IPIですか、明日電話してみます。情報有難うございます。
PSoCならデッドバンド付きPWM持ってるから、 このDead-Time Control部分なんかがそっくり 要らなくなりそうだけどCPUが遅いからなぁ。 いずれサーボモータ手に入れたら実験してみようっと。
>>598 そりゃたいへんですね。
できれば2つに分けて、両方に同じコマンドを与えて自分のモーターに対する物じゃなければ
無視する形にしたいところですが・・それは無理なんですね。
これを1つのCPUでやるってのもすごそう。出来たらどっかに公開して。
>>601 ELMさんとこみたら10MHzの2313で52kHzでチェックしてCPU負荷26%とか言っていますね。
エンコーダが4つになっても割り込み時間は4倍まではいかず2倍強って所ではないでしょうか?
20MHz駆動にして、増加する割り込みを2回に1回スキップして52kHz相当にするか、
TMR0を1/256にして26kHz/1950rpm相当で我慢しても良いならなんとかなりそうな。
サーボ計算は2313の10MHzで9%といってるし、mega化で短縮できそうだし、ELMさんとこ
みたいに多重割り込みを許してエンコーダ処理が止まらない様にすれば4つくらいは
いけることになりますね。
PSoCなら、そこのトップにあるスペアナ?も簡単だろうなぁ
606 :
599 :05/01/11 01:49:30 ID:1FbjNDAN
>>602 まず三角関数をテーブルにするのはメモリーを犠牲にして速度を稼ぐ方法なので、
mega88 みたら8Kだけど、基本的にかんがえないほうこうできたいもですよ
簡単に計算して5度ずつにsinを用意しても、出力の値が8bitで272byteになるけど
8bitマイコンだと整数演算でsinの値を出力できないから
Cなら構造体使って分母と分子に組み分けることがかんがえられるけど
そしたら644byteになる
一応これの打開策を挙げとくと、プログラム上にメモリを書き込んでおくんじゃなくて
起動したら別途メモリを確保してそこにプログラムの演算でテーブルを用意するとか
もちろん起動のたんびにテーブルを用意する必要がでてくるEPPROMだっけあれに書き込む
てもあるけど、そくどがおそくなる、メモリにロードしてもいいけどそれだけでプログラム容量を食う
で、浮動小数点じゃない少数の扱いだけど↑でかいた構造体使うにも
基本的に正の数で256〜0.0039程度まで小数点を扱えるけど
マイナスを表現しないなら少し犠牲を…
約分が大変だからこれもネック
つぎに、浮動小数点だけどgccで使ってると思われるIEEEの規格上のは16bit
つまり処理するだけで最低4クロック以上費やす、もちろん4クロックどころじゃなくて
足し算しただけでもそれの何倍かになるだろうけど
まあFPUついてないからなかでbitシフトの連続だろうからまあ
ちょっと使っただけど、速度の点でボトルネックになるのと問題はプログラム容量を
やたらと食う
私はちょっと前に2313でPID速度制御実験をしたんですが、
まあ私のプログラムが今思っても汚いのもあってそれだけで
1Kのフラッシュが結構埋まりました、他の事を欠く余裕がありませんでした
#C言語をつかってますが
ちなみに、私も貧乏学生です、ってか私の場合はつぎ取り掛かるのでは
トラ技H8を使うことにしてます、
資料が多いいのが利点です、ですがここでも小数値の扱いが非常に…
あとPWMのポートも少ないですね、いざとなれば3048にするてもありますし
そんでアドレス、バスつかって外部にICつけまくてワンチップじゃやってらんねー
と叫ぶ…
607 :
774ワット発電中さん :05/01/11 02:34:10 ID:sYHbMz9B
>>606 オマエバカだろ。 x=sin(x) を知らんのか?これを利用して加法定理と周期性を利用して計算すれば良いんだよ。
>>607 orz
周期性忘れとった、4分の1か...
で、その、加法定理を利用してというのが、
マクローリンを2次の項をとるのと同じですか?
609 :
774ワット発電中さん :05/01/11 03:46:49 ID:sYHbMz9B
> マクローリンを2次の項をとるのと同じですか? ちゃうだろが。 この方法の利点は、精度が欲しければ有効桁増やして計算すれば良いこと。 テーブル方式や、多項式近似式の計算では有効桁を替えるにはテーブルの数値や 近似式の係数を替えなければ成らないからね。
まあなんだ、がんがれw
>>606 テーブル引きで行くとしても、符号なし固定小数点16bitでいいんじゃない?
分母とやらを32768決め打ちにすればいいわけ。構造体なんかいらない。
sin(0)〜sin(π/2)まで、最上位ビット=1の固定小数点で1/256rad刻み
(0.0039rad、,0.22°刻み)でも806バイトにすぎない。2313ならともかく、megaなら問題なしでは?
間は16bit精度なら単なる直線補完でもそこそこいけると思うが。
cos(x)=√1-sin^2(x)のために平方根演算が使えるなら0〜π/4でもいいけど
そこまでやるなら
>>607 でもいいかなあ。
613 :
611 :05/01/11 10:05:37 ID:SMAy1tJW
>>612 へぇ〜なるほど。加法定理のA,B部分をそのまま位相の上位8bit,下位8bitで行うんですか。
上位のテーブル範囲を0〜π/2とすればSINとCOSは兼用できる(256-xを与えればいい)ので1つでいいし、
下位については0〜0.35°の表だから、テーブル引かずに引数xと、1-x/2で代用してもいけるかも。
うまくいけば512バイトでかなりの精度だせますね。
614 :
774ワット発電中さん :05/01/11 11:48:54 ID:62KiCPTK
なにチンタラテーブル引きなんてやってるんだ? 三次スプラインでFAだろ。
>>614 計算減らしたいからってとこでは。
megaならともかく旧AVRなど乗算命令ないやつならテーブルしたくなる。
5°ステップ程度のテーブルで3点とって2次近似程度でいいのでは? いったいどれくらい正確な三角関数表がいるのだろう? x-α,n,n+αに対してsin値がp,q,rなら、 sin(x)≒a(x-n)^2+b(x-n)+cで a=(x+z-2q)/2/α^2、b=(z-x)/2/α、c=q αを1/2^nの形にすれば割り算なしでOK
617 :
774ワット発電中さん :05/01/11 13:08:22 ID:62KiCPTK
スプラインなら次数高くなくて良いし、(三次式で十分) 区分の点も少なくてすむ。テーブルのように均一に値を持って置かなくても良いからだ。 で、かけ算すら苦痛になるってのはおかしいだろ。 インバースキネマティクスに使うんだろ? 三角関数の後にかけ算が何個有ると思ってるのだ。 三角関数はスプラインで片づけて、空いたメモリで別のテーブル作って 別の部分を高速化すればいい。
618 :
774ワット発電中さん :05/01/11 13:14:27 ID:62KiCPTK
まぁテーブル+線形補間でも均一に持ってる必要はないが、 スプラインなら曲率に応じてかなりすっ飛ばしても精度が保たれる。
因みに ID:62KiCPTK は標本化定理もわからない例のQな。 Over 30 学位とれず2CHに張り付くしか能はなし。 スルーよろしく。テーブルの一つも作ったことないよ。まともに相手すると時間の無駄だからねー。
620 :
774ワット発電中さん :05/01/11 13:56:19 ID:62KiCPTK
高卒wGYQ/EIqの妄言:「サンプリングでは帯域制限なんか絶対されないんだ!AAFが帯域制限の原因なんだムキー!!!」 一流院生によるチェックメイト: 「ほう、ならAAFを外せばCDは60KHzの音も記録・再生できるというわけか。乙。」 高卒wGYQ/EIqの断末魔:「サンプリング定理に帯域制限されるなんて書いてない!ムキー!!」 一流院生によるとどめ: 「サンプリングで帯域制限されるとは何度も書いてるがサンプリング定理で帯域制限されるなどとは 一度も書いた事がない。日本語すら読めない高卒哀れ。マジ哀れ。」
つーか、一寸花を植えたいのだが?と質問したらユンボが良い!!それ以外を使う奴は高卒と 叫んでるようなもんだ。
622 :
774ワット発電中さん :05/01/11 14:03:00 ID:62KiCPTK
高卒wGYQ/EIqの妄言:「フーリエ変換もウィナーフィルタも世の中にあるものは全て偽物だ!疑似だ!そんなものは実現不可能だムキー!!!」 一流大学大学院生によるクリティカルヒット: 「離散化とは高卒以外にとっては帯域制限以外の何物でもない。 よって高卒以外で離散化を疑似フーリエ変換とか疑似ウィナーフィルタなんて言ってる奴は世界に一人もいない。 ググっても0件だ。」 高卒wGYQ/EIqの妄言:「周波数領域ではデータが全部そろわないと計算できないんだ!実現不可能なんだムキーー!!」 一流大学大学院生によるクリティカルヒット:「有限長カーネルのコンボリューションは帯域制限付き窓つき短時間フーリエ変換と等価であり、有限長カーネル・窓のコンボリューションを使った実時間周波数領域フィルタは幾らでも実用化されている。 そもそも世の中のDSPのほとんどがこの目的で使われている事すら知らないとはあまりにも哀れ。」 高卒wGYQ/EIqの妄言:「サンプリングでは帯域制限なんか絶対されないんだ!AAFが帯域制限の原因なんだムキー!!!」 一流大学大学院生によるチェックメイト: 「ほう、ならAAFを外せばCDは60KHzの音も記録・再生できるというわけか。乙。」 高卒wGYQ/EIqの断末魔:「サンプリング定理に帯域制限されるなんて書いてない!ムキー!!」 一流大学大学院生によるとどめ: 「サンプリングで帯域制限されるとは何度も書いてるがサンプリング定理で帯域制限されるなどとは 一度も書いた事がない。日本語すら読めない高卒哀れ。マジ哀れ。」
623 :
774ワット発電中さん :05/01/11 14:03:45 ID:62KiCPTK
荒らしのレスなんて相手にする必要が無いと証明されたんじゃないの? こんなゴミを板中に貼り付けて回るなんざとてもまともとは思えない。
>>623 発言には「高卒」を入れてくれ
NGワードで消えないじゃねーか
626 :
774ワット発電中さん :05/01/11 14:13:15 ID:62KiCPTK
PNMUJOuA=wGYQ/EIq乙。 次はどのIDにする?プククククククク
>>619 まともっぽいのですぐには気づかなかったけど、さっき別スレで同じID見たから知ってるよ。
しかし(内容はともかく)このスレでは普通に発言しているのをつけ回して煽って発症させている
お前の方がこのスレでは最低。
たのむからいい加減にしてくれ。
同一人物じゃないの?>62KiCPTKとwGYQ/EIq
○| ̄|_・・・・
何というか2chブラウザで透明あぼーんして完全に消し去ったら終わりじゃないの? 漏れはかなり前からそうしてる。 そうでもしないとスレッドがゴミだらけで見難くて仕方ない。
ついでに言うとまともっぽいことを行っている場合でも余所を荒らすような輩は 人に何かを教える資格など無い。
634 :
774ワット発電中さん :05/01/11 14:32:07 ID:62KiCPTK
>>629-630 んな訳ねーだろ。
論破されたらID変えつつ自作自演か?
哀れなものだな。
>>627 知ってるならOK。他意は無いよ。でも相手するにふさわしいかどうか目安にはなるでしょ。
>>629 >>630 それは違う。潰してもいい過疎スレだからやっただけ。ここではやらないから。
636 :
774ワット発電中さん :05/01/11 14:38:28 ID:62KiCPTK
>>634-635 まあ同類には違いないと認識。できれば隔離スレで仲良くしてくれ。以後スルーします。
>>638 勘違いするなよ。
62KiCPTKが普通に書き込んでいれば普通に相手するからね。あなたにもね。
>>639 >普通に書き込んでいれば普通に相手するからね
それはどうぞご自由に。
>あなたにもね。
どうもありがと。
スレ趣旨と関係ないこと書いてる俺の ID:wGYQ/EIq はスルーしてもらっていいよという意味ね。
sinは単に三角波で近似しても、案外うまくいく、、、、事もあります。 なんつったって計算が速いし単純だし。 まず三角波でやってみてダメならちゃんとテーブルSINっていうアプローチでもいいんでは? テーブル作る必要がなければ、ATMega48で入るかもしれないし。
>>643 なんか通信のオーバーヘッド見て使う気失せたのを覚えている・・・・
>>642 三角波はどうかわからないが、10°刻みで10点くらいのデータで±0.2%
(有効桁9bit)くらいでは得られるようだ。これくらいで充分なら楽だし。
三角波で誤差の増える頂点部分を少し曲げた折れ線で近似する (六角波?近似)というのも手かもね。
646 :
774ワット発電中さん :05/01/11 21:18:53 ID:BjmBz8V8
>643 なんかPICみたいな気がするのでつが スピード的にどうでつか?
648 :
774ワット発電中さん :05/01/11 23:05:57 ID:ss6zK9Yj
やっぱPICぽいね。
>>647 浮動小数点でもどうだろ・・・話題のsinなど、数msかかる演算が並びますね。
うまくこいつと同期して演算できるといいんだけど。
その引用レス書いたの俺だ・・・
1チップマイコンで複数個(2〜6個位)のフルカラーLEDの各色、各LEDの明るさを自在に変えたいのですが コンパクトに実現する何か良い方法があれば教えてください
>>651 6個のフルカラーLEDをコントロールって事は18個のコントロールですね。
足(出力ポート)の多いマイコンでソフトウェアPWM手っ取り早いと思う。
ダーイナミーックドリャーブってのはどうか 電流制限抵抗は小さめで ポート少なくてすむぞ
>>653 あーそうか、ダイナミックでも行けるかなあ。
赤青緑で制限抵抗値は異なるから、2つのフルカラーLEDを6本で制御して、
これをダイナミックで3セット駆動って感じ?
デューティは最大1/3になるんで、暗くなるのを補うため多少電流高めにしてもいいかな。
>>654 赤,青,緑それぞれにPWM出力を割り付けて、コモン側を1/6の時分割駆動でも問題
ないと思うが?
3本のPWM出力をハードウェアで同期制御できるマイコンでないと、タイミング的に
厳しいかもしれんが、ATmega8程度の処理能力があれば、0.15mS間隔のタイマー
割込とソフトウェアによる擬似PWM出力(1/16分割)とダイナミック点灯方式でも
十分いけそうな気がする。(RGB各4bitで4096色)
ダイナミック点灯の場合、電流補強で大概ドライバーを追加する けど、隣のビット同士でターンオン・ターンオフのオーバーラップ が発生するので正直にデューティを1/6にはできない点に注意。
>>656 多桁の数字を表示するんじゃなく色を制御するんだから、オーバーラップは気にならんと思う。
>>655 3本PWM×3バンクと6本PWM×3バンク。
3to8デコーダーなどを使わなければどちらも必要な出力ピン数は9本。
あとは、ドライバ(トランジスタ)が3つで済むがソフトウェアPWMを6つ制御せにゃならない、最大Dutyが1/3の前者と
ドライバが6ついるがPWMは3つでいい、最大Dutyが1/6に制限される後者との比較かな。
この場合のPWMだけど、たとえば16階調で単純に1/16〜16/16とするより、もうちょい細かく(6bitくらい)して、
対数的(たとえば約√2刻み)にしたほうが見た目にはリニアに明るさが変わっているように見えます。
平均電流でリニアに変化させると暗い方で明るさの変化が目立ってしまいます。
フルカラーLEDだと色の合成的にはどっちが有利かな・・・
これを10MHzAVRのTMR0オーバーフロー割り込みでやるとなるとプリスケーラなし、6本PWM×3バンクで
点滅周期200Hz、3本PWM×6バンクで100HzってとこなんでかろうじてOK?
660 :
655 :05/01/13 10:27:41 ID:LQQCv6by
>>656 セグメント切替時に...
(1) 全セグメントOFF
(2) PWMデューティ比(R,G,B)再設定
(3) 次セグメントON
といった処理を行ってセグメント切替時にデッドタイムを設けることで、オーバー
ラップは回避できると思う。
また、内蔵タイマでPWM(任意のデューティ比の任意周波数パルスを出力する)モード
がサポートされていなくても、ワンショットモードに設定した3ch(または6ch)の
タイマを、(2)の処理で出力パルス幅の設定と、起動トリガを掛けるようにして、
一連の(1)〜(3)の処理を別のインターバルタイマ割込ルーチンで呼び出すといった
方法も可能だと思う。
>>659 PWMのデューティ比が、リニア制御ではなく、対数制御の方が好ましいのは判るが、
ソフトウェアPWMではタイマの割込周期の設定が難しいのではないかということで、
あえて簡単なリニア方式とした。MCU内蔵周辺回路のハードウェアPWMが使えるなら
対数換算テーブルを使うのが手っ取り早くて、CPU負荷も少ないと思う。
> これを10MHzAVRのTMR0オーバーフロー割り込みでやるとなるとプリスケーラなし、6本PWM×3バンクで
> 点滅周期200Hz、3本PWM×6バンクで100HzってとこなんでかろうじてOK?
バンク数が多い方が、バンクあたりの点滅間隔を短く(全体の周期を早く)しな
ければちらついてしまう。
3バンクで点滅周期200Hz(バンクあたり200/3=約60Hz)は問題ないと思うけど、
6バンクで点滅周期100Hz(バンクあたり100/6=約16Hz)は明らかに遅すぎで、
400Hzの間違いでは?それとも点滅周期の言っている意味と漏れの理解が違う?
>>660 えーと急いで書いたので何か間違ったのかも。
点滅周期はバンクも考慮して書いたつもりです。
つまり6バンクの値は10ms間隔で0〜1.6msecの点灯ってこと。
60msec間隔0-10msec点灯ではありません。それは流石にチカチカでしょう。
100Hzでもきついかな?と思ってるので6LED*3バンク,Max200Hzの方がいいかな?と思ったんです。
megaでも奢って20MHz駆動したらどっちでもいいんでしょうけど。
検算ついでにもう一度書いてみる。
10MHzAVRでプリスケーラーなしTMR0をフリーランで突っ走らせると25.6us毎。
64bitPWMならPWM周期は25.6*64=1.6384ms
でもって、6バンクなら点滅周期はその6倍で9.83ms、約100Hz
3バンクなら点滅周期はその3倍で4.92ms、約200Hz
って考えました。
バンク数が多いほど点灯時間も短いので周期を短くしたいってのはその通りなんですが、
バンク数が多いほどソフトウェアPWMで可能な周波数も減少していくと言うわけでこの値がデマした。
まあリニアなら4bitで済むわけで、2bit=4倍楽だからリニアって解もありだと思うんですけど、
ついつい欲張って考えてしまいました(笑
しかしmega8ってPWM3つ持ってるな。これですませた方がいいかも。
デューティ比と見た目の明るさは直線的にはならないので、 PWMにはもっと分解能が欲しいな。
ハードウェアPWMが使えるなら8bitで無問題だから楽できそうですね。 PWM周期も20MHzなら8bitで78kHzがOKだし。
>>664 たぶん、6chは8bitと16bitが混じっていると思われる。
まぁLEDだからかなり遅くしても大丈夫でしょー
666 :
655 :05/01/13 12:35:59 ID:LQQCv6by
>>661 > 10MHzAVRでプリスケーラーなしTMR0をフリーランで突っ走らせると25.6us毎。
> 64bitPWMならPWM周期は25.6*64=1.6384ms
> でもって、6バンクなら点滅周期はその6倍で9.83ms、約100Hz
> 3バンクなら点滅周期はその3倍で4.92ms、約200Hz
これって、25.6uS毎(39kHzで)にタイマ割込が発生させるってことですよね?1命令
実行あたり2クロック、割込のオーバーヘッドを無視して単純計算しても、1回の割込
でたった128命令しか実行できません。実際には、メイン側の処理や2クロック以上
かかる命令条件分岐もあるから、かなり厳しいのでは?
LEDの発光くらいならまだマシですが、モータなんかが相手とかだと無駄にPWM
周波数を上げても、駆動する相手が追従してくれないんで、コギング(滑らかに
回転せずカクカク回る)などの他への影響がない範囲で可能な限りPWM周波数は
下げた方が効率がいいです。
それによって、駆動回路のターンON/OFF時の遅れやパワーロスがPWM全体に占める
影響も少なくなりますし、単位時間あたりの割込回数が減るので、CPU負荷(占有)
率も下がります。
で、ちらつかない点灯周期(バンクあたり50〜60Hz以上)から逆算して、3バンクなら
150〜180Hz、6バンクなら300〜360Hz程度が推奨ってことで。割込の周波数はさらに
×PWM分解能(16階調なら×16倍)なのは、言うまでもありませんが、ハードウェア
PWMがあれば素直にそちらを使うべきでしょうね。
>>662 何らかの方法で素子のばらつきを補正しない限り、PWM分解能を上げても机上の
空論、エンジニアのオナニーで終わる。
>>665 さすがに16bitにしたら256分周の8bitと同等だから
>>661 と同程度遅くなるぞ
16bitタイマのPWMでもWGM13-0設定でカウンタ上限を$00FFにすれば8bitとして使えるじゃないの?
>>666 >1命令実行あたり2クロック、割込のオーバーヘッドを無視して単純計算しても、1回の割込
>でたった128命令しか実行できません。
ん?分岐などを除けばほとんど1クロックじゃない?
レジスタ退避(Zと2レジスタあればOK) 4*2=8クロック
lds命令でZレジスタロード=3*2クロック(カウンタ変数とPWM値があるレジスタ)
カウンタ変数をload=2クロック
カウンタ変数をinc=1クロック
カウンタ変数のsave=2クロック
PWM値をld Rn,Z+でロード、カウンタ変数と比較、結果によりポート操作:(2+1+2+2+1)*6=48クロック
レジスタ復帰:8クロック
割り込みオーバーヘッド:4クロック
ってな感じで80クロック程度で行けるかなと思ったのですが。
あ、SREG退避復帰忘れた。4クロック追加ね。
mega8のUSARTの送信実験をしようとしてるのですが マニュアル通りに UBRRH = (unsigned char)0; /* ボーレート設定(上位バイト) */ UBRRL = (unsigned char)51; /* ボーレート設定(下位バイト) 9600 8Mhz*/ UCSRB = (1<<RXEN)|(1<<TXEN); /* 送受信許可*/ UCSRC = (1<<URSEL)|(1<<USBS)|(3<<UCSZ0); /* フレーム形式設定(8ビット,2ストップビット)*/ と初期化してその後仮にAを送信しようとして data = 0x41; NOP(); while ( !(UCSRA & (1<<UDRE)) ); /* 送信バッファ空き待機*/ UDR = data; /* データ送信(送信開始) */ という具合にやってPC側ポーレート9600で受信させてるのに認識してくれませんorz 何か思いつく原因あったらあげてもらえないでしょうか? あ、U2X=0としてます
UCSRCにアクセスするには何かおまじないが必要じゃね? ボーレートは UBRR = 51; でいけるかと(avrgccの場合)。
>>670 まんまデータシートのサンプル通りですね。問題はなさそうだけど、
PC側要因
*受信側が9600bps/8bit/2stopbitになっているか?
*PC側の受信ソフトが接続しているCOMポートではなく別のCOMポートを見ていることはないか?
接続要因
*接続が間違っていないか?マイコンのTxDがPCのRDにちゃんと行っているか?
*232Cレベルコンバータは使っているか?使っているなら接続は正しいか?電源は行っているか(w だけどありがち)
ソフトウェア・AVR側要因
*DDRDは・・・・設定不要のはずですねえ。
*つけたクロックはホントに8MHzか(瀑)
*そのルーチンは確実に実行されているか?適当なところにLED点滅操作でも挿入してみよう
全部大丈夫なら、232Cレベルコンバータの向こう側でRxDとTxDをつないで、
UDRで0x41が読み取れるかテストするプログラムを作ってみてはいかがでしょうか?
スマソ。勘違いしてたorz....
>>671 URSELビットさえ立てていれば書き込みに関してはちゃんとUCSRCに書き込めると思う。
読み込みは2度読みしなければいけないようですが。
> *つけたクロックはホントに8MHzか(瀑) ダウンロードに成功していれば、クロックは発振しているんでわ?いずれにしろ、 mega8が動いているか確認していないなら、まずはそっちから追うべきだろうね。 (1) ダウンロード後、ISPモードのまま。(ありがち?) (2) リセットが掛かりっぱなし。 なんて可能性も。 それと、送/受信を許可するのは、ボーレートや通信フォーマットなどを設定した 一番最後の方がいいと思う。オシロがなくても、一時的にボーレートを110bps位に 下げて、TxD出力にLED+プルアップ抵抗を付けておけば、送信データが出ているか どうか、目視確認できると思う。
ATmegaの命令クロック数を把握してないんで、大雑把に計算しただけなんだが、
元記事の
>>651 がフルカラーLEDの制御の他に何をやりたいか判らんけど、CPUの
処理能力をほとんど割り込みにとられてしまうのはどうかと思っただけ。
例えば、外部からシリアル通信経由でフルカラーLEDの色や輝度をコマンドで
制御するとか、6個のフルカラーLEDが時計になってるとかね。
処理時間を節約するなら、変数をRAMに格納せず、CPUの汎用レジスタをワーク
に使うとかって手もある。漏れの仕事ではないがRAMを一切使わない8085Aを
使ったLED表示付きテンキーパッドとか実際あった。
679 :
651 :05/01/13 16:17:10 ID:8BoXsD5T
たくさんのレスありがとうございます。 少し説明不足ですみません。 使用目的はサイリュームの電子バージョンみたいなのをフルカラーLEDを使って作りたいのですが そのフルカラーLEDの制御です。 PWM、ダイナミック駆動で実験してみようと思います。使用中にLEDが動く物なので結構高速に 切り替えないと光跡が点々になってしまいそうですね LEDの制御以外に行う処理は基本的に無いのでCPUはLEDにかかりっきりでも問題はないんですが あまりCPUを使うと電気を食うかな…?バッテリー駆動なんで消費電力はできれば抑えたいので…
>>677 >フルカラーLEDの色や輝度をコマンドで制御
そうだね、勝手に秋月のAVRホタルみたいなのを想像していたよ。
そういう用途ならやりすぎですね。
>>676 >ダウンロードに成功していれば、クロックは発振しているんでわ?
いやこれは、実は10MHzセラロックがついていたってことはないでしょうね?という意味。
> 110bps
これもいいアイディアですね。LEDを振ればビットパターンが見えそうだし
>>679 >使用中にLEDが動く
厳しいな・・・できるだけソフトウェアじゃないPWMがおすすめですね。
>あまりCPUを使うと電気を食うかな…?
まあそうですねえ。mega8の20MHz,5V動作で25mAってところみたいですね。LED1個分以上あるか。
周波数下げるか、SLEEPをうまくつかうか・・・
皆さん回答ありがとうございます。 現在クロックにはセラロック8Mhzを使用しています。(表記が8,00Tの秋月の物) ルーチン確認のためにLED点灯プログラムをつけてみましたが正常に動作しています。 デジタルオシロがあるのでデータが出ているかどうかも確認してみましたが方形波 できちんと出ているようです。 PC側の状態確認としてTERATERMというソフトで確認していますが きちんと9600、STOP2bitdata8bitになってることを確認しました。 RS232C変換としてADM232ANを使っていますが確認してみましたが配線ミスではないと思います。 むしろRS側のポーレートを適当に変えるとxとか噛とか出てくるのでデータは来ていると思います。 これからUDR側で読み取れるかちょっとやってみようと思います。
>>682 あ、お城もあるんですか。
それじゃ問題がAVR側かどうかは一発でわかるんじゃない?
どんな波形ですか?AA力を駆使して(w書いてみて。
データが行くことがあるってことは少なくともTxDはつながってるのね。
もちろんGNDどうしはつないでますよね?
____ ___________ ____ _____ | | | | | | | | | | | | | | | | | | | | | | | | _____| |___| |___| |_____| |__ シリアルポートRXDの波形がのこんな感じです、振幅が-8から+9位ですね 5番のGNDとAVR側のGNDも繋いであります ちなみに念のためと思って水晶発振子4.9152MHZ繋いで27pのコンデンサ繋いで UBRRL = (unsigned char)31にしてみました 結果はひたすら を出すようになっちゃいましたorz
__ ____ __ _____ || | | | | | || | | | | | || | | | | | || | | | | | __||_| |___| |_ | A、AAって難しいです・・・とりあえずこんな感じです、形は見た感じきれいです
>>684 ずれててわかんねーーー
とりあえず0x41なら、104usecごとに
 ̄ ̄ ̄ ̄ ̄s_0 ̄1_2_3_4_5_6 ̄7_s_s_| ̄ ̄ ̄ ̄
って感じだと思うのだけど、(sと数字はそれぞれ右側がstart/stopbit,bit0〜bit7)
>>685 各パルスの幅がわからん・・・・
んじゃ、Hiが何uS,Loが何uS・・・って感じで書いてみない?
>>686 ごめん、違っているかも。もう出勤だからまたあした。
>>688 S01234567ss = 0-10000010-11 、232C上は0が+12V、1が-12V で、
____| ̄|_| ̄' ̄' ̄' ̄' ̄|_| ̄|_._.__
でいいかな。
>>685 となんとなく似てるけど。
すいません、かなり返信遅れましたm_m えっと、間隔としては スタートビットからH0.5msec、L0.5、H2.5、L0.5、H0.5、Lになって終了です 波形の形としては689さんのと一緒だと思います って・・・ん?これはまさか送信速度がおかしいのかやっぱ?
>>682 文字化けしながらも何らかのデータが受信できているようだし、mega8側PC側とも、
単独では問題なさそうですね。
もしかして、TxD/RxD信号だけ繋いで、端末(PC)側のシリアルポートのGND(25Pin
D-Subなら7番,9Pin D-Subなら5番)と、mega8ボード側のGND同士を繋いでいない
とかないですかね?
>>679 ダイナミック点灯は人間の目の残像現象に依存しているから、表示ユニット自体が
移動するなら、ダイナミック点灯(PWM)周期を短くして回避するか、移動速度が
あまり速いようだと、ダイナミック点灯方式は使えないかもしれません。
>>690 19200bpsだね・・・
U2Xはほんとにクリアされてます?
>692 初期状態が0になってるので大丈夫だと思うのですが・・・ 念のためcbi(UCSRA, U2X)と書いてみましたがやっぱりだめです・・・
>>690 >スタートビットからH0.5msec、L0.5、H2.5、L0.5、H0.5、Lになって終了です
...ひょっとして、0x41 を1回送るだけで繰り返し送信はしていない?
>683
再度チェックしてみましたがきちんとGND同士繋がってました
>694
う、確かにそこの書き込みだけ見るとそう見えますね
でもfor(;;)で囲んであるのと
実際
>>682 の通りLED点灯←点滅のプログラムも入れてますのでそれはないです。
>>694 while行の最後にセミコロン(;)があるから、そうだね。っていうか、それはわか
っていると思っていたんだが?
while(1)
{
if((UCSRA & (1<<UDRE)) ) /* 送信バッファ空き*/
UDR = 0x41; /* データ送信(送信開始) */
}
とかしないと、連続で送信しないわな。
9600boudってことは1秒のビットレートが9600って意味じゃないのけ? ちゅうことだと、1/9600だからH/Lともに0.1ms強じゃね?
698 :
670 :05/01/13 22:59:40 ID:Yzyi0oHz
うう、ちょっと自信なくなってきたので今のメイン部分のリスト張っちゃいますね int main(void) { char data; cbi(UCSRA, U2X); cli();/* disable global interrupt */ nop(); UBRRH = (unsigned char)0; /* ボーレート設定(上位バイト) */ UBRRL = (unsigned char)31; /* ボーレート設定(下位バイト) 9600 8mhz*/ //注: このコード例はデバイス定義ファイルがインクルードされることが前提です。 //初期化コードと併せられます。 outp(0xff,DDRD); outp(0xff,DDRB); for(;;) { nop(); data = 0x41; outp(0x01, PORTB); wait100ns(1000); outp(0x00, PORTB); wait100ns(1000); nop(); UCSRB = (1<<RXEN)|(1<<TXEN)|(1<<RXCIE); /* 送受信許可*/ UCSRC = (1<<URSEL)|(1<<USBS)|(3<<UCSZ0); /* フレーム形式設定(8ビット,2ストップビット)*/ while ( !(UCSRA & (1<<UDRE)) ); /* 送信バッファ空き待機*/ UDR = data; /* データ送信(送信開始) */ data = 0x41; UDR = data; /* データ送信(送信開始) */ sei();/* enable global interrupt */nop();nop();nop(); } }
699 :
692 :05/01/13 23:12:13 ID:E5P0wGSN
>>697 ほんまや、1桁間違えた。
そうすると、2000bps??わけわかんない・・・・
>>698 とりあえずOKだね。
UBRR=31ってことは、今は水晶発振子4.9152MHzなんですね。
これで2000bpsになっちゃうってことは、1MHzで動いているって事だ。
・・・・もしかして内蔵RCオシレータが動いていませんか??
>>670 BPSの値から言うとやっぱりそうなっちゃいますよね・・・
書き込みにはELMさんのISPライターを使っててhex書き込む際に
Device: ATmega8
Mode: Both
Low: 76543210
||||++++-- CKSEL[3:0] クロック源選択
||++-- SUT[1:0] - Startup Time選択
|+-- BODEN (1:BOD無効, 0:BOD有効)
+-- BODLEVEL (1:2.7V, 0:4.0V)
とあってそれとマニュアルを見ると
CKSELは1111でいいと思うので
avrss /fl01101111 test.hex
のような形で書き込んでいるのですがこれではだめなのでしょうか?
avrssはヒューズビット設定はHEX値だよ avrspだとBIN値でもいけるが。
avrxsは確か16進入力のはずだよ。 32bit版でいつの間にか2進入力になっているのに気が付かないで リセット無効にしちゃったよ(w
>>701 >>702 な、なんだってーorz
今日はちょっともう実験できそうにないんで明日報告しますね
皆さんどうもありがとうございましたm_m
704 :
699 :05/01/14 07:15:49 ID:cnpbuEOB
>>703 とりあえずヒューズビットを読み込めばはっきりしますね。
EZ-USBとか、8051とか、やってるスレないの?
ここでどうぞ。
707 :
670 :05/01/14 17:08:01 ID:kxVRx72Q
結果報告です、やっぱりヒューズを2進数で書いてたのが原因でしたOTL 16進数で書き直した所一発でAの表示が返って来ました・・・ みなさんどうもありがとうございましたm_m
>>707 オシロが役に立ったね。
はじめっからクロック周波数を疑って確認プログラム(LEDピコピコ)でも走らせれば良かったな。
H8MLのワサビいくら何でも鬱陶し過ぎる。 ML止めました。
>>709 そういうのはML止める前にMLに書け。ここに書くな。
711 :
651 :05/01/14 21:21:55 ID:ZLzdcmG/
埼玉県在住なんですが秋葉原でATmega8とかATmega48とかを売っている所ってどこがありますか? mega48はITプラザで扱っているようですが4個セットなのでできれば単品で売っているところを探しています
おまえら! ATmegaとかATtinyとかどうやって書き込んでますか? やっぱりchan氏のライターですか? 万能のライターとか無いのかな・・・ 秋月ライター使ってたがアップデート無いし見限るべきか・・・。
>>712 最初は秋月ライタ買ったけど、今はSTK200互換ライタ。
AVRがライタと基板を行ったり来たりするデバッグなんてありえない。
>>712 俺もSTK200互換ライターだな。
メジャーなのでライティングソフトが選べるのがうれしい。
書き込みソフトウェア部分が完全にPC側なので、書き込みソフトウェア
だけアップデートすればいいので面倒がないのがうれしい。
でもそろそろUSB-serialに移行したい。共立のでも飼うかな。
715 :
ど素人 :05/01/14 23:04:31 ID:VGy+cuVB
2313もTiny26もmega32もAVR-ISPでやってるけど、 Tiny26のリセットピンをIOピンに書換えた時はあせった リセット→IOにはできるけど逆はできないと気づいた しかたなくSTK-500のパラレルで戻したけど
>>717 そこが更新してくれて最近のデバイスも焼くことができればいいんだけどなぁ・・・。
STK200互換のが今は一番汎用性あるのかな。
>>711 http://www.wakamatsu-net.com/biz/ にatmega8がありますね。945円だそうです。
まー男ならDigi-Keyで大人買い(25個で@260円)だが。(25個までは@415円)
ATmega48はDigi-keyの大人買いで@192円。
Digi-Keyの送料は2000円なので
945*n = 2000 + 415*n により4個以上買うならDigi−Keyの方が安いし。
なんで秋月にATMegaシリーズを置いてないのか、誰か大人の事情を教えてください。
720 :
774ワット発電中さん :05/01/15 13:00:10 ID:dXu0FvTc
古いヤツの在庫が捌けなくなるから、ではないかと あまり売れてないのかなぁ
秋月は、不良在庫化した4433が無くなればmega8あたりを始めると思われ。
724 :
651 :05/01/15 14:33:27 ID:boWzm+LJ
>>719 ,721
レスありがとうございます。
単品だと結構良い値段しますね…orz
ITプラザでmega48を4つ買って使わなかった分は後で使い道を考えます…
みんな、rsコンポーネンツのリクエストシートに「ATMEGAシリーズも取り扱ってくれ」って入れてくれ。 (AT90S8515-8PCとかはあるんだがーしかも@1900円(-_-メ)
ATmega48をDigiKeyで100個 単価176.94000で買って17694円。送料2000円で19694円。消費税入れて 20678円。 これを単価500円(送料別)で売れば、50000円で、30000円の儲け。誰かやらないか?
90Sシリーズはほぼ全滅でつか。
>>727 最後の砦2313も、tiny2313が容易に入手できるようになればどうですかねえ。
設定がややこしくない分2313だけはしばらく人気あるような気もしますが。
そういえば相当前だけどPICのセミナーに出たことがある。 技術の人がH8は設定が面倒でしょと逝っていましたね。
>>729 PICだって16F628とかは、まず”CMCON”に”アナログコンパレータOFF”を書き込まないと
ポートが使えないぢゃないかー
あとVRCONもOFFにするとか。
>>728 tiny2313とtiny26Lって、どう住み分けするんでしょか?UARTをとるか、ADをとるか、ですかね?
だったらATmega48あたりにしとけ、という事になる。
mega8の仲間ってバランス取れてて使いやすいね。 AVRの中でも人気あるのはそのせいかと。
もしかして、RESETピンを入出力に使うようにした場合、シリアルプログラミング不可になるのか。 orz...
ATmega48をまとめ買いしようOFF。 Digikeyから到着する日辺りで秋葉に集まって購入者に分配する・・・とか?
737 :
774ワット発電中さん :05/01/16 19:39:21 ID:UyFCEmD3
このスレだけ異常に流れてないか?なんか変
なんだっけ、どっかの人数集めれば要望を出してくれるサイトがあったじゃん あれ使ってどっかにお願いしてみたら?
っていうか、路上で売ってくれよ、ここで予告して
>これを単価500円(送料別)で売れば、50000円で、30000円の儲け。誰かやらないか? >726がやってみれば良いんじゃないか?
100個分の梱包費用と梱包&発送の人件費がたったの3マソ? 配送トラブルでも起こったら大赤字だな。
>>726 >>663 のリンク先で4個1500円で売られてるから、
それ以下で売らなきゃ買い手が付かないだろ。
>>736 10個とか買うから地方発送頼む
(´・ω・`)
>>741 同意だな。やるとしても4個か5個単位で手間をへらさんと。
>>742 というか
>>663 がその役割担ってるって事かもね。仕入れ先はどこか分からんけど。
信頼できるもの同士で手間賃だけで共同購入ってのじゃないと難しいな。
2ch同志ってのは・・・ちょっと厳しいかも。
手渡しできる
>>736 なら可能だが田舎者のをれは無理・・・(´・ω・`)
結局高いばら売りにも理由はあるって事か。
744 :
774ワット発電中さん :05/01/17 08:30:18 ID:6pWpC3Py
じゃ、一応需要調査のテスト 『Digi-KeyでATMega8 , 16 , 48 等のDIP品を25個買って、東京で手渡し頒布します。 この機種に限ったのは、「万一あまっても、自分で使えるから」です(w。 郵送はしません。不良品返品は受け付けません。運が悪かったと思ってあきらめてください。 他にも購入提案があれば教えてください。』 これでいいか。(僕自身、東京在住ではないので、自分ではやらない可能性大。)
>>744 裏通りでサングラスとマスクして立っていて、その人に指3本見せればAtmega48を3個1000円売ってくれる
っていうスタイルはどうでしょうか? 殺伐と。
746 :
774ワット発電中さん :05/01/17 17:11:31 ID:QATCBpX2
747 :
744 :05/01/17 23:55:33 ID:/q7rIVu/
>>745 裏通りで客が付くまで立ちんぼ(しかもノルマ達成まで複数客相手)なんて、やりたくありません(w
「AVRいりませんか〜」 「mega48いりませんか〜」 ああ、寒いわ。AVRでLEDつけても暖かくないし・・・
749 :
774ワット発電中さん :05/01/18 13:32:47 ID:WVh9TZe5
AVRのプログラムをCかC++で書きたいんですが、 参考になるHP知りませんか?
某ML、とうとう初級C言語講座に…
753 :
774ワット発電中さん :05/01/18 14:01:41 ID:WVh9TZe5
どうもありがとう。
>>754 × ここで少しずつ食ってみない?
○ ここで少しずつ作ってみない? 食ってどうする・・・・orz
インラインアセンブラについてはまろりさんのページに日本語訳がある。
>748 秋葉で公式のフリマとかないのかな? 路上販売かぁ 青いビニールシートでも広げて しばらくしてると、警察の方に「君、パスポートは?」 いや、「日本人です… ってか路上販売って法的にどうなの?商業の自由かな?
道路の使用許可が必要。
AT90S8535のプログラムをWinAVRで作成しているのですが、 WinAVR で16ビットのレジスタ(OCR1Aとか)に値をセットしても AVRStudio 4 でシミュレーションするとセットした16ビットレジスタの 下位8ビットのレジスタ(OCR1ALとか)にしか値がセットされません。 実際書き込んでみると問題なく動いている感じなのですが、 シミュレーションでのこの現象はどうしようもないのでしょうか?
>>754 追加して欲しい事。
1)MfileでCOFファイルを出すようにしておけば、AVRStudioでソースデバッグできる。
2)WinAVRは0b11100101 と、0bで2進数が書ける。
3)WinAVRのProgramersNotesPadでMake Programすれば、AVRStudio経由じゃなくてもデバイスへ書き込める。
(書き込むツールはMfileで指定する)
Wikiを立ち上げてくれれば一番いいんだけどねぇ (Wikiの編集は出来ルンだけど、導入/立ち上げが出来ないヘタレです)
>>760 複数の人でやるにはWikiいいですね。私も立ち上げは無理なんですけど。
ちょこっとgetting started notesをさわってみたんだけど、意外なほど変更が多くてびっくり・・・・
header fileみたらお馴染みの関数マクロが結構「そりゃそのうちなくすからこっち使えゴルァ」なコメントだらけ。
ところで、以前のバージョンって、PRG_RDB()でintやlongの定数へのアクセスってできたんでしょうか?
getting started notesではまるでできるような書き方なんですが、
現行バージョンではPRG_RDB()はprogmem_read_byte()にdefineとなっていて1バイトしかアクセスできない。
>>759 Win環境でのMFileの使い方ってのも必要かな。
実は起動方法を今日初めて知った私(馬鹿)・・・readmeにちゃんと書いてあるんだけど
協同購入みたいな話出てるけど、欲しい香具師みんなで秋月とか千石とかに 「AVRありますか」「入れる予定ありませんか」とか聞き倒したらいいと思う。 ホントに数があるならいれるんじゃないかなと期待したい。 遠方の人はメールででも問い合わせしてみるとか。
>>761 デバイスの違いをどうするかってのもあるな。
AT90Sシリーズ用に書かれたものなので、mega/tinyでも使えるように書き換えがいる。
getting started notesだから、基本的な使い方はデータシートと重複しても書かなきゃならないし。
サンプルプログラムもmega用も用意した方が良いかな。
>>750 >C言語の場合、XORの計算はどうするのでしょうか?
自分で調べようともしないというのもスゴいし、
こういう超低レベルな質問を恥ずかしいと思っていないのもスゴい。
そして、それに懇切丁寧に答えている常連の方々の
心の温かさには涙が出そうになりました。
日本の未来はバラ色だね!!
>>761 cbi , sbiがDeprecated: になっているのが痛いですねぇ
_BVとか ~_BV()は、どうもピンと来なくて。
>>764 C言語 xor の検索結果のうち 日本語のページ 約 6,090 件中 1 - 50 件目 (0.34 秒)
Wikiを設置してみたけど・・・しょぼい。 どっか良いCSSとか無いですかね。
>>767 しょぼくてもいいから、公開しておくれ^−
>>767 しょぼくてもいいよ。寄ってたかって推敲できればそれでヨシ。
>>765 >cbi , sbiがDeprecated:
やっぱりプロセッサ特異的なものは残せないんでしょうかねえ。
便利だから付属マクロ集か何かに残して欲しいところです。
>>761 avr-libcのマニュアルって日本語訳あったっけ?もしなければこちらも。
>>767 どうしてもヤなら、いっそのことwikipediaにAVRのページを作っちゃえ、とか。
>>775 お。早速更新されてる。おもろい。
でも更新する際になんかエラー出ませんか?
>>776 エラー出ますね。書き込みはちゃんとなされているようですが。
暇なときに皆さんも好きなドキュメントをどうぞ。
アルファベットにADC,AnalogComparatorときて、Assembler(インラインマクロ)で頭抱えている・・・
まろりさんの翻訳がすばらしいなんて書いたらharaleitさんにメチャ失礼だし。やるしかないなあ
まあ私の英語力のつたなさは誰かがカバーしてくれることを願っています。
778 :
778 :05/01/20 00:08:33 ID:c8p1XKkb
Wikiの練習場所が欲しい。
779 :
778 :05/01/20 00:59:17 ID:c8p1XKkb
>>779 うぉーきれいになっている。
ソース見て使い方勉強します。
みんな、Wiki書きって慣れているのか。なんか凄い勢いでページが更新されていっているんですけど
>>781 全然慣れてない。
きっとみんなこんな場(書きっぱなしじゃなくて情報集積される場)を渇望していたんでしょう。
Wikiって初めは混沌だからなー。しばらくたったらまとめページでも作ればいいか
Mega8515 に対応したICEってあるんでしょうか? ICE200だとオリジナルの8515しか対応してないですよね?
>>784 Mega16でも代わりに刺しとけ。ってわけにはいかないのか?
786 :
774ワット発電中さん :05/01/21 13:57:39 ID:ZQUlZEP3
AVRで遊んでみたいんだけど、自分でどの程度扱えるか分からないので、 初期投資をなるべく抑えたいです。 昨日、寝る前に色々と検索しててISPケーブルを安価に自作するってのを見付けたのですが ブックマークするのを忘れて、今日になったら見つからない。 どなたか、ご存知ないでしょうか?
787 :
774ワット発電中さん :05/01/21 13:59:11 ID:Ia/oGqLJ
>>790 登録すりゃいいじゃん。
別に登録したらお金取られるわけじゃなさそうだし。
ただ、RS使うとたいていのものは手に入っちゃうし、
なけりゃ名古屋まで私は行っちゃう。
AVR Wikiか、おもしろそうだね。 Wikiもいいけどhatena groupもおもしろそうだよ。キーワードをWikiっぽく使える。おまけにBlogから自動リンクできる。
ちょっと教えてください〜 Getting Started Notesのプログラムメモリ(フラッシュ)の部分なんですけど、 配列の確保に関して、用例にあるような prog_char TEN[]={0,1,2,3,4,5,6,7,8,9}; だと、これだけでSRAM上に定数を置いてしまうようです。 配列で、スタートアップルーチンで定数をSRAM上に展開させることなく、 必要時にmemcpy_P()などでコピーして使用できるようにするにはどうしたら いいのでしょうか?整数型はprog_charなどを使い、文字列はPSTR()を使えばいいし、 構造体も型定義でなんとかできるようなのですが、配列だけうまくいきません。 どなたか教えてください・・・・○| ̄|_
>>794 どんなソースなのか知らないけど、 static とか const とかいう話か?
>>794 prog_char *TEN={0,1,2,3,4,5,6,7,8,9};
WinAVRの最新版とMega323ではちゃんとプログラムメモリだけに格納されたけど? WinAVRのバージョンは?使っているデバイスは何? もしよかったらソースも見せてくれ
799 :
774ワット発電中さん :05/01/22 23:15:40 ID:Rqc5GYht
798だけど、 prog_char TEN[10] = {0,1,2,3,4,5,6,7,8,9};で確保するためには グローバル(main関数の前)で宣言しなきゃだめみたいだ。 main関数の中でprog_char TEN[10] = {0,1,2,3,4,5,6,7,8,9};をやっちまうと SRAMにも書き足されてしまう。
>>799 グローバルだとOKですか。
こんなソースで試していました。TEN2のコメントアウトを外すと、2313ではスタックがおかしくなって、hogehoge()からのリターンで0番地にとばされちゃった。
TEN[]を*TENにすると問題なし。
#include <stdio.h>
#include <avr/io.h>
#include <avr/pgmspace.h>
void hogehoge(uint8_t data)
{
PORTB = data;
}
int main (void) {
prog_char *TEN[]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,・・・・,63};
//prog_char *TEN2[]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,・・・・,63};
hogehoge(pgm_read_byte(&TEN[5]));
PORTD=12;
}
>>800 >2313ではスタックがおかしくなって、
そうそう。WinAVRって、メモリ上限に関しての警告とか出してくれないんだよな。
static mem[10000] とかやっても、通ってしまうし。
(出してくれる方法ってある?)
>>801 グローバルだと確かに無問題ですね。なぜだかわからないけど。
フラッシュ上の定数ってどでかいテーブルとかメッセージなどを置いておくものだろうから、
通常はグローバル領域で問題なさそうです。
グローバル領域だと
prog_char Msg[]="HogeHogeHanage"
って感じの文字列でも問題なくなっちゃいますね。なんかPSTRの意義うすくなってきたな。
LCD_print(PSTR("hogehoge"));のように関数に直接書き込みたいときとか、
見やすいように使用する場所に書きたい場合だけ?
追っかけてみたら、初期定数展開分だけSP初期値がずれるコード吐きますね。
2313で128バイト以上のものを置くとSPはSRAM外に置かれてしまう。
不思議なことに展開はSRAMの若いアドレスから使われるのに(0x72バイトなら0x60-0xD1)、
SP初期値はDF→6Eと、まるで下位側に確保されたような動きをします。
確保しているというわけではなくバグっぽい?
Chan氏の最新版パラレルポートリーダライタで 昨年末、都内某所で入手したプログラム済みのATmega8TQFP からプログラムをダウンロードしたのですが 00 01 02 03…FC FD FE FF をアドレスごとに循環した データしかダウンロードできませんでした。 秋月で買ったATtiny26では、自分で書き込んだプログラムも ダウンロードできデータも一致したのですが… 事情通の方、データ不整合の回避方法を教えてください。
ロックビットたってる。回避不能。
>>804 このATmega8に、SDカードIF、FAT[12:16]ファイルシステム、
内蔵フラッシュメモリアップデート、著作権認証機能の
プログラムが書き込まれているので、何としてでも
ダウンロードしてみたいのです。
やっぱり、ロックビットを解除する方法は無いでしょうか?
>>805 ロックビットを解除する方法?あるよ。
チップイレース。
808 :
774ワット発電中さん :05/01/23 16:46:03 ID:aPYoffhn
チップテストモードで読み出しが可能になるが教えない
>>808 チップテストモードですか…PDFのデータシートを見て探します。
最悪ダウンロードは無理でもクローンが作れれば良いのです。
>>802 グローバルだとデホルトでstaticになるからだろ。
ローカルの場合、明示的にstaticを付けなければならない。
>>810 constつけても一部はだめでした。
テストVersion WinAVR 20040720
#include <avr/io.h>
#include <avr/pgmspace.h>
void hogehoge(uint8_t data)
{
PORTB = data;
}
//const prog_char *msg="0123456789ABCDEF0123456789ABCDEF";
//const prog_char *msg={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
int main (void) {
//const prog_char *msg={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
//const prog_char *msg="0123456789ABCDEF0123456789ABCDEF";
hogehoge(pgm_read_byte(&msg[PORTB]));
PORTD=12;
}
適当にコメントを外して試しました。出力をAVRStudio4.07にかけて
配列(文字列)がSRAMに複写されるか、コードでSPLの初期値が0xDF
(2313で)になっているかどうかでチェックしました。
PORTBを読み書きしているのは単に最適化で消えてしまうのを防ぐためです。
で、結果は ローカルの場合。 const prog_char *msg={0,1,2,3,4,5,6,7,8,9}; →正常 const prog_char *msg="0123456789ABCDEF"; →SRAMコピーあり、スタック正常 const prog_char *msg1=PSTR("0123456789ABCDEF"); →正常 グローバルの場合。 const prog_char *msg={0,1,2,3,4,5,6,7,8,9}; →正常 const prog_char *msg="---------"; →SRAMコピーあり、スタック正常 const prog_char *msg1=PSTR("0123456789ABCDEF"); →コンパイルエラー おまけ ローカルの場合。 const prog_char msg[]={0,1,2,3,4,5,6,7,8,9}; →SRAMコピーあり、スタック異常 const prog_char msg[]="---------"; →SRAMコピーあり、スタック異常 グローバルの場合。 const prog_char msg[]={0,1,2,3,4,5,6,7,8,9}; →正常 const prog_char msg[]="---------"; →正常 結局、文字列はPSTR()使え、配列はprog_char *msg={.....}でFAかな。
>>803 パッケージを薬品で溶かしてROMを露出さして、
X線をロックビットに当ててロックビットだけ消去しろ
マジで聞きたいんだけど、みんな、AVR使って、何を作っているの? 差し支えない範囲で、教えてくれない? 俺は、STK500で少し遊んだくらいで、今は、EZ-USBをMacから使えるように、 色々試しているところ。
816 :
774ワット発電中さん :05/01/24 00:47:54 ID:u9kn3zvl
来年度の新入部員用ロボットキット AVRはH8みたいに単価が高くないから入門で焼き切る心配があるときはいいよね
>>815 秋月のRTC-8564NBと、キャラクタ液晶を繋いで、年月日表示のデジタル時計。
RTCはI2Cなので、BASCOM-AVR(デモ版)でプログラム。
液晶表示もBASCOM-AVRのLCD命令だけだしな。
ヘタレですまん。
>>815 今まで作ったのは、PWM-LEDピコピコ、デジタル時計、車のスピードメーターってとこ。
>>814 ちなみにこれはWinAVRをインストすると
C:\WinAVR\doc\avr-libc\avr-libc-user-manual\FAQ.html
にもあります。
820 :
811 :05/01/24 10:09:17 ID:6C71su++
>>814 おお、いいヒントがあった。FAQの方は見落としてました。
How do I put an array of strings completely in ROM?
const char foo[] PROGMEM = "Foo";
これでいいみたいだ。長い文字列指定しても問題ないみたい。
USBしかないノートPCでもAVRの開発とかしたいのでUSB→RS-232Cの変換ケーブルを 探しているのですが何かお勧めがあったら教えてください。
今までに作ったのは、どっとマトリクスLEDとか、デムパ時計、ファンコンくらいかなぁ。
>>819 灯台下暗し orz
815です。答えてくれて、ありがとう。
俺のMacでは、USB2.0は使えないので、AN2131/2135で十分なのだけれど、
このチップでは、A/D変換とか、PWMとか、便利な機能がないので、
この先、複雑な応用回路を作りたくなったら、どうすれば良いか...
>>823 ファンコントローラですか。PWM制御で、超微風は可能ですか?
実は、俺は、寝室に外気をとり込んで冷やす目的で、
すごく原始的な換気扇コントローラを作りました。
その当時、マイコンを使ってPWM制御なんて、とても出来る技量がなかったので、
トランスのタップで電圧を下げて、そのタップの切替を、中国製の扇風機のコントローラから
制御したリレーで行う物でした。一応、リモコンも出来ます。
難点は、オムロンの100Vリレーの切替音がうるさく、頻繁に風量を切り替えるような
モードでは運転できない事です。
調光器では、超微風が出来ないので、電圧制御になりました。
最近は、少しはマイコンも使えるようになったので、PWMをつかって、夏までは、
もう少し、賢い奴を作ってみようかなと考えてます。
>>821 俺の場合、Mac上のVirtual PCで、KeyspanやProlificチップを使ったUSB-serialアダプタ
につないだSTK500に、STK500付属のダウンローダから、ダウンロードしてます。
ただ、これが、Windowsの仮想COMポートで動作するかどうかは不明。
(VPCでは、実COMポートを使用)
827 :
821 :05/01/25 20:32:43 ID:66Adn0Kn
レスthx
秋月の変換ケーブル買ってきます。
>>824 確かにEZ-USB持っているんで追加出費無しで出来るけど
AVR以外ので使うには別途ファームを作らないと無理なので
おとなしく変換ケーブル買ってきます…
>>825 AVR繋げる
828 :
774ワット発電中さん :05/01/26 01:11:50 ID:C+wBH2OZ
突然で申し訳ないです。 どなたかmega48でUART経由で書き換え可能なブートローダを 作成した方いませんか? 当方C言語で作成してますが、どうにも動作イメージがつかめなくて。 話変わって、 tiny13にソフトuart入れて色々したいとかも思ってまする。
>>825 リレーをSSRにするだけで十分だったりして。
誰かやったことある人に聞きたいのですが、 秋月のH8のUSBセットと付属のVBのプログラムで通信して、速度が 10秒間で333回通信*64byte*2(往復)=>4.3kb/s とかで、 繋ぎなおしたりしていると、たまに状況が変わって 10秒間で1000回通信*64byte*2(往復)=>12.8kb/s とかになっていることもある。 上の2つの違いもなぜ起こるかわかっていないのですが、 通信速度の遅さといい、こんなもんなんでしょうか?
831 :
830 :05/01/26 02:39:05 ID:a/+G769i
1000回(たまに1001回)なのはUSBの何かが1msだった気がするのと、 333回(少し変動)なのは上のきっかし1/3ということも気になります。。。 ちなみに通信のソースも秋月のを利用しているのでEP1のみバルク転送です。
>>830 H8側のファームを変更しない限り、そんな物だろ。
液晶ドライバとかもかなりウェイトが掛かってるって話だしな。
秋月H8-USBに関しては、色々なサイトで解説や利用法が提示されている。
ぐぐれ。
>>829 それも、一応考えたのですが、トランスのタップどうしが絶対にショートしない回路
となると、リレーが一番安全と言う結論でした。
834 :
830 :05/01/26 10:26:57 ID:a/+G769i
>>832 情報を一部載せ忘れました、すいません。
実際には秋月USB基板ではなく3052+USBNで同じピン配置にしているだけで
LCDディスプレイとSCIとLEDとSWは無いんです。元のプログラムは同じですが。
>>834 んだからよ、秋月H8-USBのオリジナルファームを使う限り、転送速度はそんなものなの。
デバイスデスクリプタでの最大パケットサイズ(64バイト)を変更すれば良い訳だが、
送受信ルーチンの変更せずに上手く行くかどうかは知らん。
836 :
834 :05/01/26 11:09:08 ID:CzXw+GGW
ああ、思い出した。 パケットサイズの変更よりも、フレーム辺りのパケット数指定を増やした方が そのファームウェアの場合は安全だったかな?
837 :
834 :05/01/26 12:40:24 ID:CzXw+GGW
フレーム辺りのパケット数指定はアイソクロナス転送の時だった…。 しかも、どっちにしろintervaltimer値って無視されるんだっけ… という事で836は忘れて頂戴…
838 :
774ワット発電中さん :05/01/26 13:29:05 ID:rPu1wDRY
↑低学歴(ぷ
digikeyにATMEGA48,88が入荷!!
>>839 ↑すまん、年寄りなんで、MLFとかTQFPは勘弁してくれ。
842 :
774ワット発電中さん :05/01/27 20:59:41 ID:AV7kZkAK
自分のプロジェクトを投稿してみるのもいいな
ISP更新専用の、スタンドアロンのISPライタの製作例ってないですかね・・ 固定デバイス固定ファームで、ボタンで転送、あとベリファイ結果だけわかるようなやつが欲スィ (書き込むデータはライタ本体に焼きこみ) いや、クソ重いノーパソ持って、客先をひたすらバグ修正に巡るハメになりそうなんで・・ (しかもノーパソ1台しかない罠) 誰か携帯アプリでライタ作ってくれないかな(無茶
>>843 軽いノート買うのが手っ取り早いような・・・。
>>843 昔、AVRとシリアルEEPROMを使ってポケットH8ライタを作ったことがあったなぁ。
なんでもフィールドサービスで使うらしかったけれど。
H8が品薄になるとか、PICが値上げになるとかの噂・・・正直うんざり。 無くなってから困ればいいじゃないヽ(´ー`)ノ
848 :
843 :05/01/29 03:43:16 ID:XbUPTO67
ワンダースワンとは・・(汗 KEYFOBイイ! 漏れの検索では全くひっかからなかったですよ 早速オネダりしてみまふ 現地回るのは面倒なんすよね・・ EPROMと違って、PC扱えない奴は外に出せないんで リストラ対象オサーンでも扱える装置は便利ですよ 全部PHSとかLAN経由で書き換えが出来ればいいのに・・ ていうか、使われてる12Vのアルカリ電池の存在を初めて知りました こんな電池もあるのね
>>848 AN910型式ライタ(COMライタ)のファームを改造すれば自作も出来そうだね。
外付けEEPROMつないで、スイッチ1つでCOM→EEPROMかCOM→ISPかを切り替え出来るようにして、
スイッチ1つでEEPROM→ISPが出来るようにする。ロータリースイッチで複数EEPROM領域を切り替え。
ターゲットより大きめのフラッシュを持つAVRを使って、SPM命令でフラッシュに書き込みでも行けるかも。
これもどこかで自作例記事を読んだような気がする・・・
>>845 keyfobのマニュアル、意味なく重すぎ(バックのグラデーションのため?)・・・・
セレ500のノートパソコンではページめくってから表示まで16秒○| ̄|_
なんかやだな、こんな文書作るところって。
おしえてくださいー timer.hにこんなのがあるのですが、 static __inline__ void timer0_stop (void) { TCNT0 = 0; } static __inline__ void timer0_start (void) { TCNT0 = 1; } これ、何に使うのでしょうか? timer0_start()してもtimer0がスタートするとは思えませんが。
>>851 #warning "<avr/timer.h> is deprecated, and will be removed in the next major release of avr-libc"
/*
* NB: this is completely bogus.
*/
static __inline__ void timer0_stop (void)
>>852 見てなかった・・・・・・timer2と一部のtimer0には使えないから削除ってことなのかねえ。
completely bogusって・・・・・○| ̄|_
ちょっと教えて下さい。 基板に幾つかピンヘッダを立てるでしょう。 それで、そのピンヘッダどうしをつなぐケーブルはどこで入手できますか? 2pin, 6pin, 8pin など、欲しいのですが、検索しようにも、 うまいキーワードが浮かばないので、ヒットしません。 キーワードだけでも結構ですから、お願いします。
>>854 フライングワイヤーで。
適当なコネクタの端っこを使うこともできるで。
当方関西だが、日本橋のデジットは 端子と線を買うだけでその場でつくってくれたぞ。 今もそうかは解らんけど。 右も左もわからない頃に10PINのISP端子付き書き込み治具を 作ったんだけど、一番よく使ってる。 (・∀・)イイ!!
>>854 秋月のピンソケット(メス)にフラットケーブルを半田付けして、熱収縮チューブ被せてます。
>>854 2pinはPC-DIYショップに結構ありますよ。今はあまり使われませんが、
ちょっと前のCDROMの出力をサウンドカードに接続するケーブルなどがまだ置いてあるケースがあります。
6pin,8pinってのは2x3,2x4のことですか、それとも一列のものですか?
一列なら、それ用のピンヘッダ+コネクタの組み合わせを使います。
http://www2.cyberoz.net/city/satodenk/conn.htmlの 、2.5mmピッチ基板用(モレックス:5051/5045)あたり。
2x3,2x4はあまりないので普通2x5=10pin用をつかいますね。
フラットケーブル用コネクタ(ヒロセ)写真5あたりと、フラットケーブルを使用。
フラットケーブルも同じ店に売っています。
8pinなら、以下のように10pinのヘッダを立てて、■部のピンを折り、コネクタ側は折ったピンを突っ込めば
逆接続するのを防げます。
○○○○■
○○○○○
ピンヘッダの代わりに写真1のようなものを使うことでも逆接族防止ができます
(逆接続防止切りかきと突起がある)
連投ごめん。
それで、フラットケーブルの方は、
>>857 氏のように、PC基板用のを切り取って、
使う事も可能なので、近くのPCショップに行ってみます。
あと、
>>860 氏のヒロセのコネクタですが、これと、フラットケーブルをつなぐためには、
圧接工具が必要と言う認識でよろしいですか?
逆接を防ぐノウハウまで教えてもらって、恐縮です。
>>859 氏の秋月ですが、実は、一昨日からかわら版のネットショップで色々部品を物色していて、
ただ、このワイヤが見つからないので、ほとんど全てのリンクを調べましたが、
とうとう見つからずに、ここで聞いてみる事になりました。こちらの方法も試してみます。
>>858 氏。こちらは北関東で秋葉まで行くと1万かかります。最近は、ネットで済んでしまうので、
行く機会がまれになりました。むかし、ラジオデパートの向かいの線材屋で電話線の活け造りを
してもらって驚いた事が有りますが、あそこなら、やってくれそうな気もしますが、やはり、
交通費を考えると、行けませんです。
>>863 そこ、コネクタ単体はともかく、Ass'yまでしてくれるの?
よくわからんかった。
ミスミ しらん? たっかいけど。
秋月から40pinのAVRが消えた・・・。 (´・ω・`)
俺、ずっとC使ってたけど、アセンブラ覚えようと思った。 やっぱ痒いところに手が届かない場合があるのがもどかしい。 ('A`) ああん
WinAVR入れてアセンブラでコードを書いているんだけどGNUのアセンブラで コードを置く場所を指定するのはどうすれば良いんだっけ? 割り込みベクタへのコードの書き方が分からない… 他のアセンブラだとORGとかの疑似命令で指定できたと思ったけど… つか、GNU アセンブラのマニュアルってどこにあるんだ…orz
AVRは知らないのだが、一般的にはldで指定するんじゃないか。 ldscriptかコマンドラインか…忘れた。
870 :
868 :05/01/31 21:57:48 ID:5BIw3Jvu
スマン。どうも.orgで指定できないなと思ったらavr-gccでアセンブルしていたのが原因だった…il||li ○| ̄|_ avr-asでアセンブルしたら.orgで指定したアドレスにコードを吐いてくれました
>>866 やはり、需要がないんか?情報がないと回路やプログラム作れんとかか?
>>872 40pinのAVR使いたいような人はいまさら旧AVRってのも嫌なんじゃない?
どうせなら値段そう変わらないmega16あたり使いたいと思うし。
もしかしたら単に在庫がはけたと言うことかもしれない(w
あ〜〜 軽石 うざって〜! 居なくなれ!
>>874 なぜ他人の戯れ言がそんなに気になるね?
2chで煽り耐性鍛えないといかんよ。
>>866 ATMega8,16,32あたりを新しく入れてくれる前兆なら嬉しいのだが。
>>874 その程度に耐えられないようなら、2ちゃんねらー失格だな
>>874 Qの次は松かよ。
うぜぇな、IP晒すぞ。
小学5年生くらいか
>>874 に同情。 漏れも誹謗されたぁ ゜(゚´Д`゚)゜
>>881 Mega16 > Mega162 じゃなかったっけ?
僕はMega168キボンヌ だな。
俺もmega88V系が欲しい。ローパワー面白そう。
>>883 88Vなら、Digi-keyで入手できるんだけどなぁ。
88はすぐ売れきれちゃうぽ。
Mega48V--25個@192円
Mega88V--25個@276円
俺も軽石嫌い。 MLやらBBSもNGワードであぼ〜んできればいいのに。
>>885 ML=メーリングリストなら、メーラの設定で差出人の名前でフィルター掛けて、
特定フォルダに振り分けることは可能だと思うけど?
で、軽石って何者?
↑ググれば出てきます
軽い市 PICでググッたら出てきた。 恐ろしく内容が・・無い。 なんだあれ?
ブログが痛いなー
漏れもボロクソ言われたよ… もうだめぽ orz
刈る意思が登場するBBSの管理人が 正直いうとあまり来て欲しくない・・と呟いていたのをヲレは知ってる。
>>882 Mega162≒90S8515系
Mega16≒90S8535系
機能の系統が違う。
一番の違いは外部バスの有無。
溜飲下がるのも最初のうちで 湾パターンでやられるとうざいよね。正直。 ワザトやっているのかな。 きてぃっぽいよね。
いいか、みんな (゚д゚ ) (| k |) サンポール ( ゚д゚) ドメスト \/| k |\/ °。o ( ゚д゚) 。o°o。 (\/\/ _ =(_)○_
みんなも黙ってただけで、嫌だたーんだね。 ∧_∧ ∧_∧ ∧_∧ ∧_∧ ∧_∧ ∧_∧ (・ ・) (・ ・) (・ ・) (・ ・) (・ ・) (・ ・) /【◎】 /【◎】 /【◎】 【◎】ヘ 【◎】ヘ 【◎】ヘ / /┘ . / /┘. / /┘ └\ \ └\ \ └\ \ ノ ̄ゝ ノ ̄ゝ ノ ̄ゝ ノ ̄ゝ ノ ̄ゝ ノ ̄ゝ 刈るさん ひと言お願いします!
カルミンってPIC系の人なんでしょ? しかるべきスレでやって欲しいな。 それとも、AVR系のサイトで暴れてる松やんと同じ意図なの?
mega162は、USARTが2ちゃんねるある
>>896 [H8-ML(5392)]も仲間に入れてあげてください。
>>891 なんかさぁ、いいホームページの条件は
「うかつに掲示板を設置しないこと」って思えてきたよ。
有名な人のホームページの掲示板見ると、
たいていヘンな奴が住みついているんだよね。
そこの「常連である」ということによって自分を権威付けしようとする奴。
そういうヘンな奴は、たいてい自分自身のホームページは無いか、
あっても非常にショボい事が多い。
その意味で、掲示板を廃止したなひたふの判断は正しい。
>>899 同意。
あそこにもKが登場してたな〜
ヤツ(K)のしょぼいページみて驚いたよ。年齢に。
絶対に10代だと思ってたら・・。
>>899 絵描き系のHPは実際にそうしてるところ多いよ。
俺も、時々軽石さん見かけるけど、そんなに嫌か? 直接突っ込まれたこともあるが、ちっとも悪い気はしなかったけどなぁ。 想像するに、彼は、パソコン通信時代からのBBSの住人なのだと思う。 特にNifty。古き良き時代、会議室の質を維持するために、新参者に辛口の コメントを出してくる常連さんは沢山いた。 今のように、匿名主体のBBSになってくると、コテハンで通すのは勇気がいるね。
>カルミン しかし、それだけ永くやって来て趣味の部類だとしてもあの程度のレベルの低さじゃなあ。 永遠の初心者たちが、それ系の掲示板を次々に廃止へ追い込むのは何とかしてくれ。。。
904 :
774ワット発電中さん :05/02/03 05:03:33 ID:Kekm6g9H
掲示板を廃止せずに糞コテを晒すのも一興
ヤツはなぜ、H8のMLでLINUXの話をしてるんだ? 真性?
>>906 どこへ行っても相手をしてもらえないからでは?
WinAVRで、 プログラムEPROMを何バイト使って、SRAMを(変数領域で)何バイト使ったか? っていう情報はlinkするときに出るんですかね?マップみてもよくわからないので 見方を教えてください。
なひが掲閉めたのは撃つになたから
まぢで?
あそこのオペアンプ用法は忘れたときに重宝してたんだけど。
>>908 変数領域のサイズは hoge.lst 中の .bss のサイズ
終了アドレスは、avr-objdump -t hoge.elf して __bss_end
eepromも同様
AVRのUARTですけど、 ■UDREは送信可を表すのでリセット中セット(1)されます。 ■UDRIEがセット(1)のとき、全割り込みが許可(SREGのI=1)されていれば、UDREのセット(1)は 送信データレジスタ空き割り込み処理ルーチンを実行させます。 ってなっていますが、逆に、UDRにまだ何も送信していない状態(UDRE=1)で全割り込み許可の 状態でUDRIEをセットしたら、いきなりUDR空き割り込みが呼ばれるのは期待していいですか? AVR Studio上は期待通りに動いているようなのですが。
UDRE割り込みはレベルトリガである、とどこかに書いてなかった?
>>914 外部割り込みのレベルトリガみたいなもの(条件さえそろえば掛かりつづける)でいいってことですね。
データシート(2313,mega8/翻訳版)にある「UDRに書き込むか割り込みを禁止するかしない限り
割り込みが掛かり続ける」というのは同義と考えていいですよね?
んだ。 ちなみに、初回書き込み分はすぐにシフトレジスタに送られるから 2回連続で割り込みがかかるね。
>>916 いろんなやり方があるけども、無駄な割込を減らすという点では、送信割込処理で
リングバッファから取り出して、リングバッファが空になったら送信割込禁止して
送信割込処理を終了するのが一般的では?
1バイト送信処理(非割込処理)では、リングバッファ(FIFO)に送信データ書き込ん
だら送信割込許可するか、リングバッファが空でUDRE=1なら直接送信バッファに
書き込んで、送信割込許可する。
>>917 送信割り込みって送信完了割り込み?後半を読む限りでは送信データレジスタ空き割り込みのことですよね。
AVRのUART使用サンプルプログラムを捜してみたところ、
送信完了割り込みをつかうものしか見つけ切れませんでした。
何かUDR空き割り込みよりも有利なポイントがあるのでしょうか?
うちのMega8も char c; c = '>'; do { } while(!(inp(UCSRA)&(1<<UDRE))); UDR = c; でしか動かしてないや。
>>919 それで済むならそれが楽ですもんね。俺も現実に作ったものはこれしかやってない。
char c;
c = '>';
loop_until_bit_is_set(UCSRA,UDRE);
UDR = c;
がきれいでない?
そんなマクロあったのか!(w
>>920 送信の時は、ここが無限ループになって、CPUがダンマリになる、ってな考慮はしなくてもいいんですかね?
>>922 送信時は送信設定が適切ならここが無限ループになることはあり得ないと思うが。
>>923 > 送信時は送信設定が適切なら
~~~~~~~~~~~~~~~~~~~
適切でない場合の考慮までする必要はないとすれば、別にいいのか。
>>924 UBRR設定と送信許可設定が適切でないならそもそも動かないから無限ループに
なってバグに気づいた方がましだと思う。特殊なものでない限りはこれらは初期化
ルーチンで1度だけセットされるだけなので、まあ大丈夫じゃないかと
(もう一度呼ばれるならすでに暴走してる)
UBRR設定を変更する(通信速度設定ができる)ようなものならちょっと考える必要があるかもね。
#define wait_UDRE \
UCSRB = UCSRB | _BV(TXEN); \
if (UBRR>MAX_UBRR) { UBRR = UBRR_DEFAULT; UBRR_ERROR=1; } \
loop_until_bit_is_set(UCSRA,UDRE);
ってな感じにするとか。
926 :
917 :05/02/05 09:48:09 ID:p/IkZCDO
>>918 指摘のとおり、『送信割り込み』は、「送信完了割り込み」ではなく「送信
データレジスタ空き割り込み」です。
送信データレジスタに、書き込んだデータが、送信シフトレジスタにロード
されると、「送信データレジスタ空き(割込)」状態が発生し、ストップビット
の送出まで終了する「送信完了(割込)」状態が発生します。効率良く送信する
には、「送信データレジスタ空き(割込)」を使います。「送信完了(割込)」は、
RTS等のフロー制御信号をON/OFFするタイミングを知るため等に使います。
>>919-920 滅多に送信しない、かつ送信時も1バイトのみであればそれでもいいが、大抵の場合
ライブラリは以下のような作りになっていると思うので、10バイトの文字列を出力
すると、文字列全部を出力し終わるまで(9600bpsでも約10mS、1200bpsだと80mS
以上も)関数から戻ってこない。
void putc(char c)
{
while(!(inp(UCSRA)&(1<<UDRE)));
UDR = c;
}
void putc(char *s)
{
while(*s)
putc(*s++);
}
>>926 > void putc(char *s)
> {
> while(*s)
> putc(*s++);
> }
そりゃ、再帰呼び出しすれば、なかなか帰ってこないだろうて(w
それはともかく、確かに232C送信を割り込みで並列処理してくれれば、とても嬉しいので
誰か教えてくれ。できればAVR-Wikiに書いておいてくれれば、嬉しい
ATMega88のDIP品はまだ入手難だよねぇ。 TQPFだと取り替えられないしなぁ。 なんでCPLDみたいに、PLCC品を出してくれないんだろー。
まだっていうか、週明けだね。digikey に ATmega88-20PI が入るの。 そろそろ流通大丈夫なんでない?
>>929 え、来週入るですか。
ところで、ATMega88って、ATMega88-24ってな機種もあるんですか?
931 :
917 :05/02/05 11:14:46 ID:p/IkZCDO
>>927 「avrgcc」同梱の、サンプルコード集「gcctest」の「gcctest9」に入っている
「uart.c」/「uart.h」が送/受信とも割込処理になっている。
結局のところ『資料がないんじゃなくて、使う側に読む努力や能力がないだけ
なんだろうなぁ』と思う今日このごろ。
>930 データシートのチェンジログの項を読んで高らかに笑うも可だが かわいそうだから見なかったふりしてやれ。
>>932 2545B-01/04から2545C-04/04への変更
1最大動作速度を変更
・12MHzを10MHzへ
・24MHzを20MHzへ
あ、これのことか。
>>927 一応作ってAVR-WikiにUpしてみたよ。動作未確認だけど。
ただ使用目的によっては割り込みじゃなくても良いケースもあり。
たとえば1秒ごとに測定データを送信するなんてもので、時間充分余っていれば
ポーリングで送っても構わないわけで。
こっちの都合では進まない受信は割り込みあった方が楽そうだけど。
>>931 gcctestにあったのか・・・・orz
16バイトのバッファの管理に16bitアドレスを使うのはもったいないと思ったので、
俺は配列添え字を管理して、配列アクセス時以外8bitで済むようにしてみました。
バッファサイズを256の約数にすると保存文字数以外の変数チェックが不要になってしまったし。
AT90系のはちらほら見かけるんだけどATmega系のメモリマップってどこかにない?
936 :
935 :05/02/05 16:09:00 ID:NIPj+CjH
ぐは…データシートに載ってた スレ汚しスマソ
>>935 データシートのメモリのところにある図では足りないですか?
たとえばmega128データシート(翻訳版)の11ページ。
>>931 WinAVR使っているから知らないのだがgcctest.zipって今でも配布しているの?
>>939 落とせない・・・・・○| ̄|_
登録日がFeb 5, 2005(今日)になっているんで、まだ登録処理中なんだろうか。
ATmegaの各ピンの出力をグラフ化できるシミュレータってあります? SPICEみたいに部品を付けて波形が取れれば理想的です PWM出力をダイナミック制御したのをモニタしたいのですが…
>>941 普通にLog取ってfsdbに整形すれば良いのでは?
944 :
774ワット発電中さん :05/02/08 18:59:21 ID:Q+xj01ac
studio4.10でアセンブリ言語でプログラムを書いて buildした際にerrorが有る場合の挙動について 解らないことがあり、困っています。 studio3.56までは、buildでerrorが有った場合には、 errorのあるラインが列挙され、 ダブルクリックでソースのエラー箇所に跳べたと思うのですが、 studio4.10になってから エラー箇所へジャンプが出来ません。 どなたかこの症状を改善できる方法をご存知ないでしょうか。 過去スレを見られる環境を持っておりませんので、 既出でしたら申し訳ないのですが、今一度ご教示下さい。 よろしくお願い致します。
>studio4.10になってから >エラー箇所へジャンプが出来ません。 普通に出来てるけどなあ。 プロジェクトをエクスプローラでコピーしていたりとか??
946 :
944 :05/02/08 23:41:44 ID:Q+xj01ac
>>945 レス有難うございます。
プロジェクトは普通にstudio内から作っているつもりです。
他のアプリとの相性の問題もあるかもしれないので、
明日以降もいろいろと試してみます。
ウェーン、なんでできないんだろう?
>943 おもいっきり「納期遅延中」のフダがかかってやがりますね ...。
>>946 4.07でもプロジェクトファイル作成後移動したりすると似たような現象が起こりましたが、
>>945-946 見るとそれじゃないわけね。うーんなんででしょ?
一度*.apsを消去して、*.cofからプロジェクト作り直し(Watchやブレークポイントは消えるけど)ても治りませんか?
949 :
774ワット発電中さん :05/02/10 11:30:25 ID:YfKe5Hm+
AVR初挑戦してみたいんだけど、 市販品のAVRISPなどは、オンボード書き込みのみで、デバッグ機能はついていないのでしょか? ブレークポイントや、ステップ実行したいときはJTAG-ICEみたいのを使わないとだめ?
ATmega48の16bitタイマを8bit高速PWMで動かしたいんだがAVR Studio4でシミュレートしてみるとカウンタの挙動が変 TCCR1A:0b10100001 TCCR1B:0b00001001 TCCR1C:0b00000000 としているんだが、走らせるとカウンタが0x00から0xFFまでカウントアップした後0クリアされないでカウントダウンしてくる 何か根本的な勘違いをしているのかな…?
951 :
774ワット発電中さん :05/02/10 16:04:17 ID:L4iloLyq
H83048f-oneに初めてSRAM(512k*8bit)を増設するのですがモード5で8ビットアクセスをします。 モード5では各エリアは128kバイトのアドレス空間を持つとのことですが、 これについてはどういうことか良く分かっていないのですが、 A0~A19までが機能しているのでSRAMのA0~A18をマイコンのA0~A18と繋ぐことで SRAMの全領域にアクセス出来ますでしょうか???(128kバイトのアドレス空間?)
>>951 /CS2つをORしてRAMに接続すれば
それで良いと思うぞ
各エリアとは、/CS1つ分のエリアだ
953 :
952 :05/02/10 16:14:42 ID:JSGYb7ik
すまん。/CS4つ分だな。 ここは、素直にモード6が良いのではないだろうか?
>>950 WGM13-10=0101=8bit高速PWMでよさそうなんですけど、なんでだろ?
2進法でどっか0が1つ多いとか少ないとかいうオチはない?
TCCR1A=_BV(COM1A1)|_BV(COM1B1)|_BV(WGM10);
TCCR1B=_BV(WGM12) | 1;
TCCR1C=0;
と、間違いが起こりにくい形でやってみては?
って思ったが、手元でやってみると確かに同じ現象になってしまった。
AVRStudio4.08で、mega48がないのでmega16でやってますけど、
#include <avr/io.h>とmainとその中に無限ループだけのソースをコンパイルして、
無限ループ内にブレークポイントを設けて、TCCR1A/B/Cを手動設定してステップ実行しても同じ動作になる〜
共立で買ったTiny12(5つが5つとも)が書きこめないんですけど、 Tiny12ってなにか普通と違うことやんないといけないんですか? 試したこと ライター: 自作avr9102種(max232のとディスクリート/ファームはv2.3とドイツ人が 拡張パッチあてたやつ)、自作stk200ドングル、avrdudeの抵抗のみライター ソフト: avrdude, uisp (どちらも-DEVのCVS最新のもの)/ FreeBSD 4.11-Stable uispはResetになってないと言う。avrdudeはいかれてると言う。 RESETピンは、10Kでプルアップ、100Kでプルアップ、プルアップなしを 試しますた。基板は2つ作って、なんども見たりテスターでチェックした。 at90s1200,at90s2313,attiny26Lなどは、なんの問題もなく使えてます。
>>955 クロックはどうしてます?初期値は内蔵発振らしいけど念のため・・・
957 :
955 :05/02/10 23:37:20 ID:Sv5RrawS
クロックは、最初データシート通りにつけなかったんだけど、 あとからセラロック4MHzも一応試しました。
958 :
950 :05/02/10 23:48:32 ID:S7BMHj0n
>>954 わざわざ検証してくれてありがとう
ATmega48に載っている3つのタイマ全てをPWM動作させたかったので
他のタイマも動かしてみたんだけどみんな変…orz
タイマの設定は全て比較一致でLow出力、8bit高速PWM、プリスケーラ無し
DDRB:0b00001110
DDRC:0b00000000
DDRD:0b01101000
タイマ0:PWMの出力がPIND-6,5に出る
PORTD-6,5に出るのが正常な気がするけど…?
タイマ1:
>>950 に加えて出力でない
タイマ2:出力がトグル動作、出力がOC1A/B(PORTB-1,2)に出る
何じゃこりゃ…何がおかしいんだろう…il||li ○| ̄|_
これが関係するのかな? AVR Simulator Overview Known Issues The Known Issues list is organized in two major sections; the first describes general simulator issues, while the second describes device specific issues. General Simulator Issues The issues in this section apply to all AVR devices. Timer/Counters 16-bit Timer/Counters on all devices have several problems with PWM, prescaler and output compare. Output compare registers are not buffered properly. The Asynchronous Status Register (ASSR) is not supported in timers with asynchronous mode. This is due to lack of a generic external clock implementation. Notes for ATmega48/88/168 Timer/Counter2 Output compare pins and FOC does not work. Prescaler reset does not work correctly. OCR2A/B registers are not buffered correctly in PWM mode.
>>959 なるほど。
Heroさんとこにあった4.11βのhelpではPWM関係の記述が消えていたので、最新版では大丈夫なのかも。
4.10で試してみようかな。
961 :
774ワット発電中さん :05/02/11 08:30:32 ID:0i/jVt5e
>>955 まさか_Resetをプルアップしてないとか言う落ちじゃないでしょうね?
Tiny系は_ResetがOCになってるから吊らないと絶対だめだよ。
ごめん全文見てなかった。ちゃんと吊ってたみたいね。俺が吊ってくる。 もし内部発振の1MHz動作で動いているならSPIのIOスピードがクロックに対して 速すぎるとかも考えられる。 しかしDUDEやUISPにIOスピードの設定項目はあっただろうか
964 :
950 :05/02/11 12:29:11 ID:VAhDlSJD
>>959 ありがとう
実機でデバッグしろって事か…オシロもロジアナも持ってないよ…orz
>>960 俺が使っているのは4.11βだけど上記の症状…
967 :
951 :05/02/11 20:07:12 ID:WM6tx47H
>>952 さんが言うようにモード6でいくことにします。
8ビットアクセス・2ステートアクセス・ウェイト無しとして、繋ぎ方はこうですか?
マイコン側(H8-3048f-one)−−−SRAM側(CY7C1049B-25)
A(0〜18)−−−−−−−−−−−A(0〜18) 順不同
D(8〜15)−−−−−−−−−−−I/O(0〜7) 順不同
~CS1−−−−−−−−−−−−−~CE プルアップする
~HWR−−−−−−−−−−−−−~WE
~RD −−−−−−−−−−−−−~OE
間違っている箇所があったら是非教えていただきたいです。
>>967 それで良いと思うぞ。それにしても速いRAM
を使うんだな。ちょっと、うらやましいぞ!
0x200000〜0x27FFFFにRAMが見えるはず
969 :
950 :05/02/11 23:41:29 ID:VAhDlSJD
>>965 >P-10
わぁ…なんか凄く良さそうですね…この機能で\2,100とは…
今度秋葉行ったとき買ってこようかな
今回は日本語ドキュメントがあっていることをあてにして何とかします…orz
>>969 そのテスタ俺も持ってる。
初めてそのテスタを買ったとき、車のインジェクタのdutyが測れると思ってやってみたら、
ほとんど0%を表示した。ヤッパリ安物○| ̄|_と思って長いことお蔵入りしていた。
よく考えると誘導負荷によるでかいスパイクがあるのでそっちにレンジ合ったらほとんど
Duty0が出るのは当たり前じゃん・・・ってことにたった今気がついた(^^;)
めちゃくちゃ初歩的なミス…ATmega48に-5V掛けちった…il||li ○| ̄|_ 生きていたけど((( ;゚Д゚)))ガクガクブルブル
>>971 わたしゃ7805の端子と電解コンデンサの
向きを逆にして電源部がすべて死んだよ。
その先のもろもろが死ななかったのが奇蹟だが。
そろそろスレがやばいんですけど、次はどうするって話になってたっけ? *AVRとH8は分離するのかどうか? *その他のプロセサはどこで扱うか
専用スレのあるマイコンは専用スレで ない場合はココで 話題が偏ってきたら専用スレを作りましょう にするとPICは専用、AVR,H8その他はココになりそうな予感。
>>974 つまり現行どおりって事ですね。
AVRの話題が多いけどH8も結構ある、他のプロセサの話題もちらほらある
誰も狭いとは言ってないし1スレ3ヶ月かかってるし。
今からお出かけなので、誰かお願いできると幸。(帰宅時まだだったら言い出しっぺが建てます)
今回はAVR-Wikiもリンク集に入れてね
976 :
774ワット発電中さん :05/02/13 08:56:58 ID:MYHNhBPb
>>975 あんたが好きなリンク入れてたてればいい
977 :
774ワット発電中さん :05/02/13 09:11:20 ID:yzrJOBr0
>>973 >*AVRとH8は分離するのかどうか?
AVRの記事とH8がごちゃごちゃになっていて、読みにくいので
分けるのが良いです。(読んでもどっちの話かわからないことが多い)
>*その他のプロセサはどこで扱うか
同じ考えかたで、CPU毎に、必要によりスレッドを増やすしかありません。
共通化すれば、異なるCPUの話題が混じって読みにくくなります。
CPU種類から見てスレッド乱立にはならないでしょう。
>>977 専用スレ欲しいなら、そっちを先に立ち上げない?
そうすればそれに従ってその他のCPUのスレを欲しい人、たとえばH8スレが欲しい人が
スレ立ててくれるでしょう。H8の人も専用スレ立てるかもしれないし。
>>977 おいらは入釜ーなので、スレたてはマスターしてないし苦手。
立ち上げスレッドの文章のうまい人に、H8の専用スレたてを希望。
>>979 遠慮することはないよ。おれも参加して1ヶ月の頃PIC/AVRスレのスレ立てしたことあるよ
不安なら、まず原稿を立ち上げてここで晒す。文句が出なければスレ立てGO!
>>980 漏れはヴァカなので、H8スレたてヨロ!
>>979 その姿勢では、専用スレが必要かどうか判断できる立場にないのでは?
とか思ってしまうわけだが。
983 :
774ワット発電中さん :05/02/13 18:02:53 ID:eW2o9x5d
>*AVRとH8は分離するのかどうか? 分けてほしい。やはり話題がかけ離れすぎている。 H8も使用しているひとが多いから専用スレッドもあってもいいだろう。
985 :
973 :05/02/13 18:08:11 ID:1xz1XW0y
話が変わったようだな。 では私がAVRスレ立てしてみます。 H8/その他については重複スレがないかどうか確認の上よろしこ。
986 :
次スレ1 :05/02/13 18:48:11 ID:Gmdf3kDx
_____
/ /|
/ ( ゚∀゚) /.∠フ 個人でも手軽に使える
/ /.∠フ || . Atmelの8-bit RISCマイクロプロセッサを
/ __ o/.∠フ || 中心に語るスレッドです。
∠| ̄ ̄凵 ̄ ̄|∠フ || *AAはAVR/H8その他総合スレからいただきました。
.|| |_____|/||
Atmel AVR 8-Bit RISC
http://www.atmel.com/products/avr/
987 :
次スレ2 :05/02/13 18:48:37 ID:Gmdf3kDx
988 :
次スレ3 :05/02/13 18:49:15 ID:Gmdf3kDx
991 :
774ワット発電中さん :05/02/13 19:50:59 ID:q7og5die
992 :
774ワット発電中さん :05/02/13 20:17:19 ID:sBaBplmn
スレ立て乙 と、埋めてみる。
>>991 う・・総合ってなんかおかしいな。単純に消し忘れだすまん。
まあAT90Sもmegaもtinyも!って意味だと思ってくれ。
994
995
996
997
998
999
1000
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。