エントリー

ユーザー「gshoes」の検索結果は以下のとおりです。

DDR2の4GBのSO-DIMMを買うことになるとは

  • 2023/01/17 13:49
  • カテゴリー:散財

 AVRなどのマイコンのソフトは,ツールの関係でWindowsを使うことが多いです。私は生活マシンをMacにしてますので,開発マシンはそのお下がりになることが多く,現在はなんとMacBookProのEarly2008(MB134J)という骨董品にWindowsを入れて使っています。

 こいつを置き換えた15インチのMacBookProが2016年のLateで,普通はこれをお下がりにしてWindowsを入れても「古い」と罵られることを請け合いですが,そこからさらに古いマシンでもWindowsが動いているというのは,なんとWindowsというのは古いマシンを大事にしてくれているのだろうと思います。

 話が逸れますが,MacはOSのアップデートが割に簡単に打ち切られるので,長く使うには向かないと思います。移行が簡単で移行後の制約もほとんどないことを考えると,さっさと新しいマシンを買ってしまえと言うのがAppleからのメッセージです。

 で,そのWindowsを入れたMacBookProですが,軽い開発なら十分な速度で動いていると思います。2.6GHzのCore2Duoでキャッシュは6MBですから,シングルスレッドの性能はそんなに低くはないと思います。(いや,低いのですよ・・・)

 LCDが15インチで広いことは開発には有用ですが,一方でメモリの速度が遅いこと,HDDが遅い(SATAです)から,ここもボトルネックになっています。

 実は,このマシンを開発マシンとしてWindows8.1を入れるとき,使い物にならないくらい遅いマシンになったらどうしようかと思っていました。やってみると案外快適で,レトロPCのエミュレータも問題なく動いています。

 ただ,これ以前のMacOSを入れて使っている時既に,最大まで増設してあった6GBのメインメモリが壊れていて,やむなく4GBで使っていた事が引っかかっていました。

 壊れたのは2GBだけか?というなかれ。このあたりは当時らしいちょっとした事情が絡んできます。

 MacBookPro2008には,メモリの増設スロットが2つあります。ここにDDR2のSO-DIMMを差し込むのですが,スロットは2つですから,例えば4GBにするには2GBを2枚使うことになります。決して512MBを8枚というわけにはいかないのです。

 当時のDRAMは2GBit品が一般に出回っている容量としては最大のもので,これを8個使ったDIMMが安価な2GByteということになってきます。ということは,MacBookPro2008では4GBまでが手軽なメモリの上限となってきます。

 一方で認識可能な最大容量はというと,4Gbit品を使って6GByteまでなら認識出来ることがわかっています。一応仕様上は4GByteまでとなっていますが,4GBのDIMMを2枚で6GBまでは認識します。これは2GBと4GBの組み合わせでも可能です。

 残念なのは,同仕様のメモリを別バンクに配置することで可能になるメモリインターリーブが2GBと4GBの組み合わせでは機能しないという事なのですが,おそらく10%程度のパフォーマンス改善に役立ったと思うと,容量を取るか速度を取るかがなかなか悩ましいところです。

 私の場合,当初は2GBと4GBの組み合わせで使っていたものが,4GBのDIMMが壊れてしまって仕方なく4GBで長く使ってきたということになります。記録によれば,4GBのDIMMが壊れてトータル4GBで使うようになったのが2016年の5月とのこと。

 マシンも古いし,特に問題も感じなかったので,おそらくこのまま壊れるまで使うんだろうなと思っていたところへ,Windows8.1のEoSです。無償でWindows10に移行出来るうちにということで,私も年末にWindows10に移行したのですが,随分と動作が引っかかるようになってしまいました。

 特に開発関係のツールを起動すると,しばらく反応が戻ってこないこともあるくらいで,これはおそらくメモリ不足でしょう。ということで,もとの6GBに戻したいなあとおもっていました。

 しかし,前述の通り,当時でさえもDDRのSO-DIMMで4GBというのは売れ筋から外れたちょっと変わったメモリです。当時私はこれを6000円くらいで買っているようですが,2GBのものなら1000円台で買えたんじゃないかと思います。

 すでにDDR2は作られていないでしょうし,私のような変わり者のために在庫してくれているお店が,プレミア価格で販売出来ることを夢見ている状況でしょうから,決して安くないはず。

 調べてみると,やはり高価です。が,1つだけ5000円というのを見つけました。4GBのDIMMが5000円とは,今の尺度で見れば高いのですが,DDR2であること,当時もこれくらいの値段はしたということを考えると,悪い買い物ではありません。

 この機会を逃すと買えなくなると思って,ポチっておきました。ただ,今刺さっている2GBの2枚のうち,1枚を入れ替える事になりますので,トータル6GBになることを考えると,2GBの増設に5000円となりますから,ますますバカらしくなりますが,それあもう仕方がありません。

 届いたメモリはなかなか良さそうなもので,当たり前の事ですが取り付けると正常に起動,問題なく動作しました。狙い通り引っかかりのようなものも出なくなり,少し重いなと感じる事以外は実用上全く問題なしです。

 大規模開発を行うわけでもなく,せいぜい数kByteのメモリのプログラムをビルドするくらいですから,本当はVisualCodeStudioを動かすためといっていいといいほどなわけで,調べてみると空きメモリは約3GBとなっていました。もしメモリの増設をおこなわなかったからこれが1GBになっていたわけで,そうなると確かにスワップも頻繁に起きるでしょうし,今回のプラス2GBは期待以上の効果をもたらすかも知れません。


RAMの少ないAVRにありがちなこと

  • 2023/01/05 12:52
  • カテゴリー:make:


 年明けにちょっとしたイベントにこれまでに工作したものを作例としていくつか展示することになってしまい,何を出そうか,出すものをそのまま出すか改良して出すかなど,いろいろ考えて年末年始を過ごしました。

 出そうと思ったものに,006Pのニッケル水素電池の充電器があります。

