mbrossett's Content - Netduino Forums - Page 2
   
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.

mbrossett's Content

There have been 46 items by mbrossett (Search limited from 17-June 23)


By content type

See this member's


Sort by                Order  

#57124 Help on I2C

Posted by mbrossett on 25 March 2014 - 11:56 PM in Netduino 2 (and Netduino 1)

As promised here is your driver and test code for the Newhaven Display I2C serial displays. Enjoy and keep us posted on the progress.

using System;
using System.Text;
using Microsoft.SPOT;
using Microsoft.SPOT.Hardware;

namespace NewhavenDisplay
{
    // For use with newhaven I2C displays
    // I2C protocol:
    // To enter the I2C mode, place a jumper on R1.  
    // SDA and SDK have pull?up resistors (10K Ohm) on R7 and R8.
    // The default I2C address is 80 (50 hex).  The I2C address can be changed to any 8?bit value by command function, with
    // the exception that the LSB (least significant bit) must always be ‘0’.  Once the I2C address has been changed, it will be
    // saved in the system memory, and it will revert back to the default address if either RS232 or SPI protocol is selected.
    // The I2C interface is capable of receiving data at up to 100KHz?clock rate.
    // See http://www.newhavendisplay.com/specs/NHD-0216K3Z-FL-GBW.pdf

    public class SerialLCD
    {
        private static I2CDevice.Configuration _config = new I2CDevice.Configuration(0x50 >> 1, 100); 

        public SerialLCD()
        {
        }

        public void Write(I2CDevice device, string sText)
        {
            device.Config = _config;
            var xActions = new I2CDevice.I2CTransaction[1];
            byte[] buf = Encoding.UTF8.GetBytes(sText);                 // Convert the string to array
            xActions[0] = I2CDevice.CreateWriteTransaction(buf);
            device.Execute(xActions, 1000);
        }

        public void DisplayOn(I2CDevice device)
        {
            device.Config = _config;
            var xActions = new I2CDevice.I2CTransaction[1];
            xActions[0] = I2CDevice.CreateWriteTransaction(new byte[] { 0xFE, 0x41 });
            device.Execute(xActions, 1000);
        }

        public void DisplayOff(I2CDevice device)
        {
            device.Config = _config;
            var xActions = new I2CDevice.I2CTransaction[1];
            xActions[0] = I2CDevice.CreateWriteTransaction(new byte[] { 0xFE, 0x42 });
            device.Execute(xActions, 1000);
        }

        public void SetCursor(I2CDevice device, byte Position)
        {   // 0x00 = line 1 column 1
            // 0x40 = line 2 column 1
            device.Config = _config;
            var xActions = new I2CDevice.I2CTransaction[1];
            xActions[0] = I2CDevice.CreateWriteTransaction(new byte[] { 0xFE, 0x45, Position });
            device.Execute(xActions, 1000);
        }

        public void Clear(I2CDevice device)
        {
            device.Config = _config;
            var xActions = new I2CDevice.I2CTransaction[1];
            xActions[0] = I2CDevice.CreateWriteTransaction(new byte[] { 0xFE, 0x51 });
            device.Execute(xActions, 1000);
        }

        public void SetContrast(I2CDevice device, byte ContrastLevel)
        {   // Value between 0 and 50, default is 40
            device.Config = _config;
            var xActions = new I2CDevice.I2CTransaction[1];
            xActions[0] = I2CDevice.CreateWriteTransaction(new byte[] { 0xFE, 0x52, ContrastLevel });
            device.Execute(xActions, 1000);
        }

        public void SetBrightness(I2CDevice device, byte BrightnessLevel)
        {   // Value between 1 to 8 
            device.Config = _config;
            var xActions = new I2CDevice.I2CTransaction[1];
            xActions[0] = I2CDevice.CreateWriteTransaction(new byte[] { 0xFE, 0x53, BrightnessLevel });
            device.Execute(xActions, 1000);
        }

        public void Firmware(I2CDevice device)
        {
            device.Config = _config;
            var xActions = new I2CDevice.I2CTransaction[1];
            xActions[0] = I2CDevice.CreateWriteTransaction(new byte[] { 0xFE, 0x70 });
            device.Execute(xActions, 1000);
        }

    }
}
using System;
using System.Threading;

using Microsoft.SPOT;
using Microsoft.SPOT.Hardware;

using NewhavenDisplay;

