2024年3月31日日曜日

Raspberry Pi Picoでロジアナ(3)

μLAってのがあって、Raspberry Pi Picoをロジアナにできちゃうらしいのでやてみる。

電圧問題についてちょっと考える。Raspberry Pi PicoのGPIOは3.3V系なので5V系を観測するには何か工夫が必要。で、こんなもの(秋月LVCH16T245使用16ビット双方向レベル変換モジュール(https://akizukidenshi.com/catalog/g/g115696/))を使ってみる。本来レベル変換用のモジュールなんだけど、このモジュールで使用しているSN74LVCH16T245DIRxは電源に関わらず、6.5Vが限界の入力電圧なので、入力側(VA)も出力側(VB)も電源電圧を3.3Vで運用できる(と思う)。VA=3.3Vの時にHと認識されるのは2V以上でLと認識されるのは0.8Vなので、0V<-->5Vでも使える。なおDIRxで方向を切り替えられるけど、今回はA-->Bで固定。
5Vのテスト波形生成はArduinoUNO R3を使う。単に上げ下げすればいいので、こんな感じで。
  1. uint8_t portb_val[2];
  2. void setup(){
  3.     uint8_t portb_ini_val;
  4.     DDRB|=0x3F;
  5.     PORTB&=(~0x3F);
  6.     portb_ini_val=PORTB;
  7.     portb_val[0]=(portb_ini_val|0x15);
  8.     portb_val[1]=(portb_ini_val|0x2A);
  9. }
  10. void loop(){
  11.     delay(10);
  12.     PORTB=portb_val[0];
  13.     delay(10);
  14.     PORTB=portb_val[1];
  15. }
ちなみに、delay(2000)として、テスターを使っていちおう、電圧が5V-->3.3Vに変換されていることを確認しました。(やっぱいきなりは怖い。でうまくいっていた。)
こんな感じでつなぎます。でPulseviewで見ると、
、、、あれ?DUTYがクソというか不安定なんやけど。
自宅のまじめなロジアナ(LAP-C(16128))でとってみた。
そこそこきれい。うーん。やっぱ夢見ちゃいかんなー。700円+300円だもんなー。
ロジアナ自作の野望はすててないけどRP2040はこんなもんだってわかったのがよかった。用途によるだろうけどRP2040ってマイコンは魅力的。なんといっても秋月で160円で買える。ATSAMD21G18Aだと530円もする。同じCortex M0+コアでメモリーも格段に大きいRP2040のほうがめちゃくちゃ安い。今後、何かボードを作るときにRP2040が選択肢に入るよなー。

でもSWDで書き込む練習(というか何か準備)しないと。ドライブに書き込む方式、使えない会社多いよね。まったく誰がこんな困った仕様を考えたんだか、、、ライターを買いたくないホビーユーザとか、ある程度ニーズはあるんだろうけど。SWDの説明とか実施例が一掃されてしまうので、ほんと迷惑。

2024年3月30日土曜日

Raspberry Pi Picoでロジアナ(2)

 

μLAってのがあって、Raspberry Pi Picoをロジアナにできちゃうらしいのでやてみる。

動かすところまでやったので、何か波形を入れてみる。何とか簡単に波形を作れんやろうか、、、そうだドットネットしよう。
で、
  1. using System;
  2. using System.Timers;
  3. using System.Device.Gpio;
  4. using Iot.Device.Ft232H;
  5. using Iot.Device.FtCommon;
  6. public class study4{
  7.     private static System.Timers.Timer? aTimer;
  8.     private static Ft232HDevice? ft232h;
  9.     private static GpioController? controller;
  10.     private static int[]? pin;
  11.     private static int[]? ledOn;
  12.     private static PinValue[] pin_state={PinValue.High,PinValue.Low};
  13.     public static void Main(){
  14.         ft232h = new Ft232HDevice(FtCommon.GetDevices()[0]);
  15.         controller = ft232h.CreateGpioController();
  16.         pin = new int[8];
  17.         ledOn=new int[8];
  18.         pin[0] = Ft232HDevice.GetPinNumberFromString("C0");
  19.         pin[1] = Ft232HDevice.GetPinNumberFromString("C1");
  20.         pin[2] = Ft232HDevice.GetPinNumberFromString("C2");
  21.         pin[3] = Ft232HDevice.GetPinNumberFromString("C3");
  22.         pin[4] = Ft232HDevice.GetPinNumberFromString("C4");
  23.         pin[5] = Ft232HDevice.GetPinNumberFromString("C5");
  24.         pin[6] = Ft232HDevice.GetPinNumberFromString("C6");
  25.         pin[7] = Ft232HDevice.GetPinNumberFromString("C7");
  26.         for(int i=0;i<8;i++){
  27.             controller.OpenPin(pin[i], PinMode.Output);
  28.             ledOn[i]=(i%2);
  29.         }
  30.         SetTimer(10);
  31.         Console.WriteLine("\nPress the Enter key to exit the application...\n");
  32.         Console.WriteLine("The application started at {0:HH:mm:ss.fff}", DateTime.Now);
  33.         Console.ReadLine();
  34.         aTimer.Stop();
  35.         aTimer.Dispose();
  36.     }
  37.     private static void OnTimedEvent(Object source, ElapsedEventArgs e)
  38.     {
  39.         for(int i=0;i<8;i++){
  40.             ledOn[i]^=1;
  41.             controller.Write(pin[i], pin_state[ledOn[i]]);
  42.         }
  43.     }
  44.    private static void SetTimer(Double intvl)
  45.    {
  46.         // Create a timer with a two second interval.
  47.         // Hook up the Elapsed event for the timer.
  48.         aTimer=new System.Timers.Timer(intvl);
  49.         aTimer.Elapsed += OnTimedEvent;
  50.         aTimer.AutoReset = true;
  51.         aTimer.Enabled = true;
  52.     }
  53. }
まぁこんな感じでFT232Hのピンをトグルする。タイミングはクサっているが、まぁロジアナで見たいのでむしろ好都合。
で、結線は、、、何も考えないで直結です。
実際のところ、こうなる。
で、LinuxだとなぜかPulseviewを先に起動していないとちゃんと動いてくれないとか、色々あるけど、Pulseviewを起動して、いつでも来いな状態にしておいて、dotnet runってすると、
なるほど、ちゃんと取れているようです。こう見るとDutyだいぶひどいね。拡大すると、1ピンずつ設定していっていることによる、ずれがわかります。
こういうのはあかんね、改善しようよ某超巨大世界企業の方。

明日から新年度なので、気持ちを新たに、、、できるわけない。とめどなく襲ってくるアレや、終わりの見えないアレや、もんもんとするアレ



2024年3月29日金曜日

Raspberry Pi Picoでロジアナ(1)

 

μLAってのがあって、Raspberry Pi Picoをロジアナにできちゃうらしいのでやてみる。

uLAはこちら(https://github.com/dotcypress/ula)
Raspberry Pi Picoって書いたけど、実際に使ったのは秋月のこちら(https://akizukidenshi.com/catalog/g/g117542/)。RP2040を使っているから、問題ない。たった700円なので買うっきゃないわな。uLAのページのReleases pageっていうリンクからビルド済みのuLAを落としてきて、Raspberry Pi Picoに書き込めばいい。書き込むにはBOOTボタンを押しながらUSBでPCに接続して、現れたドライブにビルド済みuLAをコピペするだけ。
ちなみに、拙者Linuxでやっているので、ちょっと悩んだ。が、BOOTボタンを押しながら接続して(接続後はBOOTボタンを離してよい。ずっと押しておけ的な記述をしているページもあるけど、そんなことなかった。)、
ls /dev/disk/by-id/ -l
ってすると
合計 0
lrwxrwxrwx 1 root root  9  3月 28 09:13 ata-HL-DT-ST_DVDRAM_GUD0N_802H3029296 -> ../../sr0
lrwxrwxrwx 1 root root  9  3月 28 09:13 ata-SAMSUNG_MZNLN256HMHQ-00007_S334NX0JC33194 -> ../../sda
lrwxrwxrwx 1 root root 10  3月 28 09:13 ata-SAMSUNG_MZNLN256HMHQ-00007_S334NX0JC33194-part1 -> ../../sda1
lrwxrwxrwx 1 root root 10  3月 28 09:13 ata-SAMSUNG_MZNLN256HMHQ-00007_S334NX0JC33194-part2 -> ../../sda2
lrwxrwxrwx 1 root root  9  3月 29 21:59 usb-RPI_RP2_E0C9125B0D9B-0:0 -> ../../sdb
lrwxrwxrwx 1 root root 10  3月 29 21:59 usb-RPI_RP2_E0C9125B0D9B-0:0-part1 -> ../../sdb1
lrwxrwxrwx 1 root root  9  3月 28 09:13 wwn-0x5001480000000000 -> ../../sr0
lrwxrwxrwx 1 root root  9  3月 28 09:13 wwn-0x5002538d4281f39e -> ../../sda
lrwxrwxrwx 1 root root 10  3月 28 09:13 wwn-0x5002538d4281f39e-part1 -> ../../sda1
lrwxrwxrwx 1 root root 10  3月 28 09:13 wwn-0x5002538d4281f39e-part2 -> ../../sda2
ってでるので、/dev/sdb1なのねってわかる。で前もってマウントポイントを作ってある
(例えばsudo mkdir /mnt/pico1)として、
sudo mount -o uid=hoge,gid=hoge /dev/sdb1 /mnt/pico1
ってすると、hogeって人が所有権を持った状態でマウントできる。
で、これでコピペできるわい。
で、コピペしたら一度USBを抜いてもいっかい挿す。
lsusbでみると、CDC-ACMクラスで認識されている。
ls -la /dev/ttyACM*
ってすると、
crw-rw---- 1 root dialout 166, 0  3月 29 22:12 /dev/ttyACM0
ってでるので、dialoutグループにいないとアクセスできないぜってわかる。で
sudo adduser hoge dialout
ってして、hogeさんをdialoutグループに追加して再起動(sudo shutdown -r now)。
これでアクセスできるようになったので、
sudo apt install pulseview
でpulseviewをインストールする。
でpulseviewってコマンドを撃って起動する。と
で、No Deviceってやつを押す。




こんな感じで押していく。
こうなるので、後はやりたいようにやる。
てかWindowsならもっと簡単やん、、、そす。
では、もちっとしたら、実際に何か見てみることにする。このままだと、5V系の観測はできないので、そのへんもちと考えんといかん。

さて、約一ヶ月ぶりの更新。いやーなんかやる気せんのよねー。いや、やりたいことが多すぎてどれから手を付けていいかわからんわけだよ(言い訳)。