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.

Coding Smackdown's Content

There have been 72 items by Coding Smackdown (Search limited from 29-March 23)


By content type

See this member's


Sort by                Order  

#38801 Introducing Netduino Plus 2

Posted by Coding Smackdown on 08 November 2012 - 11:10 PM in Netduino Plus 2 (and Netduino Plus 1)

Great News! Just ordered 2 from Amazon! Now my Brew System won't be so overtaxed with the PID and Web server running together. Can't wait to get them and put in my controller box.



#37982 'AnalogInput' is an ambiguous reference after 4.2 RC1

Posted by Coding Smackdown on 26 October 2012 - 01:16 PM in Beta Firmware and Drivers

You need to add a reference to SecretLabs.NETMF.Hardware.AnalogInput and that should get you what you need. Hope this helps.



#37924 Multiple Threads v. While Loop

Posted by Coding Smackdown on 24 October 2012 - 02:23 PM in Netduino Plus 2 (and Netduino Plus 1)

My Netduino based Brew Controller uses both interrupts and threads and would probably be a good example for you to see one way of doing things. I use interrupts to handle the main panel buttons and I use threads to handle the various services; temperature monitoring, mash profile, web Server, Internet Time Service and NETBIOS Services. You can find the complete code over at https://github.com/l...yBrewController Hope it helps.



#37744 Internet Printing (IPP) from Netduino

Posted by Coding Smackdown on 22 October 2012 - 02:31 AM in General Discussion

About a year back I wrote some basic code to print on network receipt printers. The biggest issue I had was all of the example code was too big for the Netduino. I end up sending basic text and ASCII commands to the printer, but never got what I was looking for. Now With .Net 4.2 you might have enough memory to do it. Its double almost since last time i tried. Good luck!



#37389 OnInterrupt firing multiple times

Posted by Coding Smackdown on 18 October 2012 - 01:55 PM in Netduino 2 (and Netduino 1)

You are correct about the bounce being a voltage fluctuation. The other part is how the Netduino determines an edge change from low to high. As I understand it, The Netduino will look at voltages below 1.6V as a logic low and those above as a logic high. So if your trace isn't showing a pronounced bounce it could be that the signal is varying just enough to be seen as fluctuating from low to high causing the Netduino to trigger the interrupt multiple times. Hope that helps



#37387 OnInterrupt firing multiple times

Posted by Coding Smackdown on 18 October 2012 - 01:30 PM in Netduino 2 (and Netduino 1)

You are running into switch bounce which is a common problem. You can get rid of it by using The time passed into the function to check when the last time the button was pressed and ensure you reject any interrupts within a predefined period of time. Below is an example I'm using for my Brew Controller, I will only act on the interrupt if it has been more than 200 milliseconds since the last time I acted upon it.

public static void EngageHeaterButton_OnInterrupt(uint data1, uint data2, DateTime time) 
{
  if (engageHeaterButtonLastPushed.AddMilliseconds(200) > time)
    return;
  // button press state received in data2
  // 0 = open, 1 = pressed
  if (data2 == 1)
  {
    PinManagement.heaterEngaged = true;
  }
  _displayHelper.DisplayText("Heater|Engaged");
  engageHeaterButtonLastPushed = time;
}

Hope this helps you out.



#37333 2D navigation using Triliteration

Posted by Coding Smackdown on 17 October 2012 - 06:23 PM in General Discussion

If you are planning to just keep the robot within your back yard I would think you could get away with just using a beacon style system. Ben Heck did this in one of his episodes out on element14.com where he used a couple of XBees and Ultrasonic Devices to create a Call and Ping configuration to allow his automated luggage to follow the user. The XBee on the luggage would send out a request and the target would then reply with a ultrasonic ping which would then let the Arduino calculate the distance and direction of the target. I'm pretty sure you could set up some type of similar system that would allow the robot to navigate your backyard. Since the Xbee has a short range you would probably need multiple stations to cover a good sized back yard. I'm interested to see what you come up with. Good Luck!



#37248 Application freezing on Socket creation

Posted by Coding Smackdown on 15 October 2012 - 08:42 PM in Netduino Plus 2 (and Netduino Plus 1)