https://g-shoes.net/blog/index.php/view/553

 もともと自分のためだけに作ってきたものですし,見栄えも良くありませんので,少し体裁を整えてからと思っていたのですが,ところで今って006Pのニッケル水素なんて手に入るのか?と疑問に思い,調べてみました。

 結論から言うと入手は問題なく,私が入手していた秋月のGP製も(値上がりしてるけど)大丈夫ですし,ありがたいことに東芝が販売するようになったことから,ヨドバシなどの量販店でも普通に手に入るようになっていました。しかも安い。

 入手性から考えると,006Pのニッケル水素と言えばこの東芝のものをさすことが多くなった昨今,これが充電出来ないと意味がないなと充電プロファイルを追加して,Version2への改造を行うことにしました。

 秋月のGP製(以下GP)も東芝のものも7セルで8.4Vであることには変わりはないのですが,前者は250mAh,後者は200mAhと結構な違いがあります。

 充電の方法も,GP製は0.3C(つまり75mA)で4.5時間に対し,東芝のものは専用充電器の仕様から推測すると0.2C(つまり40mA)で6時間の充電です。

 充電電流も時間も異なりますから,結構手の込んだ改造を覚悟しますが,まずは充電電流の対応からです。

 この充電器はトランジスタを2つ使った定電流回路で,エミッタ抵抗で電流を決めています。75mAを流すために,最終的にはカットアンドトライで8.32Ω(実測)としてあります。

 40mAを流すにはこれに8Ωほどの抵抗を直列に繋ぎ,75mAに切り替えるときにはこの8Ωをショートすることで出来そうです。心配な事は100mA近い電流が流れるのでスイッチが大丈夫かという話と,0.1Ωで大きく電流値が変わる世界なので,スイッチの接触抵抗が影響してこないか,と言う点です。

 まあ,素人の工作ですので,セルフクリーニングを期待出来るスライドスイッチで,ちょっと高価な信頼性の高いものでとりあえずやってみます。

 実験はとりあえず成功,スイッチの切り替えで電流が75mAと40mAで切り替わります。スイッチの接触抵抗もそうですが,どっちかというと電池スナップの接触抵抗の方が影響が大きいみたいです。

 で,このスイッチに2回路のものを使い,位置によってHとLをマイコンに伝達するようにしておきます。それで充電時間を切り替えれば良いだけですので,超簡単!なはずでした。

 突っ込まれると思うので先に言い訳しておきますが,電流の切り替えもマイコンで行えば綺麗なのですよ,それにスイッチに直接充電電流を流すというのも気持ちが悪く,正しくはリレーを使うべきでしょう。

 0.1ΩオーダーですからトランジスタやFETはオン抵抗が見えてきますし,温度変化もありますのであまり使いたくありません。リレーは信頼性もありますし,電流も流せますから,こういう用途にはぴったりです。

 しかし,今回あきらめたのは基板の面積でした。定電流回路の基板は小さく,もう空きスペースがありません。リレーなど全然無理です。

 なのでギリギリのサイズとして小型のスライドスイッチを使うことにしたというわけです。

 さて,ハードウェアの改造が済んだので,あとはマイコンのソフトの修正です。この時はATTiny2313Aを好んで使っていましたが,幸いなことにPD2が1つ使われずに余っていました。ここを充電電流の設定検出に使いましょう。

 ソースをさっと修正,やることは簡単で,スイッチの状態を内部で持っておき,これと実際の状態が変わっていたら状態を更新して,状態にあわせて充電時間をプリセットしたり表示を変えたりするだけの話です。

 なにせもともと動いていたソフトです。それも,タイマで1秒ごとに割り込みをかけ,グローバル変数に確保してある時分秒を1秒ずつ減らしていき,ゼロになったら充電完了にするだけのもので,今回はこの部分には手を入れませんから,楽ちん楽ちん。

 しかし,そうは問屋が卸しません。

 実際に動かしてみると,突然20秒くらい減ったり,1時間ずつ減ったりして,あっという間に充電が終わってしまいます。さらにボタンが効かなくなったりして,もう散々な結果です。

 元は10年も前の作品ですし,もしかしたらコンパイラのバージョンが変わったとか,いろいろ考えてみたのですが,元のコードをコンパイルしてみれば問題なく,新しいコードではひどい結果になります。

 違いはどこにあるかと調べてみると,RAM使用容量が違っていました。これまでは103バイト,新しいコードは109バイトで,6バイトの違いがありました。しかし使用率は80%台ですし,これがこれほどの違いの原因とは思いませんでした。

 しかし,違いは違いです。ちょっと細工をしてRAMを2バイトほど減らしてみると,問題の発生頻度が激減しました。しかし,時間が大きく変わってしまうことは少なくなったとは言え起きてしまうので,使い物になりません。

 でも,なんとなく原因はつかめました。対策の効果もあります。ならばその方向に突き進むだけです。と意気揚々と作業を始めますが,もともと128バイトしかないATTiny2313Aですから,空きRAMを数バイト増やすことも至難の業です。

 例えば,スライドスイッチの状態を保持する変数は,スイッチの変化を知るには必ず必要な変数です。スライドスイッチそのものが1ビットのメモリだと思えばなんとかなりそうな気もしますが,変化をつかまえるには過去の情報を持つしかなく,それにはメモリが必要です。

 1ビットのために1バイト割り当てていたのはもったいないので,ほかのフラグとバインドを試みますが,どうも上手くいかないばかりか,頑張ったところで1バイト減るだけですから,6バイトにはほど遠いです。

 そこでスイッチの状態を監視することはやめて,スイッチの状態をなにかのきっかけで調べ,これで充電時間を変えるという割り切りを行いました。スイッチを動かしただけではだめで,起動時かリセット時に取りこまれる仕様にしましたが,これもなかなか使い勝手が良くありません。

 関数の呼び出しをやめて直接埋め込むとか,そうした血なまぐさい努力でなんとか106バイトまで減らした結果,上手く動いていそうだったのでこのまま長期試験に突っ込んでみました。すると,20分ほど経過すると充電が終わっています。やっぱりまだダメみたいです。

 そもそも,これは時分秒を3つのグローバル変数に割り当ててあり,これが何かの拍子に壊されることで起きている問題です。ならばと,充電のON/OFFを保持している変数を減らすため,タイマのカウントをON/OFFするレジスタを使って充電のON/OFFの状態を確認することにします。

 当然ですがなにも問題はなく,1バイト減りました。これでかなり安定してきましたが,それでも時々時間が書き換わってしまいます。

 やっぱりもとの103バイトまで減らさないとまずそうです。この段階で105バイト。

 ここで私は閃きました。タイマのレジスタで充電ON/OFFを保持出来るなら,他のグローバル変数だってどっかのレジスタで保持出来ないか?

 試しに,スライドスイッチの状態を使っていないPORTAのレジスタに書き込んでみました。PORTAは3本しかないので3ビットのメモリとしてしか使えませんが,もともと1ビットあれば十分なフラグですので問題ありません。

 これが実に上手く動き,メモリを消費せずに割り切った仕様が復活したので,長期テストにかけました。しかし,やっぱり時々時間が変わってしまいます。

 ですが,私はすっかり気をよくしました。他に空いたレジスタを探してみましょう。

 時間は最大でも6時間ですので,3ビットあれば十分。ならばUSARTのボーレートの設定レジスタのうち,上位4ビット(UBRRH)使いましょう。分は60秒まで必要ですから下位の8ビット(UBRRL)にします。

 残念ながら秒は割り込みハンドラで減算する変数ですので,volatileのグローバル変数でなければならないですから,これはこのままとします。それでも一気に2バイト減っています。ということはもとの103バイトに届いたということです。やったー。

 テストを行うと,もう問題は出ません。ちゃんと4時間30分なり6時間までカウントしてくれます。ボタンの操作も問題はありません。

 ちょっとしたバグをいくつか潰して完成です。いやー,3日もかかってしまいました。

 機能的にはあきらめることなく,思った通りの動作がプログラムできました。

 しかしですね,RAMの使用量が103バイトならOKで,105バイトなら何でダメなんですかね,103バイトでもダメな場合だってあるんじゃないか,そもそも原因は何なんだ,というのが,ずっと引っかかっています。

 それで,真面目に調べてみました。

 まず,ATTiny2313AのRAMはわずか128バイトです。ここに変数やらスタックやら確保されます。使われているRAMのサイズというのは.dataと.bss(と.noinit)の合計ですから,スタックは含まれていません。

 更に調べていくと,当たり前の事ですが,スタックはRAMのお尻の方から使われていきます。もしスタックがバンバン使われると,変数の領域を上書きしてしまうでしょう。

 mapファイルはリンクマップファイルなのでどのグローバル変数がどのアドレスにあるかはよく分かりません。そこでelfファイルを使って,以下の呪文を唱えます。

