- Netduino Forums
- → Luke Cummings's Content
Luke Cummings's Content
There have been 38 items by Luke Cummings (Search limited from 27-April 23)
#21887 Convert byte[4] to float
Posted by Luke Cummings on 19 December 2011 - 11:11 PM in Netduino 2 (and Netduino 1)
#21886 Convert byte[4] to float
Posted by Luke Cummings on 19 December 2011 - 11:08 PM in Netduino 2 (and Netduino 1)
Hi Luke,
I converted your code to a DLL, imported it into Visual Basic and it works like a charm. All other unsafe code I tried trashed my Netduino. Thanks for providing this badly needed functionality.
Baxter
Glad I could help. There definitely are some 'gotchas' using this technique.
#21885 Convert byte[4] to float
Posted by Luke Cummings on 19 December 2011 - 10:56 PM in Netduino 2 (and Netduino 1)
Hi Luke,
I'm used to programming in C & C++
...
e.g. is is possible to prevent .Net making changes to the memory in the background during an unsafe function call?
Paul
Paul,
Pointers in C# using the unsafe construct are just as dangerous as in any other case. For example check out how I managed to brick my FEZ panda on this thread: http://www.tinyclr.com/forum/12/2700/. Using pointers gives you unfettered access to any memory you choose.
Really my mistake could have been made whether I was using managed or native code. Once you start getting into more advanced topics, like accessing various chip features (ie IAP on the NXP chip that GHI uses for USBizi) it becomes risky, especially when you know just enough to get yourself in trouble
edit:
@Mario: you are correct about it not being supported, but I've never had an issue using it. In this case my conversions were 3 times faster than anything else I could come up with.
-Luke
#21831 Convert byte[4] to float
Posted by Luke Cummings on 18 December 2011 - 10:17 PM in Netduino 2 (and Netduino 1)
#12507 Locking Cat Feeder
Posted by Luke Cummings on 26 April 2011 - 06:57 PM in Project Showcase
Any variable voltage (IE, not 3.3V OR 0V inclusive) needs to be measured through an analog pin. You may need to use a voltage divider to drop the voltage to a level between 0V and 3.3V. Look for a voltage divider calculator to find the correct values of the 2 resistors.
Please note, if you are tapping off a motor lead like that, you may need to use some form of circuit protection. Motors are noisy and may wreck havoc on the Netduino if the sampling circuit is not correctly done.
The netduino's MCU AT91SAM7X512 pins are 5V tolerant so even though they only output 3.3V they can handle up to 5V as an input, that being said I wouldn't let the netduino look at an inductive load like chris says. Your just asking for trouble. Instead I would recommend prying open the control board to look for a digital signal (5V or less) that represents the motor action. To do this you will need a multimeter, just trigger the motors and start probing around for the signal.
Cheers!
#10643 Quad.Net Quadrocopter for .NETMF
Posted by Luke Cummings on 07 March 2011 - 05:15 PM in Project Showcase
Hello Brandon
I am interrested by your project, i would like to read your code but i can't access google site and tortoise say "Forbidden
Your client does not have permission to get URL /p/quadnet/ from this server."
it's my fault (bad client or bad actions) or it's because you should give me a read acces before ?
Thanks a lot
Gilles,
Currently the project is not posted but we will be going live soon, the new project site is available at http://dotcopter.net/
#10315 Strange Data on SDA/SCL
Posted by Luke Cummings on 27 February 2011 - 05:02 PM in Netduino Plus 2 (and Netduino Plus 1)
#10300 Simultaneous Outport Ports?
Posted by Luke Cummings on 27 February 2011 - 07:03 AM in Netduino Plus 2 (and Netduino Plus 1)
#10231 Quad.Net Quadrocopter for .NETMF
Posted by Luke Cummings on 26 February 2011 - 03:00 AM in Project Showcase
how often does GC kick in?
about every 5 - 7 seconds
#10226 Quad.Net Quadrocopter for .NETMF
Posted by Luke Cummings on 26 February 2011 - 12:40 AM in Project Showcase
Here's the new flight video:
http://www.youtube.com/watch?v=8Dy-4ppzCIM
This is a drastic improvement over the last iteration, and it still involves no native code!
Check out the full post here.
#10205 Quadcopter Early Flight
Posted by Luke Cummings on 25 February 2011 - 05:04 PM in Project Showcase
#10095 Simultaneous Outport Ports?
Posted by Luke Cummings on 24 February 2011 - 06:22 PM in Netduino Plus 2 (and Netduino Plus 1)
#9749 while(true)
Posted by Luke Cummings on 18 February 2011 - 07:07 AM in General Discussion
for(;;);
It looks funny but if you think about how a for loop works you can see how this basically turns into a looping nop instruction.
That said since you are dealing with an interpreted language I'm not sure if this would actually turn into an infinitely looping nop instruction like it would in c.
This makes it so that other threads may be delayed in getting access to processor time giving you a slow response and also doesn't let the chip go into a power saving mode.
It shouldn't delay any other threads as the processor is always doing "something" nop's or otherwise, but you're correct that it will increase power consumption.
Edit: This statement is unverifiably vauge
#9598 ATmega 328p programmer
Posted by Luke Cummings on 15 February 2011 - 10:03 PM in General Discussion
Hi guys,
I am looking for a ATmega 328p programmer. The reason is that my 9dof from Sparkfun has (apparently - what a bummer) a flawed bootloaded and needs to be reflashed.
Thus I am wondering if you have any recommendations (possibly being available in EU).
I guess I'll have to solder SPI pins as well. Just great
If you already have a spare arduino you can reflash the arduino bootloader like this:
http://arduino.cc/en...rial/ArduinoISP
#9280 Netduino + BL-CTRL 2.0 + I2C = Not working?
Posted by Luke Cummings on 10 February 2011 - 09:11 PM in Netduino 2 (and Netduino 1)
#9137 BitConverter
Posted by Luke Cummings on 08 February 2011 - 12:31 AM in Project Showcase
When dealing with bit conversions always use the Utility class, for instance working with floats:
public static unsafe float ToFloat(ref byte[] buffer, int offset) { uint value = Utility.ExtractValueFromArray(buffer, offset, 4); return *((float*) &value); } public static unsafe void ToBytes(ref byte[] buffer, int offset, float value) { Utility.InsertValueIntoArray(buffer, offset, 4, *((uint*) &value)); }
Note that the name ToBytes isn't exactly accurate as normally a bit converter would return the array, but usually you are using this to pack data in a long buffer, and using the reference saves the additional hit for making a new array.
or how about a double word sized variable:
public static long ToLong(ref byte[] buffer, int offset) { long value = (long)Utility.ExtractValueFromArray(buffer, offset, 4) << 32; value |= Utility.ExtractValueFromArray(buffer, offset + 4, 4); return value; } public static void ToBytes(ref byte[] buffer, int offset, long value) { Utility.InsertValueIntoArray(buffer, offset, 4, (uint)(value >> 32)); Utility.InsertValueIntoArray(buffer, offset + 4, 4, (uint)value); }
Obviously you could adapt this for any other types you require. These are just what I use in my current project.
Cheers
#9089 Quad.Net Quadrocopter for .NETMF
Posted by Luke Cummings on 06 February 2011 - 11:53 PM in Project Showcase
I see - sorry for my misunderstanding.
No problem I didn't mean to be rude in my response. Actually thinking about it though it might be worth a try. I wasn't thinking about the fact that the pins will float during startup, I'm gonna try this anyways it might actually be a solution. Given not what I was thinking of, but I will report back if this works.
Cheers
#9086 Quad.Net Quadrocopter for .NETMF
Posted by Luke Cummings on 06 February 2011 - 09:35 PM in Project Showcase
A pull-down resistor pulls the output to ground - so, there will be 0% PWM output (logic low) during Netduino startup (when the pin is floating high).
Your missing the point, 0% output is not logic low, 0% output is a pulse lasting 1000 microseconds every 20 milliseconds. Holding the pin low would not do anything.
#9081 Quad.Net Quadrocopter for .NETMF
Posted by Luke Cummings on 06 February 2011 - 08:09 PM in Project Showcase
A pull-down resistor on PWM output?
I'm not sure what that would do. The issue is that for the escs to boot they want to see a 0% signal (1000 us pulse, or whatever they have been calibrated for).
#9079 Quad.Net Quadrocopter for .NETMF
Posted by Luke Cummings on 06 February 2011 - 07:35 PM in Project Showcase
#9060 Quad.Net Quadrocopter for .NETMF
Posted by Luke Cummings on 06 February 2011 - 06:36 AM in Project Showcase
But if I take such a 9dof stick, I must make all the calculations on the .netmf device.
The Razor 9dof would do all this calculations:
I have binary messages over serial: [type:length in byte]
[DIYd:4][ID:1][roll:2[pitch:2][yaw:2][checksum:2] => 13byte
But how to request data on demand? just send a byte to the Razor and respond?
Yeah i would just setup a polling loop to check for an incoming message, then provided the data. and honestly you are providing the data so frequently I dont see any value in doing checksum calculations either.
The reason I don't want to be doing calculations on an external board is it reduces accessibility to the code. Principally we want to be able to plug and play hardware, with all control logic being done on the .netmf device. To be honest if your not gonna use the .netmf device to do your control logic then why use it at all. The additional arduino is for convenience, eventually I would like to move to native solution for handling the radio ppm stuff.
#9028 Quad.Net Quadrocopter for .NETMF
Posted by Luke Cummings on 05 February 2011 - 12:56 PM in Project Showcase
I see why you use the Arduino to get the radio data, but why the motors are connected there too? Haven't the Netduino and Domino/Panda native PWM pins? I wanted to use the PWM's on my FEZ.
...
What do you think?
Yeah you noticed that eh? I originally was going to use my arduino as the flight control board. It was just easier to relay motor command over I2C. I actually just finished rewiring the shield so that the pwm pins come from my fez panda directly. So you totally had the right idea there.
So now the razor. Ultimately creating code for interfacing with stuff like the razor is something we want to do, we're just not at that stage yet. Wasting 3ms on parsing the razor's ahrs code is really a waste though, and really from everything i've seen about multicopters so far 50Hz is not gonna be nearly fast enough. You could totally re-write the firmware to get spit out raw data across serial on a demand basis and if you need help i can provide it. My personal recommendation is to just ditch the razor imu for this instead http://www.sparkfun....products/10321.
As far as concetrating all this data on another arduino, I think that adds too much complexity. All I really want the arduino to be is a PPM to I2C converter for the radio. I think eventually I will swap out the teensy for something even smaller.
Cheers
#9010 Quad.Net Quadrocopter for .NETMF
Posted by Luke Cummings on 04 February 2011 - 08:55 PM in Project Showcase
Are there any schematics how to connect the "Dataconcentrator"?
I've taken a deeper look at your framework, it's a good piece of code.
I've added some code to support my peripherals.
I just need an arduino for the Dataconcentrator.
Hey zerov,
I don't have any schematics (it's all just proto'd right now), but at a basic level you will just need to interface your arduino (or any other realtime mcu), and the netmf board over I2C. I used this logic level converter to get them talking: http://www.sparkfun.com/products/8745. It's not actually strictly necessary to use the level converter between the arduino and you netmf board as they are usually 5V tolerant, however since I put the gyro and accel on the same bus you will need the converter(they are 3v only). I will attempt to put together a diagram of how I have everything wired up this weekend.
-Luke
#8642 Coding style discussion
Posted by Luke Cummings on 28 January 2011 - 11:08 PM in General Discussion
Brandon, I think you're reading my comments in the wrong tone - i meant them as a general comment, not targeted at anyone specific. I'm an Aussie, we're pretty layed back and chill - if in doubt, just read my post as a layed back view point
Please feel free to take a look at these links:
IDesign have an exceptional coding standard for C#, which a lot of companies I know of base their standards on. These are basically an expansion of Microsoft's:
http://www.idesign.n...ng Standard.zip - zip with PDF.
This is what Microsoft use internally: http://blogs.msdn.co.../26/361363.aspx
The guideline for creating class libraries is a rather informative read: http://msdn.microsof...y/ms229042.aspx
And this is the book I mentioned (which I recommend every developer - professional, amatuer and enthisuast alike read) - http://www.amazon.com/dp/0321545613/ - on on Book Depository if you're not in the USA (free shipping! woo) http://www.bookdepos...sign-Guidelines
IDesigns C# standards (my personal favourite), section 1 point 4:
Prefix member variables with m_. Use Pascal casing for the rest of a member
variable name following the m_.
public class SomeClass { private int m_Number; }
#8580 Quad.Net Quadrocopter for .NETMF
Posted by Luke Cummings on 27 January 2011 - 07:20 PM in Project Showcase
- Netduino Forums
- → Luke Cummings's Content
- Privacy Policy