ch55xduinoの特徴
先日からCH552Tをいじり始めたが,開発環境としては,ch552xduinoが良いように思えたので,使ってみた. 多少はその特徴が分かってきたので,メモを残しておく.
まず,Arduino IDEを立ち上げて,File - Preferencesとして,Additional Boards Manager URLsのところに,以下のどちらかのURLを追加する.
https://raw.githubusercontent.com/DeqingSun/ch55xduino/ch55xduino/package_ch55xduino_mcs51_index.json https://raw.githubusercontent.com/WeActTC/ch55xduino/ch55xduino/package_ch55xduino_mcs51_index.json
私は開発者のものである前者を選んだ. そして,Tools - Board:… - Boards Managerから,ch552で検索して,CH55xDuino MCS51 plain C core (non-C++)をインストールする. Linuxの場合には,権限の問題をクリアするために,以下のコマンドを実行する.
sudo cp ~/.arduino15/packages/CH55xDuino/tools/MCS51Tools/20??.??.??/linux/99-ch55xbl.rules /etc/udev/rules.d/ sudo udevadm control --reload-rules sudo udevadm trigger
これでインストールは完了である.
Arduinoでは,Tools - Board - CH55x Boards - CH552 Boardとして,その下のClock Sourceは24MHz (internal) 5Vを選ぶ. プログラムを作ったら,DFUモードにして書き込む. 具体的には,P3.6を3.3Vにpull upした状態で,USBコネクタを接続して,すぐに書き込む. 開発ボードには,それ用のボタンがあるので,ボタンを押したままUSBコネクタを接続すれば良い. USB Settingsがdefault CDCの場合には,二回目の書き込みからは,そのままで書き込める.
通常のArduinoはC++だが,ch55xduinoはC言語である. これは,このCPUのフリーのC++コンパイラが無いかららしい. そのためもあり,多少書き方に特徴がある. 他のサイトにも書いてあることだが,ピンは二桁の数字で指定する. ピンのmodeは,INPUT,OUTPUT,INPUT_PULLUPに加えてOUTPUT_ODがある. 最後のはopen drain出力である. USBSerial.printなどの代わりにUSBSerial_printなどを使う. それから文字列については以下の次の段落にあるように注意が必要である. これらの違いを意識するだけで,それなりのプログラムは書けると思う.
文字列は少し癖がある. そのため,文字列をポインタを使って指定して表示しようとしたら,最初はerrorが出てうまく行かなかった. ch55xduinoの表示ルーチンでは,genericという機能を使って,表示したいものの型を判定して,呼び出す関数を切り替えて,適切に表示されるようにしている. そのソースを見てみると,文字列には,__code char *c,__data char *c,__xdata char *cの三つの種類があり,errorはそれがきちんと指定されていないから起こっていることが分かった. ch552には,256byteの内部RAMと1024byteの外部RAMがあり,前者は__data,後者は__xdataというように指定する. ちなみに,内部RAMのほとんどは別の用途に使うので,通常の変数は外部RAMに置かれるが,速い応答が必要な変数は,__dataで指定することによって,内部RAMに置くこともできる. 一方,プログラム本体はプログラムROMというflashにある. その部分に書かれた文字列が,__codeという指定をするのだろう. 文字列はそれがどのメモリにあるかを適切に指定しなけらばならない. 私の今回の場合はポインタの指定に__codeを加えることによって,うまく動くようになった. 普段は,charの配列に__xdataをつけて__xdata charとしておけば,問題無いことが多い.
CH552TのRSTピンを入力用に使う
Debian13でrubyからGPIB制御
texの太字が目立たない
debianのtexで文章を書いているのだが,\bfや\textbfにしても,全く目立たないという問題があった. fontの指定の仕方をいろいろと調べたりしてみたが,最終的には以下のようなコマンドを実行したら,うまく表示されるようになった.
sudo kanji-config-updmap-sys auto
texの設定は難しいな.
ESPでhttps
Gimpのスクリプト
画像を加工するときには,gimpを時々使っている. 単純な作業を繰り返し行うときには,自動化すると便利である. Gimpでは,以前からscript-fuというスクリプトが使えて,自動化することが出来たが,これはschemeという言語を使っているので,それに不慣れなので,あまり使いやすくは無かった. schemeは,括弧を沢山使う言語で,配列やループなどを使うのが大変で,少なくとも私には複雑な処理をするスクリプトを作るのは困難だった. しかし,最近のgimpには,python-fuが組み込まれていて,pythonを使ってスクリプトを書くことができる. Debian13では,Gimp 3.0になっているし,少し古いubuntuでも,snapで3.0をインストールすることができ,python-fuを使うことができる.
python-fuは,Filters - Development - Python-Fu - PythonConsoleでコンソールを立ち上げて,そこから使うことができる. プログラム自体はpythonが使えれば問題無いのだが,少しクセもある. GimpのコマンドはHelp - Procedure Browserから調べることができるのだが,そのままでは使えないのである. 例えば,現在openしている画像のリストを得るgimp-get-imagesというコマンドは,python-fuでは,Gimp.get_imagesとなる. もう一つ例を挙げておくとgimp-image-get-layersは,Gimp.Image.get_layersとなる. “-“が”_“になるのはまだ良いとして,“gimp-“が"Gimp.“などとなるのは,moduleやクラスの名前となっているからのようです. 他にも,Gimp.SelectionやGimp.DrawableやGimp.Channelなどがあるようである.
また,python-fuで作ったスクリプトをメニューなどに登録する方法がまだ分かっていない. 今後は,script-fuよりもpython-fuを使うようになると思う.
light-locker
安定したシステムを運用したいPCには,私はdebianを使うようにしている.Debian 13 Trixieがそろそろリリースされそうだが,少し前からフライングで使い始めている.軽い環境が好きなので,環境としてはLXDEを主に使っているが,新しくインストールしたPCでは,しばらく放置していると,画面が消えて動かなくなっていることに気がついた.少し調べてみたら,light-lockerという画面ロックツールが,画面をロックしていて,通常はマウスやキーボードを使うと復帰するのだが,それが時々うまく行かなくなっているということが分かった.別のスクリーンセーバーを使えば良いのかも知れないが,面倒だけどpkillすると使えるようになる.uninstallしても良いのかな.
attiny261
昔まとめて買ったattiny261を使い切って無くなってしまった. 今は上位互換の861は売っているけど,261は売っているのを見かけないので,今後は861を使うしか無いかな. 昔よりも価格が高くなっているので,261で十分な回路には261を使いんだけど,仕方ありません. 互換性の問題で,そのシリーズを使い続けているが,そろそろ新しい型番の安価なtinyも試してみたいとは思う. 例えば,attiny202とかは,adcや16bitのタイマーもあるので,代替できるはずだけど,プログラムや回路を作り換えるのが面倒だし,202はUPDIという新しい書き込み方式を取っているので,まだ手を出していない.
最近,attiny261を使って回路を作っていたが,ノイズが発生して困っていた. 動作の確認のためにLEDをつけていたのだが,そこに比較的大きな電流が流れていたので,それが原因の可能性があると思って,LEDを動かなくしたら,ノイズが無くなった. 新しく回路を作ると,想定外のところで問題が生じることが多く,その原因を発見するのに苦労する.
以前は,adcが不要なときにはattiny2313を,adcが必要なときにはattiny261/861を,沢山のIOが必要なときにはatmegaまたはarduinoを使っていた. 新しい様々なICが開発されているので,今後はどの目的にどのICを使うかを考えていこうと思う.
linuxでVPN
VPN接続をする必要があるときには,openconnectを使っている. debianやubuntuでインストールするには,aptでopenconnectをinstallすれば良い. いろいろなVPNソフトがあるが,それに応じて下の表のようにprotocolを選ばなければならない.
protocol | VPN |
Cisco's AnyConnect SSL VPN | |
nc | Juniper SSL VPN |
pulse | Pulse/Ivanti Connect Secure SSL VPN |
gp | Palo Alto Networks GlobalProtect SSL VPN |
f5 | F5 Big-IP SSL VPN |
fortinet | Fortinet Fortigate SSL VPN |
array | Array Networks AG SSL VPN |
sudo openconnect --protocol=gp -v servervオプションは何となく付けています.