Nicky, Good Catch! I had to do something similar with my web server. All TCP/IP communications would hang until the Netduino would get an IP Address when the Netduino was configured for DHCP. Another thing to watch out for, is your app will hang if the Netduino is configured for DHCP and you are not connected to a network. I ran into that a couple of times as well.



#36761 Adafruit 20x2 Character VFD (Vacuum Fluorescent Display) - SPI interface - 20...

Posted by Coding Smackdown on 08 October 2012 - 07:50 AM in General Discussion

Kem, I like how you've made the SPI write calls a more compact. I was thinking that maybe I needed to add some time between the writes in order to get the device to understand the commands. The only thing I can think of is that the first time through we are writing to the CG Buffer and the second time we are writing to the Data Buffer which gets displayed. I'm still a bit lost on why we have to write it out two times. Nothing in the documentation give a clue. I've got a second one on the way and this time I'll put a data analyzer on it to see what is going on. Cheers



#36594 Converting existing programs from 4.1 to 4.2

Posted by Coding Smackdown on 05 October 2012 - 08:53 PM in Visual Studio

Have you made sure that the assemblies your program is referencing have been built for .Net 4.2? I know that if you use some of the libraries directly from the web sites, they have not been compiled for .Net 4.2 and you will see that error when you try to deploy them to your Netduino. I tend to add the source code to my solution and then I know that all of the libraries have been compiled for whatever version of .Net my device is running. Good Luck.



#36058 Play WAV File

Posted by Coding Smackdown on 27 September 2012 - 01:01 PM in General Discussion

Check out this thread. It should give you a good idea of how to play a WAV File. http://forums.netdui...-finally-works/ Cheers!



#35984 Websockets on Netduino Plus

Posted by Coding Smackdown on 25 September 2012 - 07:10 PM in General Discussion

Welcome to the forums! I've done something similar that might be a good starting point for you. I'm using a Netduino Plus to control an electric brewing system via a web interface. You can find the source code out on GitHub - https://github.com/l...yTempController you want to look specifically at the CodingSmackdown.ControllerInterface project which requires Visual Studio Web Express and I think ASP.MVC 3 Library to open. The other project you want to look at is the CodingSmackdown.TemperatureController project which hosts a web server based on the NeonMika.NETMF.Webserver library along witha couple of custom modules to respond to commands and return data. If you build the web interface using responsive design, you should be able to create something that will work not only an Android, but any type of device with a browser that supports JavaScript. Hope this gets you moving forward!



#35786 Mini Upgrade Woes

Posted by Coding Smackdown on 22 September 2012 - 05:31 AM in Netduino Mini

Just finished flashing my two Netduino Minis to the 4.2.0.1 RS-232 Firmware and it went off without a hitch. Thanks guys for getting this fix out so quickly.



#35718 Netduino Plus Built in Sketch

Posted by Coding Smackdown on 21 September 2012 - 04:51 PM in General Discussion

There is nothing to worry about. The devices only come with the latest firmware at the time of manufacture which does not include a diagnostic program. I usually end up flashing with the latest firmware as soon as I get a new device just to make sure it is on the same revision of firmware that I'm currently using. Cheers!



#35717 Modbus-TCP library

Posted by Coding Smackdown on 21 September 2012 - 04:46 PM in Project Showcase

Congratulations! It nice to see something being done here making it into an industry library listing.



#35525 How to install (or upgrade to) .NET Micro Framework v4.2 SDK

Posted by Coding Smackdown on 19 September 2012 - 05:42 AM in General Discussion

Thanks that worked out just fine.



#35514 How to install (or upgrade to) .NET Micro Framework v4.2 SDK

Posted by Coding Smackdown on 19 September 2012 - 01:11 AM in General Discussion

Chris, I'm trying to use the new AnalogInput classes, but how do I define an AnalogChannel that corresponds with Cpu.Pins.GPIO_PIN_A0? I'm not seeing a link between the two. Thanks



#35512 Adafruit 20x2 Character VFD (Vacuum Fluorescent Display) - SPI interface - 20...

Posted by Coding Smackdown on 19 September 2012 - 12:44 AM in General Discussion