avr-nm -fsysv -n hoge.elf

 こうすると,変数のアドレスが出てきます。素晴らしい。

 RAMは0x00800060からですので,時分秒やフラグをグローバル変数に取って109バイトを使ってしまったケースでは,

__data_start        |00800060|   D  |            NOTYPE|        |     |.data
hour                |008000c6|   D  |            OBJECT|00000002|     |.data
min                 |008000c8|   D  |            OBJECT|00000002|     |.data
__bss_start         |008000ca|   B  |            NOTYPE|        |     |.bss
__data_end          |008000ca|   D  |            NOTYPE|        |     |.data
_edata              |008000ca|   D  |            NOTYPE|        |     |.data
mode                |008000ca|   B  |            OBJECT|00000002|     |.bss
sec                 |008000cc|   B  |            OBJECT|00000001|     |.bss
__bss_end           |008000cd|   B  |            NOTYPE|        |     |.bss
_end                |008000cd|   N  |            NOTYPE|        |     |.stab

 となります。secという秒を保持するグローバル変数は0x008000ccに取られていますし,0x008000cdまではスタックが迫ってきても大丈夫とわかります。

 一方で,秒以外のグローバル変数をすべてレジスタに追い出し103バイトに収めたケースでは,

__data_start        |00800060|   D  |            NOTYPE|        |     |.data
__bss_start         |008000c6|   B  |            NOTYPE|        |     |.bss
__data_end          |008000c6|   D  |            NOTYPE|        |     |.data
_edata              |008000c6|   D  |            NOTYPE|        |     |.data
sec                 |008000c6|   B  |            OBJECT|00000001|     |.bss
__bss_end           |008000c7|   B  |            NOTYPE|        |     |.bss
_end                |008000c7|   N  |            NOTYPE|        |     |.stab

 となり,secのアドレスが0x008000c6に下がり,確かに6バイト分だけ減っています。

 それでも,128バイトのRAMのうち109バイトを使っているだけですから,スタックは19バイトも確保出来るはず。これが25バイトになったからといって,どれだけ助かるかという話は,スタックがどれだけ使われるのかを考えないといけなくなります。

 しかし,スタックの使用量というのは簡単には計算出来ないものです。関数を再帰的に呼び出せばそれこそ無限にスタックが使われますし,どんな関数でいくつスタックを使うかを知るのはコンパイラだけです。

 ただ,割り込みを使うとレジスタの待避でスタックをたくさん使うことは想像できるわけで,gccが吐き出したアセンブルリストを眺めてみました。

 まず,気になっていた割り込みハンドラです。やってることは本当に最小限度で,secというグローバル変数をデクリメントしているだけです。

