· 

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ピンずつ設定していっていることによる、ずれがわかります。
こういうのはあかんね、改善しようよ某超巨大世界企業の方。

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