namespace Serial_Display_Test
{
    public class Program
    {
        public static void Main()
        {
            // Create an I2C device with no device configuration
            I2CDevice i2cDevice = new I2CDevice(null);

            SerialLCD display = new SerialLCD();

            display.DisplayOn(i2cDevice);

            // Write to display
            display.Clear(i2cDevice);
            display.SetCursor(i2cDevice, 0x00);
            display.Write(i2cDevice, "Hello");

            // Wait indefinitely
            Thread.Sleep(Timeout.Infinite);
        }
    }
}



#57117 Help on I2C

Posted by mbrossett on 25 March 2014 - 08:32 PM in Netduino 2 (and Netduino 1)

Btw, there are pull-up resistors (10k) installed on the LCD so you shouldn't need them, but you may want to put a little stronger pull-ups on the bus (4.7k, 3.3k, or 2.2k) just in case.




#57408 Help on I2C

Posted by mbrossett on 07 April 2014 - 08:48 PM in Netduino 2 (and Netduino 1)

Here's a few things to check...

 

1) Is there a jumper / short across R1? (R2 should be left open)

2) Measure the voltages of SDA and SCL while the bus is idle...are they pulled up to 5V?

3) Try adding a delay at the beginning of your code to ensure LCD is up and configure ("Thread.Sleep(1000);")

4) Step through the code using the debugger and ensure the "device.Execute(...);" functions are returning a non-zero value. You will need to change the code slightly... "int ret = device.Execute(...);"

5) Try setting the brightness and contrast..."display.SetBrightness(0x07);" ... "display.SetContrast(0x30);"

 

The Netduino should be capable of providing the 250mA to the display, but you can verify this by measuring the voltage at the display when it is plugged in. If the voltage is above 4.7V it is fine.




#57410 Help on I2C

Posted by mbrossett on 07 April 2014 - 09:15 PM in Netduino 2 (and Netduino 1)

Since the "device.Execute(...)" is returning zero, that tells you the LCD is not acknowledging the I2C commands. Double check that the SCL and SDA lines aren't crossed. Also verify that the power to the LCD from the Netduino is greater than 4.7V. If it is not you will need to power the LCD from its own supply/regulator.




#57273 Help on I2C

Posted by mbrossett on 01 April 2014 - 05:34 PM in Netduino 2 (and Netduino 1)

Yes, pin 1 of each connector is marked with a square solder pad, as opposed to the round pad.




#57413 Help on I2C

Posted by mbrossett on 07 April 2014 - 09:24 PM in Netduino 2 (and Netduino 1)

For the [latest versions of] Netduino 2 and 2 Plus you should connect the I2C lines to "SC" and "SD" as you are doing. What is the voltage to the LCD?




#57415 Help on I2C

Posted by mbrossett on 07 April 2014 - 09:29 PM in Netduino 2 (and Netduino 1)

So to make sure I understand you correctly, when you measure the 5V output of the Netduino without the LCD connected, the voltage is 4.68V...and with the LCD connected it is 4.23V?

 

If this is true, you must supply the LCD with its own 5V power supply. Do you have an old USB cell phone charge? If so, cut the connector off and wire it up to the LCD for 5V supply.




#57417 Help on I2C

Posted by mbrossett on 07 April 2014 - 09:42 PM in Netduino 2 (and Netduino 1)

Yes...you will have the power supply V+/V- wired up to VDD and VSS of the LCD, and the Netduino will need have SCL, SDA, and GND wired to the LCD.




#57584 Help on I2C

Posted by mbrossett on 15 April 2014 - 12:15 PM in Netduino 2 (and Netduino 1)

Remove the RED wire connected to P1.1 of the display. You shouldn't have 5V tied to the RX pin. Actually since you aren't using the UART interface, you can leave P1 completely disconnected (VDD and VSS connections are already made on P2). After doing this remeasure the voltages and ensure you are getting the proper 5V to the display.




#57601 Help on I2C

Posted by mbrossett on 17 April 2014 - 01:00 AM in Netduino 2 (and Netduino 1)

Yes. You can disconnect all wires from the 3 pin connector on the left.




#57546 Help on I2C

Posted by mbrossett on 14 April 2014 - 02:13 AM in Netduino 2 (and Netduino 1)

Also if you could send some good pics of your setup that would help, too. And are you using a good DMM to make your measurements (I.e. Are you confident with its readings)?



#57545 Help on I2C

Posted by mbrossett on 14 April 2014 - 02:07 AM in Netduino 2 (and Netduino 1)