ISR(TIMER1_COMPA_vect)
{
 338:    1f 92           push    r1
 33a:    0f 92           push    r0
 33c:    0f b6           in    r0, 0x3f    ; 63
 33e:    0f 92           push    r0
 340:    11 24           eor    r1, r1
 342:    8f 93           push    r24
    sec--;
 344:    80 91 cc 00     lds    r24, 0x00CC
 348:    81 50           subi    r24, 0x01    ; 1
 34a:    80 93 cc 00     sts    0x00CC, r24
}
 34e:    8f 91           pop    r24
 350:    0f 90           pop    r0
 352:    0f be           out    0x3f, r0    ; 63
 354:    0f 90           pop    r0
 356:    1f 90           pop    r1
 358:    18 95           reti

 こんな感じです。スタックの消費量は4つですね。割り込みはこれ以外にないので,多重割り込みは発生しません。

 これなら問題ないはずと言いたいところですが,実はこの充電器,LCDに4ビットパラレルの古いものを使っています。しかも悪いことに,LCDの表示に関係するコードは,様々なAVRに対応出来る用に作られたもので,私が作ったものではありません。

 ここも確認してみたところ,低レベルの書き込み部分で4つ,これをコールする上位が2つずつで計4つ,合計で8つ使っている感じです。

 もしLCDになにか文字列を書き出すときに割り込みがかかったら,12バイトのスタックが詰まれてしまうがわかります。これでも19バイトには届きませんが,なにかあったらアウトになるくらいギリギリです。

 正確なところはもう追いかけるのをあきらめましたが,残り105バイトでも異常動作をしたこと,そして103バイトでは正常だったことを思うと,どうもこのあたりに境界があると見て良いでしょう。

 結局103バイトで大丈夫という確証を得るのは無理だったわけですが,そこは実績で納得することとし,境界線が105バイトにあるということで,納得することにしました。

 AVR,特にRAMが64バイトや128バイトしかないtiny系ではよく問題になることのようで,Cで書くことに慣れてしまうと,ついついこういうミクロな部分を見落としがちになります。

 結果が甚大なものになるだけに,小型のマイコンを使う時には気を付けないといけないポイントだと,今さらながらに思った次第です。

 アセンブラで書けばまだ意識するんですが,私がAVRを使っている理由はCで実用的なコードが書けるからで,今から全部をアセンブラで書くと言うのもちょっと勇気がありません。

 詰まるところ,アセンブラ的にCを使い,十分なテストで乗り切る事が,AVRとの付き合い方かも知れないと思います。

2022年の散財

  • 2022/12/26 12:02
  • カテゴリー:散財

 先日も書きましたが,2022年はレトロPCで遊ぶ年になりました。おかげで単価の大きな買い物は少なく,また精神的な問題もあって全く新しい事に興味が持てない状況でしたので,この1年の三山を振り返るという恒例行事も,珍しく低調なものとなりました。

 大きなものを買ったという記録を並べてみても5つほどで,何を書こうかと選ぶ必要がないというのも,さみしいものでした。

 さらに深刻だったのは,買ったものを使って喜んだり,不満を持ったりという「その後」がほとんどなく,買ったはいいけどなにもしない,ということがあったことです。つまりそれは,買わずにいてもなにも生活に変化をもたらさなかったということです。

 何度も書いているように,その代わりにレトロPCで遊んだり,AVRマイコンで工作したりと,それなりに楽しい時間を過ごしていたとは思います。しかし,音楽にしても写真にしても,感性に触れるような趣味を楽しめるほどのゆとりが,もうなくなっているのだろうと思います。

 閑話休題。

 2022年の散財を振り返ってみます。

・アラジンのトースター

 2022年一発目の散財はこれで,ヨドバシの夢のお年玉に含まれていたものです。たかがトースターじゃないかと侮っていましたが,劇的に美味しく焼けるトースターは毎日稼働する調理家電となりました。

 これ単体で買った方が実は良かったんじゃないかと思うほどよい買い物だったと思うのですが,これが自分の希望ではなくヨドバシのセレクションだったというのがミソで,実はヨドバシの夢のお年玉は,毎回良い経験を私たちにもたらしてくれます。

 残念なのは毎年買えるわけではないこと。抽選倍率が年々上がり,今では内容よりは当選したことだけで満足してしまうような状況です。2023年は抽選に外れてしまいました。残念。


・HELIAR40mmF2.8 ASPH L39

 40mmのレンズが流行っています。私はCLEで40mmを使っていますので昔からの付き合いですが,50mmでは大きすぎ,35mmでは小さすぎるという感覚を実は持っていたkとに気付かされたことを覚えています。

 ただこの40mmはMマウントでしたし,典型的なガウス型なので画質は50mmと似ています。もっと違う個性が欲しいなあと思っていた時に購入したのが,HELIAR40mmF2.8 ASPH L39でした。

 ASPHですからね,現代的な写りをします。開放から使える頼もしさも,色の出方も文句なく,それでいて小さく,ずっしりと重いこのレンズは,使っていて楽しいレンズだと思います。

 残念な事は,フィルムがもう使えないものになってしまったことでしょうか。

 話が逸れるのですが,今年はフィルムにとって節目の年だったように思います。ウクライナとロシアの戦争で,主要なフィルムの製造拠点である東ヨーロッパからの供給が滞りがちになりました。

 あおりをうけてコダックもフジもフィルムの供給が減り,買えなくなったばかりか値段が高騰しています。昔100円ショップで買えたカラーネガが,今や2000円ですもんね。

 話はこれで終わりません。コダックのアジア方面の生産を受け持っていた中国の工場がコロナと中米関係の悪化から撤退し,なんと日本国内の薬品の販売を終了しました。

 フジも大幅にラインナップを減らしていますので,以前のように仕上がりやフィルムに応じて現像剤を選ぶという表現手法が使えなくなっています。

 それでも手に入るだけましで,カラー現像はもう全く手に入りません。

 では高価なフィルムをどうやって現像するかと言えば,もう自家現像は無理で,写真屋さんに出すしかありません。カラーはそれでもいいでしょうけど,モノクロは自動現像機が使えませんので,時間もお金もかかります。

 昔はジャンク箱の肥やしで猫またぎ(猫が跨いで通るという意味で,誰も見向きもしない価値のないものという意味です)とも言われたコンパクトカメラが驚くような高値で売られていたり,ボケボケのレンズが「味」として尊ばれるレンズになったりしていますし,つい先日もペンタックスがフィルムカメラを開発するという発表を行ったばかりで,フィルムはまだまだ生き残りそうな印象を与えていますが,肝心のフィルムのメーカーから「がんばります」というメッセージが全くと言っていいほど出ておらず,もしかしてペンタックスはフィルムの供給問題をなにも考えずに話を進めているんじゃないかと,不安になっています。

 私はと言えば,Zfcでも使えるからとHELIAR40mmF2.8 ASPH L39を買ったものの,40mmは純正のレンズの写りが気に入って常用になっています。あ,APS-Cだから60mm相当か・・・