I picked up an Adafruit 20x2 Character VFD (Vacuum Fluorescent Display) - SPI interface - 20T202DA2JA

http://www.adafruit.com/products/347

I was hoping to use it an one of my controller projects. I based my driver off of the MicroLiquidCrystal Shifter74Hc595LcdTransferProvider and the LCD class. I made changes based on the datasheets, but I'm having to send data and commands twice in order to get the controller to recognize what I'm sending.

I'm thinking maybe my SPI configuration is setup incorrectly, but I haven't been able to find too much about how to configure the SPI port.

I've included the code below, in case anyone can figure it out.

Thanks!

using System;
using System;
using System.Threading;
using Microsoft.SPOT;
using Microsoft.SPOT.Hardware;
using SecretLabs.NETMF.Hardware;
using SecretLabs.NETMF.Hardware.NetduinoPlus;

//
// SPI Vacum Flouresent Display Driver
// Based on the SPI_VFD Arduino Library
// Created by AdaFruit
//
namespace CodingSmackdown.Drivers
{
// When the display powers up, it is configured as follows:
//
// 1. Display clear
// 2. Function set:
// N = 1; 2-line display
// BR1=BR0=0; (100% brightness)
// 3. Display on/off control:
// D = 0; Display off
// C = 0; Cursor off
// B = 0; Blinking off
// 4. Entry mode set:
// I/D = 1; Increment by 1
// S = 0; No shift
//
// Note, however, that resetting the Arduino doesn't reset the LCD, so we
// can't assume that its in that state when a sketch starts (and the
// SPI_VFD constructor is called).
public class SPI_VFDisplay : IDisposable
{
// commands
private const byte VFD_CLEARDISPLAY = 0x01;
private const byte VFD_RETURNHOME = 0x00;
private const byte VFD_ENTRYMODESET = 0x04;
private const byte VFD_DISPLAYCONTROL = 0x08;
private const byte VFD_CURSORSHIFT = 0x10;
private const byte VFD_FUNCTIONSET = 0x30;
private const byte VFD_SETCGRAMADDR = 0x40;
private const byte VFD_SETDDRAMADDR = 0x80;

// flags for display entry mode
private const byte VFD_ENTRYRIGHT = 0x00;
private const byte VFD_ENTRYLEFT = 0x02;
private const byte VFD_ENTRYSHIFTINCREMENT = 0x01;
private const byte VFD_ENTRYSHIFTDECREMENT = 0x00;

// flags for display on/off control
private const byte VFD_DISPLAYON = 0x04;
private const byte VFD_DISPLAYOFF = 0x00;
private const byte VFD_CURSORON = 0x02;
private const byte VFD_CURSOROFF = 0x00;
private const byte VFD_BLINKON = 0x01;
private const byte VFD_BLINKOFF = 0x00;

// flags for display/cursor shift
private const byte VFD_DISPLAYMOVE = 0x08;
private const byte VFD_CURSORMOVE = 0x00;
private const byte VFD_MOVERIGHT = 0x04;
private const byte VFD_MOVELEFT = 0x00;

// flags for function set
private const byte VFD_2LINE = 0x08;
private const byte VFD_1LINE = 0x00;

private const byte VFD_SPICOMMAND = 0xF8;
private const byte VFD_SPIDATA = 0xFA;

private byte _linemode;
private byte _brightness;
private byte _displaycontrol;
private byte _shiftmode;
private byte _incrementmode;
private byte _displaymode;
private byte _cursormode;
private byte _blinkmode;

private byte _initialized;

private byte _numlines;
private byte _currline;

private readonly SPI _spi;
private readonly OutputPort _latchPort;
readonly byte[] _writeBuf = new byte[1];

public enum Brightness
{
VFD_BRIGHTNESS25 = 0x03,
VFD_BRIGHTNESS50 = 0x02,
VFD_BRIGHTNESS75 = 0x01,
VFD_BRIGHTNESS100 = 0x00
}

public SPI_VFDisplay(SPI.SPI_module spiBus, Cpu.Pin latchPin, Brightness brightness)
{
var spiConfig = new SPI.Configuration(
Cpu.Pin.GPIO_NONE, //latchPin,
false, // active state
0, // setup time
0, // hold time
false, // clock idle state
true, // clock edge
1000, // clock rate
spiBus);

_spi = new SPI(spiConfig);

_latchPort = new OutputPort(latchPin, true);

//default to 2x20 display (SAMSUNG 20T202DA2JA)
begin(20, 2, brightness);
}

public void begin(byte columns, byte lines, Brightness brightness)
{
// set number of lines
if (lines > 1)
_linemode = VFD_2LINE;
else
_linemode = VFD_1LINE;
// save off for address translation
_numlines = lines;

// turn the display on with no cursor or blinking default
_displaycontrol = VFD_DISPLAYON;
_cursormode = VFD_CURSORON;
_blinkmode = VFD_BLINKOFF;
_shiftmode = VFD_ENTRYLEFT;
_incrementmode = VFD_ENTRYSHIFTDECREMENT;
// init the display
display();

//catch bad values
if (brightness > Brightness.VFD_BRIGHTNESS25)
_brightness = (byte)Brightness.VFD_BRIGHTNESS100;
else
_brightness = (byte)brightness;
// set the brightness and push the linecount with VFD_SETFUNCTION
setBrightness(brightness);

// set cursor shift for romance lnaguages
leftToRight();

// clear the display
clear();
// set starting address to column 0, row 0
home();
}

public void setBrightness(Brightness brightness)
{
// set the brightness (only if a valid value is passed
if (brightness <= Brightness.VFD_BRIGHTNESS25)
{
_brightness = (byte)brightness;

command((byte)(VFD_FUNCTIONSET | _brightness | _linemode));
}
}

public byte getBrightness()
{
// get the brightness
return (byte)(_brightness);
}

public void clear()
{
command(VFD_CLEARDISPLAY); // clear display, set cursor position to zero
}

public void home()
{
command(VFD_SETDDRAMADDR | 0x00); // set cursor position to zero
}

public void setCursor(byte col, byte row)
{
int[] row_offsets = { 0x00, 0x40, 0x14, 0x54 };

if (row > _numlines)
{
row = (byte)(_numlines - 1); // we count rows starting w/0
}
// we only have 20 columns even though there are 40 cols addressable
if (col > 20)
{
col = 20;
}

int address = col + row_offsets[row];

command((byte)(VFD_SETDDRAMADDR | address));
}

// Turn the display on/off (quickly)
public void noDisplay()
{
_displaycontrol = VFD_DISPLAYOFF;
command((byte)(VFD_DISPLAYCONTROL | _displaycontrol | _cursormode | _blinkmode));
}

public void display()
{
_displaycontrol = VFD_DISPLAYON;
command((byte)(VFD_DISPLAYCONTROL | _displaycontrol | _cursormode | _blinkmode));
}

// Turns the underline cursor on/off
public void noCursor()
{
_cursormode = VFD_CURSOROFF;
command((byte)(VFD_DISPLAYCONTROL | _displaycontrol | _cursormode | _blinkmode));
}

public void cursor()
{
_cursormode = VFD_CURSORON;
command((byte)(VFD_DISPLAYCONTROL | _displaycontrol | _cursormode | _blinkmode));
}

// Turn on and off the blinking cursor
public void noBlink()
{
_blinkmode = VFD_BLINKOFF;
command((byte)(VFD_DISPLAYCONTROL | _displaycontrol | _cursormode | _blinkmode));
}

public void blink()
{
_blinkmode = VFD_BLINKON;
command((byte)(VFD_DISPLAYCONTROL | _displaycontrol | _cursormode | _blinkmode));
}

// These commands scroll the display without changing the RAM
public void scrollDisplayLeft()
{
command((byte)(VFD_CURSORSHIFT | VFD_DISPLAYMOVE | VFD_MOVELEFT));
}

public void scrollDisplayRight()
{
command((byte)(VFD_CURSORSHIFT | VFD_DISPLAYMOVE | VFD_MOVERIGHT));
}

// This is for text that flows Left to Right
public void leftToRight()
{
_shiftmode = VFD_ENTRYLEFT;
command((byte)(VFD_ENTRYMODESET | _shiftmode | _incrementmode));
}

// This is for text that flows Right to Left
public void rightToLeft()
{
_shiftmode = VFD_ENTRYRIGHT;
command((byte)(VFD_ENTRYMODESET | _shiftmode | _incrementmode));
}

// This will 'right justify' text from the cursor
public void autoscroll()
{
_incrementmode = VFD_ENTRYSHIFTINCREMENT;
command((byte)(VFD_ENTRYMODESET | _shiftmode | _incrementmode));
}

// This will 'left justify' text from the cursor
public void noAutoscroll()
{
_incrementmode = VFD_ENTRYSHIFTDECREMENT;
command((byte)(VFD_ENTRYMODESET | _shiftmode | _incrementmode));
}

// Allows us to fill the first 8 CGRAM locations
// with custom characters
public void createChar(byte location, byte[] charmap)
{
location &= 0x7; // we only have 8 locations 0-7
command((byte)(VFD_SETCGRAMADDR | (location << 3)));
for (int i = 0; i < 8; i++)
{
write(charmap[i]);
}
}

// spool string data to the display
public void print(string data)
{
byte[] output = System.Text.Encoding.UTF8.GetBytes(data);
for (int i = 0; i < output.Length; i++)
{
write(output[i]);
}
}

/*********** mid level commands, for sending data/cmds, init */

private void command(byte value)
{
_latchPort.Write(false);

_writeBuf[0] = VFD_SPICOMMAND;
_spi.Write(_writeBuf);
_writeBuf[0] = value;
_spi.Write(_writeBuf);

_latchPort.Write(true);

Thread.Sleep(1);

_latchPort.Write(false);

_writeBuf[0] = VFD_SPICOMMAND;
_spi.Write(_writeBuf);
_writeBuf[0] = value;
_spi.Write(_writeBuf);

_latchPort.Write(true);

Thread.Sleep(1);
}

private void write(byte value)
{
_latchPort.Write(false);

_writeBuf[0] = VFD_SPIDATA;
_spi.Write(_writeBuf);
_writeBuf[0] = value;
_spi.Write(_writeBuf);

_latchPort.Write(true);

Thread.Sleep(1);

_latchPort.Write(false);

_writeBuf[0] = VFD_SPIDATA;
_spi.Write(_writeBuf);
_writeBuf[0] = value;
_spi.Write(_writeBuf);

_latchPort.Write(true);

Thread.Sleep(1);
}

public void Dispose()
{
_spi.Dispose();
_latchPort.Dispose();
}
}
}



