Netduino home hardware projects downloads community

Jump to content


The Netduino forums have been replaced by new forums at community.wildernesslabs.co. This site has been preserved for archival purposes only and the ability to make new accounts or posts has been turned off.

indimini's Content

There have been 15 items by indimini (Search limited from 30-March 23)


By content type

See this member's

Sort by                Order  

#41414 Netduino Go Ethernet

Posted by indimini on 12 December 2012 - 02:21 AM in Netduino Go

Chris,

On July 12, you wrote "Once we receive the Ethernet module samples, we'll run a few days of tests. Assuming those pass (which they almost always do), it'll take about a month to manufacture, test, and ship the modules to resellers. So not too long..."


Sept 27th you wrote "We have a few last items to check off before we put these on the production line, but at this point it looks like we're good to go. I can't wait to get these out to everyone"


Dec 4th you wrote "We're working on the Ethernet modules and firmware update..." which doesn't sound close to what was promised nearly five months ago.


As somebody who bought into the Netduino Go's vision based on what was posted by your company on this forum, I honestly feel like I've been mislead and bought into a technology that isn't ready for my needs. (I'm also waiting for a one-wire library and a shield base that doesn't require four sockets to use.) I don't mean to be an *ss, but honestly, lots of promises have been made to your customers that aren't being fulfilled. When can we expect real dates for these products/features?



#39265 Netduino Go Firmware v4.2.1

Posted by indimini on 13 November 2012 - 05:48 PM in Netduino Go

Chris, Yes I am on the latest version of the SDK. I guess I didn't read previous posts carefully enough. I was trying to use the PWM w/ the on-board LED's which was what was causing the Go to behave badly. That'll teach me to read more and learn from others experiments before writing code. Bob



#39261 Netduino Go Firmware v4.2.1

Posted by indimini on 13 November 2012 - 05:01 PM in Netduino Go

I hope somebody can help with my Go board post-4.2.1.0 upgrade. I reflashed per the instructions and everything looks good - when I run MFDeploy I can ping the Go, and I see CLR version 4.2.0.0 and the SecretLabs solution vendor version of 4.2.1.0, so it looks like the device is properly set up. However, when I try to debug a simple application from VS 2010, after compiling and selecting the Debug option, the message in the status bar indicates the assemblies are deployed, but then it sits with the message "The debugging target is not in an initialized state; rebooting..." I then hear the sound of the USB device disconnecting, but the device never reboots. If I stop the debugger, and try to restart debugging, I get an error message saying that there is no connected device. Checking the status of the Go in MFDeploy, the device does not appear. I am unable to do anything with the board in this state - I can't deploy/debug any code. I've tried this on two different machines with the same outcome.



#38491 Idea for another module - Easy WiFi?

Posted by indimini on 04 November 2012 - 01:32 PM in Netduino Go

Is is possible to just use the Arduino shield for the Imp with the Go's shieldbase - and do something along the lines described in this tutorial? Electric Imp: Serial communication between Imp and Arduino?



#37046 Get Exception message trying to use 2 Shield Bases

Posted by indimini on 11 October 2012 - 06:06 PM in Netduino Go

Chris,

That sounds encouraging. When making a purchase decision, Go's extensible platform is what drew me from Arduino. Knowing that lesser capable arduino and Netduino/+ boards support OneWire, I was surprised to find that Go + Shield Base didn't offer this protocol, even with its support in NETMF 4.2 and a larger memory footprint of the Go controller.

I'm guessing that a good # of us asking for OneWire need it for our digital temp controls to support our home brewery setups. When technology gets in the way of beer production, something must be done!Posted Image



#36990 Get Exception message trying to use 2 Shield Bases

Posted by indimini on 10 October 2012 - 09:35 PM in Netduino Go

Add me as a definite for wanting this. Posted Image I still don't understand why, when it is part of the standard 4.2 NETMF build, Go doesn't support it.



#36986 Get Exception message trying to use 2 Shield Bases

Posted by indimini on 10 October 2012 - 07:59 PM in Netduino Go