・ハンディオシロスコープHO102

 いきなり年末に飛びますが,毎年なんやかんやでamazonのブラックフライデーで無駄使いをしてしまいます。昨年はHIOKIのテスター,今年はハンディオシロスコープのHO102です。

 HIOKIのテスターは現在測定の主役として大活躍なのですが,HO102はちょっと失敗だったかなと思っています。

 テスターにくっついたおまけ,程度のハンディオシロは昔からありましたし,それに何度も裏切られて来た私も,HO102のスペックを見ると「これは本当にまともなオシロスコープがハンディになったのかもしれない」と手を出してしまいました。

 10:1のプローブが使えること,200MHzお帯域を持つこと,2CHであることだけでも十分なものだと想像出来たからなのですが,落とし穴は垂直感度が低いことでした。

 ノイズを見ることも,波形のちょっとしたトゲを見ることも難しいオシロは,いわば拡大率の低い虫眼鏡です。もうちょっと大きく見たいな,あるいはここに潜んでいるはずなんだけど,という私の期待には届かないものでした。

 テスターとしても中途半端ですし,オシロとしても結局ベンチ型の代わりにはなりません。操作性も悪く,もう少し考えて買えば良かったかなあと思った買い物でした。


・F(x)tecPro1x

 フルキーボード搭載のスマートフォンです。詳しいことは先日書いたばかりなのでその後の話を少し。

 背面のロゴのかすれについては,とりあえず言うだけ言ってみようと思って販売店のサポートに電話をしました。「こんなもんです」と言われれば引き下がるくらいの気持ちだったのですが,予想に反して交換か返金してくれることになりました。

 返金はちょっと避けたいところで,そうすると交換なのですが,完売のため交換品がありません。ロゴの分だけ割引するという選択肢もあったのですが,運良く在庫が見つかり,交換してもらう事になりました。

 交換してもらったものをワクワクして見てみると,ロゴこそ綺麗ではありますが,あちこちに先の尖ったものでこじ開けたようなキズがあるじゃありませんか。

 キーボードを出した状態で,左肩に3箇所,右肩に2箇所のキズがあり,塗装は剥げて地金が出ており,アルミは盛り上がって変形しています。これは未使用品どころの騒ぎではないと,翌日に電話をしました。

 もう交換品はないので返金しかないと言われたのですが,いやいや数日前に返した,もともと私の手元にあったものがあるでしょうと指摘すると,それとの交換は出来ませんとつれない返事です。

 せっかく手に入れた珍しい商品が不良品,交換したらそれがさらに悪いもので,交換品がまさにそこにあるのに交換出来ないなんて,そりゃ切ないでしょうと食い下がりましたが,交換はあくまで同じ価格の同じ程度のものとの交換であり,ロゴがかすれたものを同じ程度として交換することが出来ないという事でした。

 まあ,それもわかります。とはいえ,ロゴがかすれたものは一度不良と認定されたわけで,交換してもらうと不良としての扱いが取り消される形になるというのは,これで腑に落ちないものがあります。

 お店が出来ない事は出来ない,出来る事は精一杯やると言うスタンスだったのでいろいろ提案をして下さったのですが,結局今手元にある傷だらけのものを際査定し,これを値引き販売することで差額を返金してもらう対応で手を打ちました。

 金額を書くとなにかと問題があると思うので書きませんが,私としては想像以上に割り引いてくれたと思います。言い方を変えれば,それだけこのキズは大きな減額となるものだったのでしょう。返品されても売り物にならず,出来れば私に持っていて欲しかったということでしょうね。

 そういううがった見方はともかくとしても,お店の対応は荒っぽさがあるものの,お店として可能な選択肢を出し惜しみせずに複数提案してくれたことは,とても信頼出来るものだったと思います。お店の名誉のために書いておきますと,ロゴのかすれもキズも,未使用品として入荷した商品に最初からついていたものだったわけで,いわばメーカーの品質基準を満たした仕様です。

 それを検品でお店の基準による再評価ではじけなかったことに問題はありますが,誰の手にも渡っていないという意味での未使用品という表現に偽りはなく,メーカーの出荷基準に合格した良品であると強弁しても通ったと思います。(でも不良在庫の買い切りで流れてきた商品にメーカーのサポートはありませんから,全責任を負うのがお店のつとめです)

 今にして思うと,販売店も逃げずに,自分の責任の範囲で十分に誠実な対応をしてくれたと思います。感謝ですね。

 キズも目立ちますし,塗装も剥げていますが,動きそのものは問題がないようです。実査に使ってみるとBlackberryKEYONEとはまた違った快適さがあります。OSはAndroid11と2世代も前ですが,セキュリティアップデートがGooglePlayで配布されるので実際に使える時間は長く出来そうです。

 あとは壊れないことを祈りたいです。外出先でスマートフォンが壊れるというのは,酸素ボンベがなくなるようなものですからね。


