AVRマイコン総合スレ Part46
■ このスレッドは過去ログ倉庫に格納されています
>>748
あ、CTCモードの話ね、他のモードは、まだ見てないけど
データーシートのコンペアマッチのタイミングチャート見れば意味はわかります
カウントアップしてコンペアマッチした瞬間に0に戻るんじゃなく、つぎのクロックで0に戻る
つまり、1,2,3と数えるんじゃなくて、0,1,2,3と数えてるって話 で、ソース書き上げて、up、あれ動かね~
ソースけずって、LED点けるだけにしても点かない(うそ~~ん)
自信なくすわぁ 同期系回路ではあたりまえの動きをしているようにしか思えんのだが
誰か
>>750が何を言いたいのか解説頼む 750 はインド人より数千年遅れで 0 を発見して嬉しくて仕方がないんだろう そのあたりまえを、間違えてるのを気づいてない人が結構いますねえってはなしだよ おまいら、ほんとうにディスりたくって仕方ないんだな h8だとマッチと同時に0クリアみたいに書かれてるから、当たり前ていいかたも、あってるのかどうか? >>757は、タイミングチャートが手元に無いので、ググって出てきたアプリケーションノートにかいてたことなんでタイミングチャート持ってたら見てみて >>746, >>747
tiny0系はxmegaの流れをくむものなので別物と思った方がいい。
起動時は基本的に20MHzの6分周。
ヒューズであらかじめ16MHzにできるが、プログラム自身ですべてを起動後に設定する前提。
したがってあとから自由に変更できる。 USBaspがUPDIに対応した話は知らない。調べたことないから。
SNAPでも買えば? いけるよ。(経験済み)
わざわざ買うには高いけどね。 UPDIならATtiny416-XNANOをライター
代わりに使っちゃうのが安上がり
…と、思ったらずいぶん値上がりしてるな >>759
>プログラム自身ですべてを起動後に設定する前提。
どのビットで変えられるの?
データシート見たけど分からない。 >>764
ちょうど俺もそれ聞こうと思った。
データシートもなんか見慣れないというか、なーんか読みづらいなぁ
あと UPDI での書き込みは USB-シリアル変換に抵抗とダイオード足せばいけるみたいね。
秋月で FT234X モジュール買ってきてみた。
うまく書けるといいけど SOIC DIP 変換基板買い忘れてなんか面倒になってきたw >>765
202 は良く使うけど、20MHz と 16MHz を
ソフトで変えるなんてやったことないし
コードも見たことないんだよね。
ID:ukgZpk2Q は詳しいみたいだから教えてくれよ。 4809のコードだけど
void setCPUSpeed8MHz()
{
uint8_t oldSREG = SREG;
cli(); // suspend interrupts
PLLCSR = _BV(PINDIV); // dissable the PLL and set prescale for 16MHz)
CLKPR = _BV(CLKPCE); // allow reprogramming clock
CLKPR = 1; // set clock divisor to 2 (0b0001)
PLLCSR = _BV(PLLE) | _BV(PINDIV); // enable the PLL (with 16MHz prescale)
SREG = oldSREG; // restore interrupts
}
#endif >>767
それってプリスケーラの設定してるだけじゃなくて?
202 にはオシレータが 16MHz と 20MHz の 2つが入ってて、ヒューズでどっちを使うか選べるみたいなの。
で、動き出してからそのクロックを切り替える話ね。
ところでプリスケーラの設定変更には CCP の操作はいらないんだっけ。 例も何も、全く的外れだよ。
>>768
厳密に言うと、発振周波数を選べる OSC20M というオシレータ。
プリスケーラの設定には CCP 不要。 ddrd=4
portd=4
でpd2がハイにならんのだが
だれかエスパー頼むw asmなのでこうだけど・・・わからん
なんか根本的にまちがえてる?
ldi r16,$04
sts ddrd,r16
sts portd,r16
loop2: rjmp loop2 tiny202 に書けた!
USBシリアルの RxD と TxD 間にダイオードを TxD側が K になるように入れて、RxD に 470Ωの抵抗入れてそれをターゲットの UPDI に繋ぐ。
誰かがパッチ当ててくれた avrdude で comポートを指定して書けばすんなりいった。 6ピンと6ピンを結ぶイルミナティ結線だから簡単だよね >>774
こんなんまちがうわけあるかいというわけで、ハードをチェック
ハハハ、書き込み終わったあとリセットがローにおちたままやんかw
書き込み機壊れてます orz
USBASPでも作るかな(汗 tiny10 で動かしてたのを tiny202 に移植しようとしてるが、想像以上に面倒だな。
タイマーで割り込みとPWM使ってるだけなのに、何かとうまくいかない。
つか、割り込みで OVFフラグが自動解除されなくなったのはなんでだ。
それ以前に PER に値がうまく設定できなかったり、TEMP がいつの間にか更新されてたり、勝手が違い過ぎて上手く動く答えを見つけるのに苦労する。
そして I/O操作が増える分コードサイズは増えるね。アセンブラで書いてるけど。 tiny45のI2Cはマルチマスタに対応していないやんけ
チェック項目大幅に減ったwwwwwwwwwwwww tiny202 の割り込み時は Iフラグが自動的に禁止されないんだな。reti で有効にもされない。
自分で cli や sei しないといけない。
なんでこうなった?? AVRのINC命令てあるやん?
あれ0xFFまでいくと0に戻る? >>781
0 に戻るけど、inc は C フラグが無変化なのが addi Rd, 1 との違い >>780
tiny202は割り込みコントローラがあるから
割り込み中に同レベルの割り込みはかからんよ。
レベル0割り込みを使ってないなら排他制御はいらん。 >>785
ありがとう
割り込み処理のとこ読んで分かった。いろいろ高度になってるんだね。ここはあんまり真面目に読んでなかったわ。
んでついでに簡易割り込みベクタを見つけた。これいいね。
でも、16bit レジスタアクセスがなんかイケてないなぁ
Lバイト書いて Hバイト書き込みで適用だと、もっぱら下位バイトばかりを更新したくても必ず 2バイトアクセスが必要になっちゃう。
sts は 2クロックかかるから省略したいのに。
tiny10 なんかに比べるとやっぱりまどろっこしいな。
でも動き出していろいろ見通し立ってきた。 CRY立つんだから0に戻るに決まってるよな
わい疲れてるかも 書き込みがやたら失敗すると思ったらIDCコネクタの接触不良だった
そういえば、なんか緩い、ピンが細いのか、受けが広いのか?・・・・
メーカー間の相性ですかね? 旧tinyのポンコツI2Cはマルチバスマスタ対応可能だよ
ポートを細かくおまいらで記述しろて突き放した仕様だから
SDAコンフリクトもセンス可能 tiny202 の RESETピンを L に落としてもリセットがかからないんだけど、どんな理由が考えられる?
ヒューズは買ってきたまま、コードはアセンブラで書いてて、初期化時にはRESETピンをプルアップしてる。ハード的にはピンには何も繋いでない。
UPDI でプログラムはできる。
そもそもいろいろ不安定で、プログラミング後しばらくはパワーON で動き出すんだけど、電源切ったまま数十分放置すると再び電源に繋いでも動かない。
RESETピンを L に落としてもだめ。もちろん H にしても変化なし。
でもプログラマ(USBシリアル)繋ぐとリセットされて動き出す。
いろいろ分からないんだけど、なんにしても RESETピンを L に落としてリセットがかからないというのが一番分からない。
ヒューズ以外の初期化の仕方によって、RESETピンを殺せたりする? GNDだと思ってるところが実はGNDじゃなかったとか そりゃデフォルトのピン設定をいじってないんならUPDIピンになってるわな。
RESETピンとしては機能してない。
データシートPDF内で「RESET」を検索しようとかひらめくようになりなよ。 >>794
おー、RESETピンはデフォルトではRESETピンじゃないのか。でもヒューズで設定するのね?
もしピンの動作を RESET に変更したら、普通には UPDI できなくなるってことね?
それだとあんまりいじりたくないなぁ…
実はヒューズの書き方がよく分からないし。
アセンブラソースでヒューズの値も記述できるの?
それはともかく、パワーオンリセットがかからないのもよく分からないんだよ。
プログラム後しばらくはブレッドボードから引っこ抜いて差してもちゃんと動くのに、しばらく時間が経つと電源入れただけじゃ動かない。
電源のコンデンサに電圧が残ってるとかそういうことでもないはずなんだけど、この挙動も UPDI と関係ある? 似たようなことと言えば、電源切ってもポートからの流れ込みでブラウンアウトしてて
リセットしなかったことはある。
USB-シリアルブリッジなんか繋いでるとよくある。
ソースにヒューズ設定書けるかどうかはアセンブラ/コンパイラ側の仕様。
何使ってるかによる。gccやxc8なら書ける。 >>796
回路自体も電源と PA3 くらいしか繋いでないし、まだブレッドボードで組んでるからそこから引っこ抜けば何も繋がってないマイコン単体になるんだよ。
そうすれば内部状態もすっかり忘れてくれそうなものだけど、なんか不安定なんだよね。
ところで UPDI 端子はオープンにしておきたいんだけど、この場合はプルアップをイネーブルにすべき?
tiny10 の時は RESETピンをプルアップするようにしてたから同じようにプルアップしてるけど、これが悪かったりする?
データシートでは UPDIピンは内部プルアップ抵抗を持つって書いてあるから何もしない方がいいような気もするんだけど。 マシン語使えないんだったらArduinoでやってみれば? 容量1KBだからな
arduino化したら残容量はすずめの涙 リセットかからんとか言うレベルで、容量がぁとか、なにを贅沢な。 リセットなんてマニュアル読めよてはなしだが
容量はどうにもならんからな
てかarduinoを薦める時点でもはやAVRにこだわる必要ないし
新しいCPUならメモリ腐るほど乗せてるから贅沢も糞もない すでにライター作ったんならブートローダ要らなくね? 小さいメモリのマイコンにブートローダを載せる価値があるかどうかは別にして、
ブートローダの応用は、ユーザーによるファームウェアアップデートにも使えるしね。
「ライターを持っていれば、ブートローダは不要」とは必ずしもならないよ。 > ユーザーによるファームウェアアップデート
絶対これ言うやついるよね。 最近はどうか知らんけど、ちょっと前は
ユーザーにTFTPとか、やらしてたからなあ
めんどくさいちゅうねん
USBからアップデートできるのは有難いわ ユーザーにArduino IDE入れさせるのかね。
まあ、書き込み専用のアプリとか作れるだろうけど。 >>804
202 は 2KB あるよ。
202 で結局モノは完成して、安定して動いてる。
起動しないことがある問題は多分電源の品質。電源の立ち上がりがよくない感じだったかも。
微妙に解せないけどそういうことで納得してる。
使った感想としては、tiny10 は 1KB でそれで足りず 202 使ってみたんだけど、メモリは倍になってもコード効率が悪くて単純に倍の規模が作れるわけではなさそうなのが残念。
tiny10 は全ての IO や SRAM アクセス命令が 1ワードだけど、202 はほとんど 2ワードになっちゃうからね。
当然クロックも 1クロック余計にかかるから、速度的にも不利。
16bit IOレジスタも上位8bit アクセスを省略するような技が使えないから必ず 2バイトアクセスが必要。
でもかけ算命令や高度なインデックスアクセスが使えるから、tiny10 と別のアプローチで最適化できる余地はある。
単純に倍と見ることはできないといってもやっぱり 2KB あるし汎用レジスタもSRAMも多いから、間違いなく tiny10 より凝ったことができるね。
今回はファミコンの APUもどきを実装してファミコン風オルゴール作ってみた。
ROM や RAM が多いから、エンベロープのパターン増やしたり LFO かけたり、曲の音譜数も増やせたりで満足行った。
LED演出も追加してみた。
これがやれるマイコンが 60円ってのは本当に素晴らしいね。
でもやっぱり tiny10 の良さも捨てがたいんだよな。
メモリが倍になった tiny20 とかあればいいのに。
もちろん60円以下で。 細けえことはいいんだよ
132MHzデュアルコアでブラックボックスのライブラリ使ってガンガン回せ 細けえことはいいんだよ
240MHzデュアルコアでブラックボックスのライブラリ使ってガンガン回せ
なお謎通信 多分とか、解せないけど納得している、はちゃんと調査、解決した方がいい。 mega328でtimer1で、はまってます
なんか抜けてます?
ほかにハマリがちなところもあれば、教えてくださいやし
;tccr1a ctcモード pinout無効
ldi r17,0
sts tccr1a,r17
;tccr1b 分周なし ctcモード
ldi r17,9
sts tccr1b,r17
;ocr1a 7999 $1f3f(8000 )
ldi r17,$1f
ldi r16,$3f
sts ocr1ah,r17
sts ocr1al,r16
;ocr1b $fffff 絶対踏まない
ldi r17,$ff
ldi r16,$ff
sts ocr1bh,r17
sts ocr1bl,r16
;timsk 一致割り込み許可
ldi r16,2
sts timsk1,r16 I/OレジスタはSRAMと同じセグメントじゃなかったでしたっけ? Cで書いてから最適化すればいいのに。
良く分からずに使ってんだろうな。 ほんとにどこにでもいますね、自分がわからないこと聞かれると質問者をディスり始めるバカ >>823
せめてデータシートぐらい読もうぜ…
7810D-AVR-01/05のp. 92あたりに
ズバリの解答がある
あと、他の人も書いてるが、右も左も
分からずに、アセンブラに挑戦する
なら、まずはCで書いてlssを読む そのデーターシートはもってないリンクくれるとうれしい
あとアセンブラむつかしいみたいな言動がいろんな人から出るけど
アセンブラってめんどくさいだけで、めちゃ簡単よ、(とくに今回みたいなレジスタ設定に関しちゃ)なんか勘違いしてると思う >>828
せめてググってくれよ
328/pの最新データシートだよ
最新版のデータシートを手元に
置くのは必須だと思うぞ あ~、後出しとか言われる前に書いときます、私cプログラマーじゃないので、cでやれって言われると手も足も出ません >>827
オフィシャルの最新は
DS40002061B
だよ。該当ページは123-124
(microchipの形式よりatmelの形式の方が
データシートのデザイン、カッコいいと思う…) え~と。AVR.JPのですね、これ、これなら手元に有るのですが123-124pは通信関係になってるので、やっぱり違うものを見てるのかも? いやググったらでてきただけですが、オフィシャルでサイト内検索しろってことでか、了解しました オフィシャルで DS40002061B を検索しても出てこないですね
mega328pで出てきたやつをとりあえずDLしましたが
私、英語ネイティブじゃないので(ちゃちゃっと読めないので)、当分レスないかもしれません、ではでは >>830
AVR のアセンブラプログラマだったのか。やるな! >>838
いやいや、AVRはこれからです、習作作ってるところです
z80とかH8は、だいぶいじりましたけどねえ
こんなところで、はまるとは思いもよりませんでした データシートをざっと眺めた感じではavr.jpのと、違うことが書いてあるようにもみえないのでちゃんと訳すなりしないと先に進みません
オフィシャルオフィシャル言うのはavr.jpのは内容がおかしいってことなんでしょうか?
でaruduinoでなんと偶然にもctcモードのコードを見つけてしまったのでチートしちゃおうということでuno だということにしてコンパイルして書き込んでみたら
あっけなく動いてしまったので、HEXを逆アせしてみました。
なんでこんな長いんだというリストが出てきて意気消沈してますが、とりあえず動くコードが手に入ったのでなんとかなるかも(ほんとか?) AVR.jp はサラッと呼んで内容掴んだあと原本読んで
「えぇ?ここ意味違うじゃんw」って笑う為のサイトだよ。 >>841
チラ裏までにしてほしい
この手の定年爺はドヤ顔でデタラメを書くから
デタラメが拡大再生産されてしまう ASMでしか書けないジーチャンとCでしか書けないニーチャンの共通点、と掛けて何と解く?
・・・
・・・
・・・
どちらも未来が無いでしょうwww >>844とかけて
出汁を取るのが下手な蕎麦屋ととく
どちらも、かけがクソ不味いでしょう ギリギリでいつも生きていたいからさぁ
またタイーホだって データシート持たずにマイコンいじり?
ありえない
さてはお前人工無能スクリプト「アセンブラおじさん」だな? >>817
mega328 のデータシート見てないけど、16bit レジスタに書く時に下位と上位どっち先にするかは合ってる?
tiny10 は下位バイト書き込みのタイミングで、tiny202 は上位バイト書き込みのタイミングで 16bit値確定だったよ。 カウンタがうごかねーパタンは大抵初期化と割り込み解除の順番がまずいてことが多い ■ このスレッドは過去ログ倉庫に格納されています