#35503 Netduino Mini Firmware v4.2.0

Posted by Coding Smackdown on 18 September 2012 - 10:28 PM in Netduino Mini

Hi. I successfully updated my netduino, but I've tried twice now to update my mini following the directions, and everything seems to go fine, but at the end I have an unresponsive board. I'm using the 232 firmware and at the end of the process I can't ping it using mfdeploy ("No response from device"). I tried switching to TTL interface and giving it an escape command in a terminal and I also don't get a response. Is there something wrong with the 232 firmware image, or any suggestions on how I might troubleshoot a problem on my end?

Thanks,
MR


Yep, there is an issue with the 232 firmware. The ETA for an update should be coming up within the next day or two. For now, you'll have to use the TTL firmware.

Good Luck!



#35125 Beerbrew Controller

Posted by Coding Smackdown on 13 September 2012 - 02:10 PM in General Discussion

BTW: I have a project out on GitHub that covers my Brew Controller for a modified Electric Turkey Fryer, that runs on a Netduino Plus that has both a physical user itnerface, (LCD and Buttons), as well as a web based UI. It is based on my DIY Brewery TempLogger Project out at http://diybrewery.com You can find the code on GitHub at https://github.com/l...yTempController Hope it helps you get started!



#35119 Beerbrew Controller