・STAX SR-507
 11月の初旬のことですが,STAXのアウトレットから入荷連絡がきました。私が使っているSTAXのイヤースピーカーはSR-303でもう年以上も使っているものです。

 イヤーパッドの交換は何度も行っていますが,スポンジがすでにボロボロになっており,音響的にもよろしくない状態だったことが気になっていましたが,この20年で価格が急激に高騰したことや,高級路線になってしまったことから,SR-303の後継としてSR-307あたりをアウトレットで探していたのです。

 あいにくその時は完売で手に入りませんでしたが,入荷したら連絡をもらうことにしてあり,それが忘れた頃にやってきたというわけです。お値段は26180円で,なかなか微妙な値段です。

 そこでふと,このSR-307がヨドバシでいくらで売られていたのかが気になり,調べたのがきっかけで,もう1ランク上げてみてはどうだろうと大人の発想が首をもたげてきました。

 アウトレットの在庫を調べてみると,SR-507が53900円です。Λシリーズの後継であるSR-L500が8万円を越える価格であることを考えると,現在はミッドクラス,当時のハイエンドをこの値段で買うチャンスはもう二度と来ないでしょう。

 同じクラスのものを2つ持っていてもつまりません。本革のイヤーパッドにも憧れがありますし,個々は少し背伸びをしてSR-507を買った,と言うわけです。

 届いて早速聞いて見ましたが,実は少しがっかりしたのです。SR-303は高解像度で,これまで聞こえなかった音が聞こえる魔法のヘッドホンでした。しかし低音はあまり豊かとは言えません。私はそれがかえって聞きやすく,好ましいものと思っていました。

 SR-507は低音が豊かになり,普通のヘッドフォンと同じ傾向になったと思います。その点では,コンデンサ型の弱点を克服したモデルと言ってよいのでしょうが,一方で解像度が落ちたように思えたのです。

 とはいえ,小さい音を聴きたいという気持ちから気が付いたらボリュームMAXという,音量のリニアリティのすごさとダイナミックレンジの広さ,大音量を破綻なくストレートに再現する能力はもちろん健在で,音が丸くなった分リスニングに疲れもなく,オーディオマニアにはこの方が受けるよなあと思った次第です。

 STAXはやっぱりあの角形じゃないと,というSTAX原理主義の私には,ΛシリーズこそがSTAXです。おそらく最後のSTAXになるだろうSR-507と,SR-303は併用したいと思います。


・ゲームの類い

 購入当時に書き忘れていたものがゲーム機で,AstroVisionMiniとMegadraive2mini,そしてゲーム&ウォッチのゼルダの伝説を買いました。

 AstroVisionMiniは正直期待外れで,あまり盛り上がらなかったように思います。一方のMegadraive2miniは,期待を越える収録数とラインナップ,そして遊べるクオリティで,期待を大きく越えるものでした。気合いの入れ方が全然違うと感じます。

 特にドッヂ弾平は噂通りの良ゲーで,あまりゲームに関心を示さない娘が楽しんでいました。値段以上に楽しめるので,スプラトゥーンに疲れた人は息抜きに買ってみてもいいと思います。

 本命はゲーム&ウォッチです。マリオは発売当時に買っていましたが,ゼルダはもともと興味がなかったので買っていませんでした。

 しかし,娘がPCで古いファミコンのゲームで遊ぶようになったのを見て,ゲーム&ウォッチにファミコンのエミュレータを入れれば手軽に遊べるのではと思い立ち,amazonのセールの時に買いました。

 買ってすぐ分解,事前にaliexpressで調達してあった64MbyteのEEPROMに交換して,先人達が切り開いた道をありがたくトレースさせて頂きました。

 ちなみにROMんも書き込みツールとしてSTMicroのST-LINKあ必要になるのですが,私は偶然Nucleoを持っていたので,これを使うことにしました。

 ゼルダから外したEEPROMをマリオに移植し,マリオは4MBのEEPROMを搭載したモデルとして改造しました。

 ゼルダはオリジナルのゲームが大きく,すべて外部フラッシュに置くため設定が消えないようですが,マリオはオリジナルの機能をCPU内蔵フラッシュに書き込むため,設定が消えてしまうと言う問題があるようです。

 ともあれ,ゼルダは大容量ストレージを手に入れ,MasterSystemやPCエンジンのエミュレータまで取りこんで,レトロゲームマシンになりました。

 娘に渡してみると,喜んでファミコンのゲームでしばらく遊んでいましたが,気が付いてみるとちゃんとゼルダの伝説で遊んでいました。改造の必要などなかったというオチがつきましたが,クリスマスという事もあり,プレゼントしました。

 

 ということで,今年もいろいろ買いました。数は少ないながらも,実はレトロPCや電子工作関係で部品を買ったり,オークションに突っ込んだりと,単価は小さいながらも合計するとびっくりするような金額になっていそうな気がします。

 もともと,手持ちの部品を使って安く作ろうという同機で始めた工作も,結局手持ちがないという理由で買い足す羽目になり,結局部品が減っていない(それどころか増えている)という悪い状況です。

 来年は,自宅の修繕や子ども塾等で大きなお金がかかります。無駄遣いは慎まないといけないなあと思います。

 