Frank,I measured the 5V railed and 5V header on my Netduino Plus 2 this evening running from a 9V, 1A power supply. The outputs were both right at 5V (with no load on the 5V header). I am putting something together for you to help your test and troubleshoot your hardware. I will send it to you tomorrow when I finish it up.

when i only connect the powersupply and nothing else the voltage on the 5V DC is 4.81 VDC ?
on both my Netduino's ? So what could be wrong then ?


When you say nothing else connected, does that mean the LCD is disconnected?



#57418 Help on I2C

Posted by mbrossett on 07 April 2014 - 09:51 PM in Netduino 2 (and Netduino 1)

I guess it just occurred to me that you are probably powering your Netduino from USB. That being said, if you have a power supply around (+7.5 to +9V DC, >500mA output) you could power your Netduino from that and may not need to wire up the LCD separate. If you have a power supply around that would be a quick test.




#57640 Help on I2C

Posted by mbrossett on 18 April 2014 - 08:57 PM in Netduino 2 (and Netduino 1)

No I don't think you need to buy a new one...yet. I have been on travel but should be able to send you something this weekend to help you troubleshoot.



#57038 Device driver implementation for PCA9539 I/O Expander...

Posted by mbrossett on 23 March 2014 - 10:16 PM in General Discussion

My goal was to create an easy to use device driver for the PCA9539 16-bit GPIO expander IC. However, I also wanted to make it generic so that could be used with other future gpio expander driver implementations.

 

I created a simple interface that each device driver class (i.e. PCA9539) shall implement. I also created a generic Gpio class used to interface with the device driver(s).

 

I chose to do it this way to to make it easy to use in the main routine. I am not a software engineer by trade, so any advice would be much appreciated. Any thoughts, comments, ideas to improve?

 

Attached Files




#57127 Analog Output

Posted by mbrossett on 26 March 2014 - 01:38 AM in Netduino Plus 2 (and Netduino Plus 1)

You could also interface with and SPI or I2C DAC device like this one (MCP4821)...

http://ww1.microchip...eDoc/22244B.pdf

Or better yet (if you are looking for cheap and easy)...

http://www.adafruit....CFSISMwodvSgAZQ



#57128 Analog Output

Posted by mbrossett on 26 March 2014 - 01:42 AM in Netduino Plus 2 (and Netduino Plus 1)

Btw, the MCP48xx family have internal voltage references and the MCP4725 references it's supply voltage. Each has its advantages and disadvantages just depends on what you need the DAC for.



#57398 Adding to Cpu.Pin enumeration

Posted by mbrossett on 07 April 2014 - 01:25 PM in Netduino 2 (and Netduino 1)

Thank you very much CW2! Also, I have attached a simple class that defines the STM32F405RG pins.

using System;
using Microsoft.SPOT;
using Microsoft.SPOT.Hardware;