Posted by Coding Smackdown on 13 September 2012 - 01:30 PM in General Discussion

The Netduino will handle what you are looking for as far as inputs and outputs. The biggest issue I've ran across is memory. To do a lot of what you want to do, requires a lot of code and even under .Net 4.2 you are limited to around 64Kb of code on the Netduino Plus which makes things cramped. You'll need to probably start off with some of the libraries out in the community and cut them down to just what you'll need and jettison all of the extra stuff that you don't to get everything on the Netduino Plus. I'll be interested in how things go. I always love seeing someone using off the shelf items to build out their brewery. Good Luck



#35079 Homebrew fermentation temperature controller

Posted by Coding Smackdown on 12 September 2012 - 09:47 PM in General Discussion

I bought several of the relays for SparkFun to do just what your talking about and they work fine for things like the fridge, freezer and pump motors. I wouldn't try to drive a Water Heating element with them though. I was searching for a good thermocouple/thermistor for one of my mod projects and found that Brewer's Hardware have several different types you could purchase that work OK. I just stay away from the temp probes for the Brewtroller since they use One-Wire support and right now the Netduino does not support One-Wire communications without dropping back to version 4.1. I found out that they have both Positive and Negative temperature coefficient temp probes so you might want to call them to make sure you get one that is a negative coefficient probe and then you can use any of thermistor code out on the arduino forums to read the probes. I've also posted a lot about my Netduino Brewing Projects out on my site http://diybrewery.com and am in the process of putting together a book on my projects. Good Luck! I'm looking forward to what you come up with.