2022年とAppleII

 さて,2022年もそろそろおしまい,今年は仕事面で10年に一度の挫折があり,5月頃から半年ほど毎日がとても苦しい年でした。今もってその状況は根本的には変わっておらず,気の持ちようとある種のあきらめで,なんとか平静を装っていられる感じですが,挫折の時こそ趣味のみに生きるのが私。

 これまでも,カメラの修理などがどん底から引き上げてくれた(もしくはそれ以上沈むことを防いでくれた)のですが,今回はそれがレトロPCでした。

 レトロPCというのは1970年代から1990年代にかけて発売されたパソコンのことです。各社まちまちのハードウェアで互換性など全くなく,むしろその非互換こそが他社との差別化に繋がっていたという,よく言えばエキサイティングな,悪く言えば消費者そっちのけだった,黎明期のパソコンたちです。

 私も当時を知る人ですので,実家から持ち帰った古いパソコンのうち,当時のものをレストアして当時のまま使うことは,とても簡単なことでした。しかしそれはすでに分かっている結論までのプロセスを,ただなぞるだけの行為に過ぎません。

 新しい発見は少なく,動いたという安心感だけが残るもので,おそらくすぐに触らなくなるだろうなあと,目に前に並ぶ実家からの荷物を見て思ったものです。

 しかし,新しい体験が伴うなら話は別です。1980年代当時,私は学生であり,百花繚乱だったわずか数年間を楽しむには幼すぎました。お金も知識も交友関係もです。

 分厚い雑誌の広告を見ては「いいなあ」「欲しいなあ」と思ったり,「すごいすごいとは聞いているけどなにがそんなにすごいんだろう」とか「いつかは貯めそう」と思って結局試せずにいたりしたものが,とにかくたくさんあります。

 おそらく,現在のレトロPCのブームは,当時を懐かしむことだけではなく,当時のものを現代の技術で拡張したり,現在の自分の能力で動かして,新しい体験をすることにも支えられているんじゃないかと思います。

 そう,大人となった今では,お金もあります。知識も技術もあります。新しい部品も手に入ります。そして多くの資料が手に入るようになっています。

 あたかも転生もののように,かつて出来なかったことを今楽しむこともそうですし,当時は手に入らなかった素晴らしい性能の部品を使って,当時は構想だけで終わっていたものや実現が難しかったものを現実にしたりと,シンプルなマシンだからこそ自由にいじることが出来るレトロPCで楽しんでいるんだろうと思います。


 私の場合,年齢が高くなってから触り始めたX1turboIIIは,やり残したturboZ-BASICの起動で興味が失せてしまったわけですが,小学生の時に触り始めて,いつかはフロッピーディスクで動かすんだと夢見ていた当時を,現実に堪能しました。

 しかし,もっとも楽しんだのはAppleIIです。私がパソコンに興味を持っていた頃はすでにAppleIIは日本国内でもマイナー機種になっていました。もちろん熱心なファンはたくさんいましたし,最初からマイナーだったマシンとは違い,AppleIIはこの世界のパイオニアでしたし,性能は当時も全く色褪せず,高嶺の花であり続けたマシンでしたが,それゆえに持っている人がほとんどおらず,お店で見かけることも少なかったのです。

 1970年代生まれのAppleIIは,その後隆盛を誇るMicrosoft BASICをROMに内蔵した多くのマシンとは異なる流儀で動かすマシンで,仮に当時AppleIIを与えられてもきっとなにも出来なかっただろうと思います。

 実際,1990年代前半にAppleIIを初めて手に入れた時には,電源を入れるところまでは出来ても,そこから先はなにも出来なかったことを覚えています。

 東レ時代の本物のJ-plusだということで捨てずに持っていましたが,それが実家にやってきてから,なんとか動かして見ようと思ったのが今年の2月頃のお話です。

 少しgoogleで調べてみると,AppleIIの情報は,それはもうザクザク出てきます。日本国内では海外製の高価なマシンだったAppleIIは,当然のことながら海外ではベストセラーモデルで,多くの人にとって最初の1台だったモデルなのですから,海外の情報に簡単にアクセスできなかった当時とは,見える色が異なるはずです。

 加えて円高。昨今円安と言われていますが,AppleIIのころは1ドル300円ですから,円は今の半分以下の価値しかなかったわけです。当時日本国内で36万円だったAppleIIは,今でも15万円くらい,最も安いときなら10万円くらいだったりするのです。
 
 そういう気持ちでAppleIIを眺めてみると,当時全く縁がなかったAppleIIを今当時のつもりでトレースすると,全く新しい経験を得ることになるんじゃないのか,もっと言えばあの時代にタイムスリップすることに等しいんじゃないのか,と思うようになりました。

 当時と違ってお金はほとんどかかりません。情報もあふれています。難しいのは当時のハードウェアを手に入れる事ですが,AppleIIは幸い数が出ているので,探すのは難しくありません。最悪自作も可能です。

 ということで,この10ヶ月ほど私はAppleIIにどっぷりでした。

 最初はとにかく電源を入れたところから先に進もうということでしたが,そのために必要になったのはディスクイメージをディスクに書き戻す手段です。これにはこの界隈でよく使われているツールを動かす必要がありますが,そのために16kBの拡張メモリが必要でした。

 メモリは,基本的な入出力仕様が当時のままなのに,中身は強烈に増えているという珍しい部品で,AppleIIの時代には4kBitだったSRAMは,今ではその1000倍以上のものが簡単に入手できます。

 手持ちの256kBitのSRAMを使って自作したあとは,AppleIIの扉が一気に開いたような面白さで,憧れた有名なゲーム,ツールを楽しみ,新しい技術や知識を得てまるで当時のようなワクワクした毎日を過ごしていました。

 DIskIIの修理もそうですし,Z80カードでCP/Mもそうです。CP/Mは,当時X1turboで少し囓りましたが,面白いと思えず,とても不便で面倒くさいという印象しかありませんでした。

 しかし今触って見ると,非力なZ80でよくここまでやるもんだなあと思うほど,良く動いてくれます。これが当時の世界標準だったのかと,その頃いかに無知だったのか,あるいは自分の少し外側には全く見た事のない輝くような世界があったことを知らずに過ごしていたのか,思い知ることになりました。

 AppleIIは何度も壊れてしまいましたが,その都度修理をあきらめなかったのも,まだやり尽くしていないという知識欲からだったと思います。それに修理が現実的だと思えるくらいの情報が入手出来ることも,カスタムチップが少なく部品の入手も難しくないことも,あきらめなかった理由だと思います。

 ということで,AppleIIでやりたいことはほぼやり終えました。ここから先は例えばAppleIIで音楽を作るとか,AppleIIGSを手に入れるとか,自分で6502のコードを書いてみるとか,そういうことをやるしないでしょう。しかし,当時私がそこまでやっていたかと言えば疑問で,詰まるところ歳を取っても私は私ということです。

 当時,こんなに面白い世界を楽しんでいた人たちがいたんだなあと,羨ましく思いましたし,とはいえ当時ここまでの環境を持っていてもきっと使いこなせずに終わっただろうなあと,美しいデザインのAppleIIを見ながら思います。

 同じ事をあの当時にやろうとすると,おそらく数百万円かかったでしょう。ほとんどがオープンになっていて,今なら無償で使えるソフトウェアを全部購入すると考えると,高級車が買えるほどの経済力がないと経験出来なかったでしょう。

 当時の価値観ではありますが,その楽しみは費用に見合うものだったはずで,楽しくないはずがありません。だから私にとって,それは懐かしいのではなく,新しい体験でした。

 残念な事に,新しい経験も済んでしまえば懐かしさにいずれ変わります。次から次へと試したいことが出てきたAppleIIの探検も,CP/Mが起動した時にもう掘り尽くした感じがしました。さみしいことですが,AppleIIの追体験という旅は,ここら辺で終わりのようです。

 