namespace STM32F4
{
    public static class Pin
    {
        public static Cpu.Pin PA0 { get { return (Cpu.Pin)(0); } }
        public static Cpu.Pin PA1 { get { return (Cpu.Pin)(1); } }
        public static Cpu.Pin PA2 { get { return (Cpu.Pin)(2); } }
        public static Cpu.Pin PA3 { get { return (Cpu.Pin)(3); } }
        public static Cpu.Pin PA4 { get { return (Cpu.Pin)(4); } }
        public static Cpu.Pin PA5 { get { return (Cpu.Pin)(5); } }
        public static Cpu.Pin PA6 { get { return (Cpu.Pin)(6); } }
        public static Cpu.Pin PA7 { get { return (Cpu.Pin)(7); } }
        public static Cpu.Pin PA8 { get { return (Cpu.Pin)(8); } }
        public static Cpu.Pin PA9 { get { return (Cpu.Pin)(9); } }
        public static Cpu.Pin PA10 { get { return (Cpu.Pin)(10); } }
        public static Cpu.Pin PA11 { get { return (Cpu.Pin)(11); } }
        public static Cpu.Pin PA12 { get { return (Cpu.Pin)(12); } }
        public static Cpu.Pin PA13 { get { return (Cpu.Pin)(13); } }
        public static Cpu.Pin PA14 { get { return (Cpu.Pin)(14); } }
        public static Cpu.Pin PA15 { get { return (Cpu.Pin)(15); } }
        public static Cpu.Pin PB0 { get { return (Cpu.Pin)(16 + 0); } }
        public static Cpu.Pin PB1 { get { return (Cpu.Pin)(16 + 1); } }
        public static Cpu.Pin PB2 { get { return (Cpu.Pin)(16 + 2); } }
        public static Cpu.Pin PB3 { get { return (Cpu.Pin)(16 + 3); } }
        public static Cpu.Pin PB4 { get { return (Cpu.Pin)(16 + 4); } }
        public static Cpu.Pin PB5 { get { return (Cpu.Pin)(16 + 5); } }
        public static Cpu.Pin PB6 { get { return (Cpu.Pin)(16 + 6); } }
        public static Cpu.Pin PB7 { get { return (Cpu.Pin)(16 + 7); } }
        public static Cpu.Pin PB8 { get { return (Cpu.Pin)(16 + 8); } }
        public static Cpu.Pin PB9 { get { return (Cpu.Pin)(16 + 9); } }
        public static Cpu.Pin PB10 { get { return (Cpu.Pin)(16 + 10); } }
        public static Cpu.Pin PB11 { get { return (Cpu.Pin)(16 + 11); } }
        public static Cpu.Pin PB12 { get { return (Cpu.Pin)(16 + 12); } }
        public static Cpu.Pin PB13 { get { return (Cpu.Pin)(16 + 13); } }
        public static Cpu.Pin PB14 { get { return (Cpu.Pin)(16 + 14); } }
        public static Cpu.Pin PB15 { get { return (Cpu.Pin)(16 + 15); } }
        public static Cpu.Pin PC0 { get { return (Cpu.Pin)(32 + 0); } }
        public static Cpu.Pin PC1 { get { return (Cpu.Pin)(32 + 1); } }
        public static Cpu.Pin PC2 { get { return (Cpu.Pin)(32 + 2); } }
        public static Cpu.Pin PC3 { get { return (Cpu.Pin)(32 + 3); } }
        public static Cpu.Pin PC4 { get { return (Cpu.Pin)(32 + 4); } }
        public static Cpu.Pin PC5 { get { return (Cpu.Pin)(32 + 5); } }
        public static Cpu.Pin PC6 { get { return (Cpu.Pin)(32 + 6); } }
        public static Cpu.Pin PC7 { get { return (Cpu.Pin)(32 + 7); } }
        public static Cpu.Pin PC8 { get { return (Cpu.Pin)(32 + 8); } }
        public static Cpu.Pin PC9 { get { return (Cpu.Pin)(32 + 9); } }
        public static Cpu.Pin PC10 { get { return (Cpu.Pin)(32 + 10); } }
        public static Cpu.Pin PC11 { get { return (Cpu.Pin)(32 + 11); } }
        public static Cpu.Pin PC12 { get { return (Cpu.Pin)(32 + 12); } }
        public static Cpu.Pin PC13 { get { return (Cpu.Pin)(32 + 13); } }
        public static Cpu.Pin PC14 { get { return (Cpu.Pin)(32 + 14); } }
        public static Cpu.Pin PC15 { get { return (Cpu.Pin)(32 + 15); } }
        public static Cpu.Pin PD2 { get { return (Cpu.Pin)(48 + 2); } }
    }
}



#57383 Adding to Cpu.Pin enumeration

Posted by mbrossett on 06 April 2014 - 09:53 PM in Netduino 2 (and Netduino 1)

Let me try to clear up any confusion...

 

There are pins on the STM32F405RG that are unused in the Netduino design (i.e. PA4, PA5, PC8, PC9,...). I wish to wire up to these pins, however, they are not defined in the Netduino.Pins enumeration and therefore I have no way to control those pins. Does anyone know how I can modify the software/firmware to get access to those STM32F4 pins?




#57380 Adding to Cpu.Pin enumeration

Posted by mbrossett on 06 April 2014 - 09:26 PM in Netduino 2 (and Netduino 1)

Rather, I would like to add to the Netduino.Pins enumeration.




#57379 Adding to Cpu.Pin enumeration

Posted by mbrossett on 06 April 2014 - 09:22 PM in Netduino 2 (and Netduino 1)

Can someone tell me how to add STM32F4 pins (i.e. PA4, PA5, PC8, PC9, ...) to the Cpu.Pin enumeration and use these I/O? Obviously it would require physical access to these pins, for example a custom Netduino board.

 

I am guessing it would require a modification to the Netduino firmware and a rebuild. Has anyone done this?





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.