#35076 Documentation

Posted by Coding Smackdown on 12 September 2012 - 09:33 PM in General Discussion

If you are just starting out check out "Getting Started with Netduino" by Chris Walker http://www.amazon.co...ywords=Netduino and "Getting Started with the Internet of Things: Connecting Sensors and Microcontrollers to the Cloud" by Cuno Pfister http://www.amazon.co...micro framework If you want a little more detail about the .Net Micro Framework check out "Expert .NET Micro Framework" by Jens Kühner http://www.amazon.co...micro framework Another good example about .Net Micro Framework devices that includes code examples for the Netduino is "Professional's Guide To .NET Micro Framework Application Development" by Sean D. Liming and John R. Malin http://www.amazon.co...micro framework Otherwise, the best examples you are going to find are right here in the forums. I don't think there is nothing that hasn't been covered or discussed in one way or another. Good Luck!



#34085 Mini Upgrade Woes

Posted by Coding Smackdown on 23 August 2012 - 05:35 AM in Netduino Mini

Any time frame on fixing the RS232 version of the firmware?



#31097 Need Help with LCD Display Board

Posted by Coding Smackdown on 22 June 2012 - 06:07 PM in General Discussion

I recently have been putting together a replacement controller for an Electric Turkey Fryer. I had everything working just perfectly with all of the circuits on a breadboard and had even brewed 5 batch of beer with the entire setup. I had created two circuit boards to put in an enclosure with the Netduino, one was a shield that held all of the power conversion, relay driver and button connections, the other was a daughter board that attaches to a 16 x 2 LCD Display using the same circuit in Simon's post over at http://geekswithblog...id_crystal.aspx I sent the board out to BatchPCB.com to be made and finally got them back. I spent a couple days assembling the boards and when I went to test everything my LCD Display is not working. At first I thought maybe my connector from the shield to the daughter board was messed up, but I checked it and I have connectivity to everything as expected along with +5V and Ground. What I am not seeing is +5V at the LCD Display, I'm only seeing +1.8V. At first I thought there was a short some place, but I cannot find anything wrong. I went back to re-wiring the daughter board on the breadboard and now I'm getting the same results coming off the shield. It looks as if the signals to drive the 595 chip are not coming across. The connector I'm using is about 6 inches in length, which was about the same length as the jumpers I used when originally wired up the circuit. What I'm seeing now is a bunch of garbage on the display and a lot of strange flashing and the back light going on and off as the Netduino sends data to the display. I've attached pictures of the schematics and pc boards for you to take a look at in hopes someone can spot my issue. The boards are double sided with the red traces on the top and the blue traces on the bottom. Hopefully someone can point me in the right direction. Thanks

Attached Thumbnails

  • Main_Board_Schematic.png
  • Main_Shield_Board.png
  • LCD_Display_Schematic.png
  • LCD_Display Board.png




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.