Will Shield Base support NETMF 4.2's OneWire implementation coming out of Beta? I have a project that requires OneWire, but right now the OneWire doesn't work. Or, is this an area where I would leverage a NetGadgeteer module and GHI libraries for OneWire? Sorry - just still confused on what I can or cannot leverage in 4.2 with Shield Base.



#36981 Continuous Rotation Servo on the Shield Base controlled with Potentiometer

Posted by indimini on 10 October 2012 - 07:24 PM in Netduino Go

Great write up! This inspired me to pull out some old servos and start playing with the shield and PWM. (I'm so new to all this microcontroller stuff, but having far too much fun.) I ended up creating some classes to make it easier to play with the servos. I thought I'd post it to get feedback. (Who knows, others may even find it useful.)

First, I defined a class "Servo" that extends the Microsoft.SPOT.Hardware.PWM class. The class adds methods to center the servo, to rotate it given a specified angle, and to position it given a bounded value (e.g. POT value).

The servo class is designed to work with the ServoFactory static class. ServoFactory lets you configure settings for different servos and offers a single static method to construct a servo instance. I use this rather than instantiating the servo's directly. The servo type, defined in an enum, determines how the servo behaves in terms of allowed range of movement, pulse widths, etc.


  /// <summary>
  /// This class encapsulates the operation of a servo, allowing for easy operations to set angle and return-to-center.
  /// </summary>
  public class Servo : PWM
  {
    /// <summary>
    /// Constructs an instance of the servo.  Using the ServoFactory to create an instance of a specific servo type
    /// is the recommended method of servo instantiation
    /// </summary>
    /// <param name="channel">The PWM channel to which the servo is connected</param>
    /// <param name="info">Struct containing servo-specific functional parameters</param>
    /// <param name="reverse">Indicates whether or not the default servo rotation should be reversed</param>
    /// <param name="maxAngle">Sets the maximum angle the servo can travel.</param>
    public Servo(Cpu.PWMChannel channel, ServoFactory.ServoConfig info, bool reverse, double maxAngle)
      : base(channel, 20000, info.Neutral, ScaleFactor.Microseconds, info.Invert)
    {
      ReverseMult = reverse ? -1 : 1;
      MaxAngle = maxAngle;
      Settings = info;
    }

    /// <summary>
    /// A multiplier used to negate values if reverse mode is desired.
    /// </summary>
    private float ReverseMult;
    /// <summary>
    /// Holds the maximum rotation angle allowed
    /// </summary>
    private double MaxAngle;
    /// <summary>
    /// Holds a reference to the servo's parameter values
    /// </summary>
    private ServoFactory.ServoConfig Settings;

    /// <summary>
    /// Returns the servo to it's neutral position
    /// </summary>
    public void Center()
    {
      base.Duration = Settings.Neutral;
    }

    /// <summary>
    /// Moves the servo to the specified angle, or the max angle if outside those bounds
    /// </summary>
    /// <param name="angle">The position angle in degrees</param>
    public void TurnTo(double angle)
    {
      double a = System.Math.Min(System.Math.Abs(angle), Settings.MaxRotationAngle);
      if (angle < 0)
        a *= -1;
      base.Duration = (uint)(Settings.Neutral + (a / Settings.AngleFromNeutral * Settings.DegPulse * ReverseMult));
    }

    public void ReverseRotation()
    {
      ReverseMult *= -1;
    }

    /// <summary>
    /// Moves a servo to a position based on the input relative to the min and max bounds. inMin corresponds to the minimum
    /// servo angle and inMax the maximum angle.
    /// </summary>
    /// <param name="input">desired value</param>
    /// <param name="inMin">lower bound</param>
    /// <param name="inMax">upper bound</param>
    public void MoveTo(double input, double inMin, double inMax)
    {
      double outMin = Settings.Neutral - ReverseMult * (MaxAngle / Settings.AngleFromNeutral * Settings.DegPulse);
      double outMax = Settings.Neutral + ReverseMult * (MaxAngle / Settings.AngleFromNeutral * Settings.DegPulse);
      base.Duration = (uint)((input - inMin) * (outMax - outMin) / (inMax - inMin) + outMin);
    }
  }


  /// <summary>
  /// This is a static helper class that provides a factory method to construct a known set of servo types
  /// based on their configuration data.
  /// </summary>
  public static class ServoFactory
  {
    /// <summary>
    /// Defines parameters identifying operational performance of a servo
    /// </summary>
    public struct ServoConfig
    {
      /// <summary>
      /// Enumeration identifying the servo type
      /// </summary>
      public ServoType Type;
      /// <summary>
      /// Holds the pulse width in # of microseconds to set server neutral position
      /// </summary>
      public uint Neutral;
      /// <summary>
      /// Holds the pulse adjustment to rotate the servo the specified pulse angle
      /// </summary>
      public uint DegPulse;
      /// <summary>
      /// Holds the pulse angle set when the DegPulse value is applied to the neutral pulse width
      /// For example, 400 microseconds with a DegPulse of 45 Deg indicates that the servo will rotate
      /// 45 deg when the pulse is added to neutral
      /// </summary>
      public double AngleFromNeutral;
      /// <summary>
      /// Sets the maximum rotation angle for the servo - ensures that users don't try to over-rotate the servo
      /// </summary>
      public double MaxRotationAngle;
      /// <summary>
      /// Sets a boolean indicating whether or not to invert the PWM signal
      /// </summary>
      public bool Invert;
    }

    /// <summary>
    /// Array holding information for each registered servo type
    /// </summary>
    private static ServoConfig[] registeredServos;

    // To Add additional servo definitions, add an enum value above ServoCount and add a record
    // to the ServoInfo array in the initialize method

    /// <summary>
    /// Identifies the servos available.
    /// </summary>
    public enum ServoType
    {
      Airtronics_94102,
      Futuba_S3004,
      ServoCount
    }

    /// <summary>
    /// Initializes the parameters for the known registered servo types
    /// </summary>
    private static void Initialize()
    {
      registeredServos = new ServoConfig[(int)ServoType.ServoCount];
      registeredServos[(int)ServoType.Futuba_S3004] = new ServoConfig { Type = ServoType.Futuba_S3004, Neutral = 1520, DegPulse = 400, AngleFromNeutral = 45, MaxRotationAngle = 90, Invert = false };
      registeredServos[(int)ServoType.Airtronics_94102] = new ServoConfig { Type = ServoType.Airtronics_94102, Neutral = 1500, DegPulse = 390, AngleFromNeutral = 45, MaxRotationAngle = 90, Invert = false };
    }

    /// <summary>
    /// Factory method that creates an instance of the Servo class, initialized from the available servo information
    /// </summary>
    /// <param name="channel">The PWM channel the servo is connected to</param>
    /// <param name="type">The enumeration value for a known servo type</param>
    /// <param name="reverse">If true, the requests to move the servo are reversed from their default behavior</param>
    /// <param name="maxAngle">Sets the maximum allowed rotation angle - defaults to the maximum specified for the servo, but can be made to be less</param>
    /// <returns>An instance of the servo</returns>
    /// <exception cref="UnknownTypeException">Throws this if the servo type is not defined.</exception>
    public static Servo CreateServo(Cpu.PWMChannel channel, ServoType type, bool reverse = false, double maxAngle = double.NaN)
    {
      if (registeredServos == null)
        Initialize();

      foreach (var servoInfo in registeredServos)
      {
        if (servoInfo.Type == type)
          return new Servo(channel, 
            servoInfo, 
            reverse, 
            (maxAngle == double.NaN) ? servoInfo.MaxRotationAngle : System.Math.Min(servoInfo.MaxRotationAngle, maxAngle));
      }
      // If you got here, the servo type was not initialized.
      throw new UnknownTypeException();
    }
  }


An example of how I used this code is shown below.


namespace ServoFun
{
  public class Program
  {

    private static ShieldBase shieldBase;
    private static NetduinoGo.Button btn;
    private static Servo servo;

    static bool started;

    public static void Main()
    {
      btn = new NetduinoGo.Button(GoSockets.Socket1);
      btn.ButtonReleased += new NetduinoGo.Button.ButtonEventHandler(btn_ButtonReleased);
      shieldBase = new ShieldBase(GoSockets.Socket5);

      // Create our type-specific servo
      servo = ServoFactory.CreateServo(shieldBase.PWMChannels.PWM_PIN_D5, ServoFactory.ServoType.Futuba_S3004);

      servo.Start();
      servo.Center();
      started = true;

      while (true)
      {
        Thread.Sleep(100);
      }
    }

    static void btn_ButtonReleased(object sender, bool isPressed)
    {
      if (started)
      {
        if (ndx >= testAngles.Length)
        {
          // Once we get to last test data angle, stop the servo
          servo.Stop();
          started = false; 
        }
        else
        {
          // Test servo rotation.
          servo.TurnTo(testAngles[ndx++]);
        }
      }
      else
      {
        // Pressing after stop restarts the servo and re-centers it.
        servo.Start();
        servo.Center();
        ndx = 0;
        started = true;
      }
    }

    static float[] testAngles = new float[] { 18, 45,-45,-90}; // Specify a set of rotational angles
    static int ndx = 0; // Index into my test data.
  }
}



#36860 One Wire?

Posted by indimini on 09 October 2012 - 02:47 PM in Netduino Go

Sorry for yet another n00b question, but the whole hw/microcontroller world is new to me. (Plenty of .NET/sw experience, which is why I went the Go route.) Is it possible to use the Microsoft.SPOT.Hardware.OneWire class/dll with the Go! and Shield Base? When I add the OneWire reference to my test project, it compiles but trying to call any OneWire methods results in a System.NotSupportedException. I saw in the forums that N/N+ boards don't include support for OneWire b/c of size constraints, but I assumed the more capable Go would support this feature. If I can't use the Microsoft OneWire implementation, how can I read data from a series of DS18B20's with Go + Shield Base? Thanks for any help/insights.



#36809 Netduino Go Firmware v4.2.0 (Update 1)

Posted by indimini on 08 October 2012 - 09:49 PM in Netduino Go

Hi Bob,

I would stick with the latest and greatest...but erase and reflash your mainboard with the latest firmware after updating your Shield Base.

We're working on an elegant automatic solution to that issue.

Chris


Chris,

I just erased and reflashed the main board again, and I am no longer getting the errors w/in Visual Studio! I had originally updated the Go firmware first and then updated the shield base. It seems that by reflashing the main board, the code-build-debug cycle now works again for me.

Still looking forward to the update, but thought I'd pass along that bit of news re: the order of applying updates as it may work for others too.

Bob



#36806 Netduino Go Firmware v4.2.0 (Update 1)

Posted by indimini on 08 October 2012 - 09:12 PM in Netduino Go

Steve, Chris,

Again, thanks for the quick responses. Posted Image


I did run the Shield Base updater. It sounds like that may have been what started these issues. Is there a way to revert those updates or should I just keep cycling power for the near term? My next steps in learning to use Netduino Go will depend on the shield base and the SPOT.Hardware.OneWire code, so I'm not sure if there are more benefits to keeping the update installed vs. rolling back.

Thanks,

Bob



#36781 Netduino Go Firmware v4.2.0 (Update 1)

Posted by indimini on 08 October 2012 - 04:58 PM in Netduino Go

Just to confirm, this only happens right after the second+ Visual Studio deployment?

And if you unplug and replug your Netduino Go, it works properly?

Or do you have to erase/reflash the core firmware to get it back to a happy state?

Chris

Chris,

In my case, I've been able to rebuild/debug by disconnecting and then reconnecting the Go to the USB power source



#36699 Netduino Go Firmware v4.2.0 (Update 1)

Posted by indimini on 07 October 2012 - 11:05 PM in Netduino Go

Hi Chris, First, thanks for the quick response. I did erase prior to reflashing just to make sure that wasn't the issue. What is strange is when I start Visual Studio, the first time I build/debug the project it works fine. If I make a minor code change, rebuild and debug, I get the error posted. If I physically unplug the Go from the USB power and re-connect, the code runs. It seems like whatever soft reboot is taking place is causing the problem. Here's the code - it's stupid simple - just playing with the three basic modules. As I mentioned, if I do the build/debug it works. Then I went in and simply commented out the 3 lines for myButton and got the incremental linker error I posted earlier. public class Program { static NetduinoGo.Button myButton; static NetduinoGo.Potentiometer myPOT; static NetduinoGo.RgbLed myLED; public static void Main() { myButton = new NetduinoGo.Button(GoSockets.Socket1); myButton.ButtonPressed += new NetduinoGo.Button.ButtonEventHandler(myButton_ButtonPressed); myButton.ButtonReleased += new NetduinoGo.Button.ButtonEventHandler(myButton_ButtonReleased); myPOT = new NetduinoGo.Potentiometer(GoSockets.Socket2); myLED = new NetduinoGo.RgbLed(GoSockets.Socket3); myLED.SetColor(255, 255, 255); while (true) { myLED.SetBrightness(myPOT.GetValue()); Thread.Sleep(100); } } static void myButton_ButtonReleased(object sender, bool isPressed) { Debug.Print("Button pressed."); } static void myButton_ButtonPressed(object sender, bool isPressed) { Debug.Print("Button released."); } }



#36682 Netduino Go Firmware v4.2.0 (Update 1)

Posted by indimini on 07 October 2012 - 01:19 PM in Netduino Go

As a follow-up to my previous post, I now have a strange occurrence when trying to build/debug some simple test software. I started a new project and simply set up the code to set the RgbLed color and update the brightness via the POT. I compiled/debugged and all worked fine. Then, I made a simple code change - adding the button module and handlers for the press and release events. Compile was fine, but when I tried to debug, I got the following output messages. The GoBus dll included in the project reference is 1.0.0.0 Create TS. Loading start at 8056cd0, end 806dbf8 Assembly: mscorlib (4.2.0.0) Assembly: Microsoft.SPOT.Native (4.2.0.0) Assembly: Microsoft.SPOT.Hardware (4.2.0.0) Assembly: Microsoft.SPOT.Hardware.SerialPort (4.2.0.0) Assembly: Microsoft.SPOT.IO (4.2.0.0) Assembly: System.IO (4.2.0.0) Assembly: Microsoft.SPOT.Hardware.PWM (4.2.0.1) Assembly: Microsoft.SPOT.Hardware.Usb (4.2.0.0) Assembly: SecretLabs.NETMF.Diagnostics (4.2.0.0) Assembly: SecretLabs.NETMF.IO (4.2.0.0) Loading Deployment Assemblies. Attaching deployed file. Assembly: NetduinoGo.Button (1.0.1.0) Attaching deployed file. Assembly: NetduinoGo.Potentiometer (1.0.1.0) Resolving. Link failure: some assembly references cannot be resolved!! Assembly: NetduinoGo.Button (1.0.1.0) needs assembly 'GoBus' (1.0.0.0) Assembly: NetduinoGo.Potentiometer (1.0.1.0) needs assembly 'GoBus' (1.0.0.0) Error: a3000000 Waiting for debug commands... The program '[6] Micro Framework application: Managed' has exited with code 0 (0x0).



#36681 Netduino Go Firmware v4.2.0 (Update 1)

Posted by indimini on 07 October 2012 - 01:01 PM in Netduino Go

Hi guys, I've just bought into the Netduino Go platform, and I am having a potential noob moment. I followed the checklist/procedures for flashing the 4.2.0.1 firmware and shieldbase updates. Everything worked without a hitch - except after completing all of the steps, MFDeploy is still showing SolutionReleaseInfo.solutionVendorInfo: Netduino Go (V4.2.0.0 by Secret Labs LLC). The dfu file is named NeduinoGoFirmware_4.2.0.1.dfu with a creation date of 9/24/12. Any help would be appreciated.




home    hardware    projects    downloads    community    where to buy    contact Copyright © 2016 Wilderness Labs Inc.  |  Legal   |   CC BY-SA
This webpage is licensed under a Creative Commons Attribution-ShareAlike License.