ATTiny10でSi5351Aを設定する

  • 2022/12/21 12:04
  • カテゴリー:make:

 ATTiny10でSi5351Aを設定するお話,先日の続きです。

 今回はKiCadで図面を書いて中国の基板メーカーに発注するということを1つの目的に,せっかく基板を作るんだからと小さなものを作ってみようと考えました。

 Si5351Aはどんな周波数でも作る事の出来る魔法のICです。これに周波数が変わらないTCXOを組み合わせれば,超高精度・超高安定な任意の周波数を(しかも動じに3つまで)作り出すことができます。

 以前も書きましたが,Si5351Aは25MHzか27MHzの水晶発振子を繋ぐことしか出来ないバージョンですが,安価に売られている26MHzのTCXOを突っ込む事に成功しています。

 これを使えば通常の水晶発振子の20ppmからTCXOの1ppmの精度を持つ,様々な周波数のb発振器を作る事が出来るわけです。

 ただ,設定には200近いパラメータをI2Cを通じて書き込む必要があり,それなりの大きさのマイコンが必要になるという点がシステム全体の規模を押し上げています。しかも一度設定してしまえばもうマイコンは不要になるので,これがなかなかもったいないのです。

 そこで安価な8ピンマイコンであるATTiny13Aをかつて使ったわけですが,それでも結構面積は大きく,20ピンのDIPくらいの大きさになってしまっていました。そこでATTiny10を使い,専用の基板を起こすことで,14ピンDIPと同じ大きさにして,良くある発振器とピンコンパチにしてみようと考えました。


 回路は出来るだけ部品点数を減らしています。I2Cのプルアップは内蔵で代用したので,抵抗はステータスを示すLEDのために1つだけしかありません。

 マイコンのATTiny10とSi5351Aは表面に配置,26MHzのTCXOは裏面です。TCXOは電源が2.8Vなので3.3Vから落とすためLDOが必要になりますが,これも秋月で売られていたBH28PB1WHFVを使いました。

 LDOには0.47uFのパスコン,Si5351には0.1uFのパスコン,それからTCXOの出力とSi5351の入力の間に0.1uFのコンデンサを挟んで,部品はたったこれだけです。

 基板を描いていたときには狭いなと思ったものですが,出来上がった基板を見るとスカスカです。

 20221219142605.jpeg

 早速実装していきますが,自分の回路は信用出来ないので,1つずつマウントして動作確認をして進めます。LDOの動作,TCXOの発振,ここまで出来たらあとは一気にSi5351AとATTiny10とLEDを取り付けて完成です。

 向きを間違えたりしましたが,動作は問題なし。違う周波数のバージョンをもう1つ作っておきましょう。

 20221219142606.jpg


 さて,測定です。

 まず1つ目は,デジタルオーディオの世界ではなにかと目にする,256fsという奴を3つ出すモジュールです。かつてサンプルレートコンバータを作った時,3つの異なる周波数が必要になり,1つ600円もする水晶発振器を3つも買った覚えがありますが,この時私がこのモジュールを作っていればどんなに安く簡単に作る事が出来たでしょう。

TCXOの周波数 : 25.9999683MHz(-1.219ppm)
12.288MHz : 12.2879856MHz(-1.172ppm)
11.2896MHz : 11.2895864MHz(-1.205ppm)
8.192MHz : 8.19199016MHz(-1.201ppm)


 TCXOの初期周波数偏差は2ppmですので十分規格内,それぞれの周波数もこれに準じた偏差となっています。成功ですね。

 次によく使う周波数を3つ出すものを作りました。10MHzや20MHzは測定器などのタイムベースでもおなじみです。

TCXOの周波数 : 25.9999754MHz(-0.946ppm)
10MHz : 9.9999912MHz(-0.880ppm)
12MHz : 9.9999894MHz(-0.883ppm)
20MHz : 19.9999823MHz(-0.885ppm)

 これもなかなかよいではありませんか。

 TCXOの安定度は1ppmから2ppmですので,普通の水晶発振子よりもヒトケタ小さいです。

 つくづく惜しいのは,Si5351が秋月で買えなくなってしまっていることです。かつてはなんと150円で買えましたが,今は基板とセットでしか買えません。Digikeyで探してみると1つ360円か・・・円安を考えるとそんなもんかも。

 Si5351Aは壊れやすいので,実験中に何度も壊しましたし,もっと買っておけば良かったと後悔しています・・・

 

 

ユーティリティ

2026年04月

- - - 1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 - -

検索

エントリー検索フォーム
キーワード

ユーザー

新着画像

過去ログ

Feed